Preparing a zip archive

Last updated

Uploading a zip lets the Runny AI Agent work out how to build and run your project — no Dockerfile needed. This section covers what to put in the archive and what each language needs.

See Deploy by uploading a zip for the flow itself.

Supported runtimes

The agent detects and builds:

  • Python
  • Node.js
  • .NET — from a prebuilt publish output

Anything else — Go, Rust, Java, PHP, Ruby, Elixir — needs a Dockerfile at the root. That's not a hard requirement to meet: fifteen lines, and your AI coding tool can write a first draft. Once you have one, Git Push is usually a better fit than zip uploads anyway.

What to include

Start with the folder you run locally, then remove what's generated:

Include — source code, dependency manifests (requirements.txt, package.json, *.csproj), config files, and anything the app reads at runtime.

Exclude — node_modules, venv / .venv, dist, build, bin / obj, __pycache__, .git, and any local database or .env file.

Two reasons that exclusion list matters. Those folders are usually most of your project's size, and the archive has a size cap. And they're rebuilt during deployment anyway — shipping them wastes the upload and can actively confuse detection.

Leaving out .env is not optional: it's how secrets end up somewhere you didn't intend. The agent will ask you for the values it needs.

Make the entry point obvious

The agent reads your files rather than following a rigid convention, but it works best when there's an unambiguous answer to "what starts this":

  • One dependency manifest, not several competing ones
  • A conventional entry filename
  • The app at the root, or inside a single top-level folder

If your project has multiple applications in one archive, split them — one app per zip.

After it deploys

The agent gets you a running container. These are still yours to decide:

  • A volume if the app stores anything. Files written next to your code are discarded on the next deploy — the single most common surprise.
  • A port binding if it serves HTTP, and your app must bind 0.0.0.0 rather than localhost.
  • Any remaining environment variables the agent didn't ask about.

Per-language notes