Getting started
Last updated
You give the platform code or an image; it runs it as a container with a public URL, persistent storage, logs and a shell. There's no cluster to manage and nothing to keep awake.
What it's good at
The platform suits small, long-running processes:
- Discord and Telegram bots, and other workers with no inbound port — nothing expects your process to answer HTTP, so there's no keep-alive workaround needed.
- Small web apps and APIs, with automatic HTTPS on a platform subdomain.
- Scheduled and background work — your process runs continuously, so a loop can be the scheduler.
- Self-hosted tools that are small and mostly idle.
- AI agents that call a model API — they spend their time waiting on someone else's hardware, which makes them cheap to host.
What it isn't good at
Being straight about this saves you an evening:
- Running models locally. Weights need gigabytes of RAM before your code starts.
- Headless browsers (Puppeteer, Playwright, Selenium) — hundreds of megabytes before your own code.
- Game servers and video transcoding — sustained CPU against an allocation that's a time budget.
- Anything needing multiple instances, private networking, or multiple regions. An app is a single container. See How the platform works.
The five-minute version
- Create an app, choosing a deploy method.
- Bind a port if it serves HTTP — or don't, if it's a worker.
- Set environment variables for configuration and secrets.
- Add a volume if it stores anything that must survive a restart.
- Open the logs and confirm it actually works.
Step 5 matters more than it sounds: the status tells you the container is running, not that your app functions.
Three things that surprise people
Worth knowing before you start, because each explains a class of confusion:
- Configuration changes restart the app. Environment variables, ports, volumes and presets all recreate the container — not just deploys.
- Only volumes persist. Anything else your app writes is discarded on the next restart, silently.
- Nothing checks whether your app works. There are no health checks, so a broken app can report as running indefinitely.