Create your first app
Last updated
This walks through a first deployment and, more usefully, how to tell whether it actually worked.
1. Create the application
From the dashboard, Create application. The simple flow offers the Runny AI Agent — drop in a .zip of your project and it works out the runtime, dependencies and start command for you. Advanced gives you the four explicit paths: Git Push, Docker Push, Prefab Template, and Existing Image.
If you're not sure, see Choose a deploy method. Git Push is the usual answer if you have a Dockerfile; the zip flow is the usual answer if you don't.
2. Configure it
Once the app exists, its page has everything:
| Panel | What you'll need it for |
|---|---|
| Ports | A public URL for anything serving HTTP — skip entirely for bots and workers |
| Env Vars | Configuration and secrets |
| Volumes | Anything that must survive a restart |
| Performance | CPU and RAM presets |
| Logs / Events / Shell / Files | Finding out what's happening |
Each of the first four restarts the app when saved, so make your changes together rather than one at a time.
3. Check that it works
The status showing running means the container is up. It does not mean your app is functioning — a process that crashed and was restarted, or one that's hung, looks identical.
So check properly, in this order:
- Read the logs. Look for your own startup output. If you see nothing, suspect output buffering before suspecting the platform — Python needs
PYTHONUNBUFFERED=1. - Look for a repeating exit line or a climbing restart count. That's a crash loop, and the exit code tells you why.
- If it serves HTTP, open the URL and use it. That's the only check that proves anything.
- If it's a bot, do the thing it's supposed to do in the chat platform.
Common first-deploy problems
| Symptom | Cause |
|---|---|
| Deploy succeeds, URL doesn't respond | App bound to 127.0.0.1 instead of 0.0.0.0 |
| App starts then exits immediately | Missing environment variable, or a dev-server command |
| Logs are empty | Output buffering — set the unbuffered flag |
| Data disappears after a change | Written outside a volume |
| Build fails part-way with no clear error | Out of memory in the build — build in CI instead |
Frontend calls undefined/api/... |
A build-time variable that wasn't available during the build |
A good first app
If you want something to try the flow with, a small worker is the easiest thing to succeed at — no ports, no HTTPS, nothing to bind wrongly. Print a line every thirty seconds and watch it appear in the logs; you'll have exercised deploys, logs and restarts in about two minutes.
Next
- How the platform works — restarts, persistence, and what's public
- Limits and quotas — per-app allocation, account quotas, and the disk limit