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

  1. Create an app, choosing a deploy method.
  2. Bind a port if it serves HTTP — or don't, if it's a worker.
  3. Set environment variables for configuration and secrets.
  4. Add a volume if it stores anything that must survive a restart.
  5. 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.

Next