pylon deploy at it, and your app is live.
When to use it
| You should use Cloud if… | You should self-host if… |
|---|---|
| You want to ship today, not learn ops | You have strict data residency / on-prem requirements |
| You don’t want to manage Postgres backups, TLS, scaling | You already operate Kubernetes / Nomad / your own VPS fleet |
| You’d rather pay per request than per server | Your workload spikes hard enough that reserved capacity is cheaper |
| You want managed magic-link email + OAuth credentials out of the box | You need to run an air-gapped deployment |
baseUrl changes.
Sign up
- Visit cloud.pylonsync.com and create an account.
- Create a workspace. Each workspace gets a stable URL like
https://your-app.pylon.appand an API key. - Add a payment method (free tier covers small projects; see pricing below).
Deploy from the CLI
pylon deploy --target cloud does:
- Builds your TypeScript functions with Bun
- Validates
pylon.manifest.json - Uploads the bundle + manifest to your workspace
- Runs migrations
- Cuts over traffic atomically (zero-downtime — old version drains)
https://your-app.pylon.app that your clients connect to. Subsequent deploys are incremental.
Custom domains
CNAME record to your DNS, wait a minute, and you’re live on the custom domain. Both the apex Cloud URL and your custom domain stay valid.
Environment variables
Set per-workspace secrets without committing them to git:process.env.STRIPE_SECRET_KEY. They’re encrypted at rest and never appear in logs.
What’s included
- Postgres — managed, with daily backups and point-in-time recovery up to 7 days
- TLS — automatic Let’s Encrypt certificates on
*.pylon.appand your custom domains - Magic-link email — managed transactional sender; no SendGrid/Resend account required
- OAuth — bring your own Google/GitHub OAuth credentials, or use Cloud’s shared dev credentials in non-prod workspaces
- WebSocket + SSE + shard ports — exposed automatically; clients connect to the public URL
- File storage — S3-backed, included up to 10 GB on the free tier
- Studio — every workspace has the inspector available at
https://your-app.pylon.app/studio - Logs + metrics — request logs, function traces, and basic latency/error charts in the dashboard
- Versioned deploys —
pylon deploy --rollbackreverts to the previous version
Scaling
Cloud autoscales the HTTP, WebSocket, and shard tiers separately based on load. The usage-based pricing model means you don’t pre-provision — you pay for what you use. For multiplayer apps with sticky shard connections, set the shard region when creating the workspace so latency to your players is minimized:| Region | Code |
|---|---|
| US East (Ashburn) | iad |
| US West (San Jose) | sjc |
| EU (Frankfurt) | fra |
| Asia (Singapore) | sin |
Pricing
Usage-based, no monthly minimums:| Resource | Free tier | Beyond free |
|---|---|---|
| HTTP requests | 1M / month | $0.50 / 1M |
| WebSocket connection-minutes | 100K / month | $0.10 / 100K |
| Postgres storage | 1 GB | $0.20 / GB / month |
| File storage | 10 GB | $0.02 / GB / month |
| Bandwidth (egress) | 100 GB | $0.05 / GB |
| Magic-link emails | 1K / month | $1.00 / 1K |
Migrating from self-hosted
baseUrl. Sessions are preserved (the session store is part of the snapshot), so users stay signed in.
Migrating to self-hosted
Troubleshooting
pylon deploy says “not authenticated” — run pylon login again. Tokens expire after 90 days.
Custom domain stuck on “verifying” — DNS propagation can take up to 24 hours. dig CNAME app.example.com should show your *.pylon.app target.
Magic-link emails not arriving — check the spam folder for the first send (Cloud uses a shared sender domain that warms up over time). For production, configure your own sender domain in Settings → Email to authenticate with SPF/DKIM/DMARC under your domain.
WebSocket disconnects — Cloud’s load balancer holds connections for up to 4 hours; the sync engine handles reconnects automatically with full-jitter backoff. If you see frequent drops, check connection state in the dashboard.