Skip to content

Zynd Deployer

deployer.zynd.ai is a hosting platform for Zynd agents and services. Drag your project folder and keypair into the browser. Get https://<slug>.deployer.zynd.ai with TLS, live logs, metrics, and automatic registration on the network.

When to use it

  • You want a permanent HTTPS URL for your agent without renting a server.
  • You don't want to run Docker, Caddy, and TLS yourself.
  • You want to test your agent live before committing to your own infrastructure.
  • You want logs, crash detection, and health checks out of the box.

If you already own a VPS or a Kubernetes cluster, you don't need the Deployer — just set ZYND_ENTITY_URL and run the SDK yourself. The Deployer is a convenience, not a dependency.

What the Deployer gives you

FeatureDetail
Permanent HTTPS URLhttps://<slug>.deployer.zynd.ai, wildcard TLS via DNS-01.
Automatic registrationYour SDK container self-registers on zns01.zynd.ai with the keypair you uploaded.
Live logsSSE stream of every stdout/stderr line.
MetricsCPU %, memory usage, sampled every 30 s.
Crash detectionDocker events tell the Deployer within a second when a container dies.
Health polling/health checked every 60 s. 3 failures → marked unhealthy.
Stop / restartClick Stop in the dashboard. Worker cleans up container, Caddy route, and port.
Encryption at restYour project zip and keypair are encrypted with age before being written to disk.

What it does NOT do

  • No registry editing. The Deployer never talks to zns01.zynd.ai. Your container does that with its own keypair.
  • No user accounts. Uploads are open. Your keypair is your identity.
  • No Kubernetes. One VM, Docker-based. Scales to ~50 active deployments per instance by default.
  • No secrets manager. Put keys in .env. They are encrypted on disk but not rotated by the platform.
  • No persistent storage. Containers run on a read-only filesystem over your uploaded code. Use external DBs for state.

How it works

Step-by-step:

  1. Upload. Dashboard zips your project folder and sends it plus the keypair to POST /api/deployments.
  2. Validate. API rejects zips containing developer.json, absolute paths, or files over 50 MB.
  3. Encrypt. Both blobs are age-encrypted with the master key and written to /var/lib/zynd-deployer/.
  4. Queue. A Deployment row is inserted with status=queued.
  5. Worker claims. A background loop picks up queued rows, claims them, and walks the state machine: unpacking → allocating → starting → health → running.
  6. Port allocated in 13000-14000, reserved atomically.
  7. Config rewritten. Worker injects ZYND_ENTITY_URL=https://<slug>.deployer.zynd.ai, ZYND_REGISTRY_URL=https://zns01.zynd.ai, ZYND_WEBHOOK_PORT=5000 into .env and agent.config.json.
  8. Container starts with docker run zynd-deployer/agent-base:latest, limited to 1.5 GB RAM / 1 CPU.
  9. Health probe polls http://127.0.0.1:<port>/health up to 30 times.
  10. Caddy route added for <slug>.deployer.zynd.ai.
  11. Container self-registers on zns01.zynd.ai using its own keypair.
  12. Monitoring starts — log tailer, crash watcher, metrics sampler, health poller.

Deployment lifecycle states

StateMeaning
queuedIn the worker queue, not yet started.
unpackingWorker is decrypting + extracting your zip.
allocatingReserving a port in 13000-14000.
startingdocker run in progress.
healthPolling /health — waiting for container readiness.
runningLive. Registered on Zynd. TLS URL active.
unhealthy3 consecutive /health failures. Container still up.
crashedContainer died (exit code, OOM, etc.).
stoppedYou clicked Stop. Container + route + port cleaned up.
failedPipeline failure before running — bad zip, missing keypair, port exhausted, etc.

Limits

Default
Max upload size50 MB
Max active deployments50
RAM per container1536 MB
CPU per container1.0
Log retention7 days (system logs: 30 days)
Metric retention3 days
Port range13000 – 14000

Self-hosting lets you change these — see Self-Host Deployer.

Next

Released under the MIT License.