Deploy by uploading a zip
Last updated
Upload an archive of your project and the Runny AI Agent works out how to run it — no Dockerfile required. This is the path to use if you don't have one, or don't want to write one.
What to put in the zip
The panel's own guidance is the right guidance: start with the same folder you run locally, keep the essentials, and drop bulky generated files.
Include source code, config files, and anything the app reads at runtime.
Exclude build outputs and caches — node_modules, venv/.venv, dist, bin/obj, __pycache__, .git.
That exclusion list is doing real work: those folders are usually the majority of a project's size and are rebuilt during deployment anyway. Removing them is often the difference between fitting the archive size limit and not.
What the agent does
It reads your actual files rather than matching a template — imports, manifests, entry points — and writes a deployment plan from what it finds. That's why it copes with projects that don't follow a standard layout.
Two behaviours worth knowing:
- It asks for secrets rather than guessing. When it sees your app needs a token or API key, it pauses and asks. The value goes into the app's configuration, not into your code or the image.
- It checks its own work. After the container starts, it reads the real logs looking for crashes rather than assuming success, and gets one attempt to diagnose and fix what it finds.
Supported runtimes
Python, Node.js, and prebuilt .NET. Anything else needs a Dockerfile and Git Push — which your AI coding tool can write for you if you ask.
Limits
The archive size cap and your remaining daily builds are both shown on the upload page. Because builds are limited, it's worth zipping carefully rather than uploading five times in a row.
After it's running
The agent gets you to a running container; the rest is normal configuration:
- Add a volume if your app stores anything. Files written next to your code are discarded on the next deploy — this is the most common surprise.
- Check the port binding if it serves HTTP, and that your app binds
0.0.0.0. - Open the logs and confirm it's doing what you expect.
If it can't work it out
- Make the entry point obvious — a conventional filename, a real dependency manifest.
- Check the error and adjust rather than re-uploading the same archive; builds are limited.
- Write a Dockerfile if you're fighting it. Fifteen lines and a git push gives you full control, and your AI tool can produce a first draft from the constraints in Configuration.
Related
- Prepare a zip archive — per-language notes
- Choose a deploy method