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:

  1. Read the logs. Look for your own startup output. If you see nothing, suspect output buffering before suspecting the platform — Python needs PYTHONUNBUFFERED=1.
  2. Look for a repeating exit line or a climbing restart count. That's a crash loop, and the exit code tells you why.
  3. If it serves HTTP, open the URL and use it. That's the only check that proves anything.
  4. 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