Language Guides
These guides take you from a project on your laptop to a running app on Miren, one language at a time. Each one covers the same three things: how to set up the app, how to set environment variables, and whether you need a Dockerfile.
If you use an AI coding agent (Claude Code, Codex, Amp, and others), you don't have to follow these guides by hand. Install the Miren agent skills and ask your agent to "set up this app on Miren" — it reads your project, detects the stack, wires up environment variables, and deploys. These guides double as the reference your agent works from. See Agent Skills for setup.
Pick your language
| Guide | Auto-detected? | You provide |
|---|---|---|
| Python | Yes | requirements.txt / pyproject.toml / Pipfile / uv.lock |
| JavaScript (Node & Bun) | Yes | package.json + a lockfile |
| Go | Yes | go.mod |
| Ruby | Yes | Gemfile |
| Rust | Yes | Cargo.toml |
| Elixir | No | Dockerfile.miren |
| Gleam | No | Dockerfile.miren |
| Crystal | No | Dockerfile.miren |
| Zig | No | Dockerfile.miren |
| Deno | No | Dockerfile.miren |
| Nim | No | Dockerfile.miren |
| C | No | Dockerfile.miren |
| C++ | No | Dockerfile.miren |
| Objective-C | No | Dockerfile.miren |
| .NET / C# | No | Dockerfile.miren |
| F# | No | Dockerfile.miren |
| Java / JVM | No | Dockerfile.miren |
| Kotlin | No | Dockerfile.miren |
| Scala | No | Dockerfile.miren |
| Clojure | No | Dockerfile.miren |
| Erlang | No | Dockerfile.miren |
| PHP | No | Dockerfile.miren |
| Perl | No | Dockerfile.miren |
| Raku | No | Dockerfile.miren |
| OCaml | No | Dockerfile.miren |
| Haskell | No | Dockerfile.miren |
| Swift | No | Dockerfile.miren |
| Dart | No | Dockerfile.miren |
| JRuby | No | Dockerfile.miren |
| TruffleRuby | No | Dockerfile.miren |
| Julia | No | Dockerfile.miren |
| R | No | Dockerfile.miren |
| Lua | No | Dockerfile.miren |
| Klong (K) | No | Dockerfile.miren |
| Common Lisp | No | Dockerfile.miren |
| COBOL | No | Dockerfile.miren |
| Bash | No | Dockerfile.miren |
| Static sites & SPAs | No | Dockerfile.miren |
Auto-detected vs. Dockerfile
For most languages, Miren detects your stack from your project files and builds a
container image for you — no Dockerfile required. You run miren init once and
miren deploy, and Miren figures out the rest. See Supported Languages
for exactly what's detected and how.
Every other language here — from Elixir and Gleam to Kotlin, Swift, Julia, and even
COBOL — isn't auto-detected, so its guide shows you a Dockerfile.miren you
can drop into your project. Miren builds from that Dockerfile instead of guessing. This
is the same escape hatch available to every language when you need full control over the
build — see Using Dockerfile.miren.
Native builds cover the common stacks today (Python, Node, Bun, Go, Ruby, Rust). If you'd like Miren to detect and build another language first-class — no Dockerfile needed — tell us what to build next.
Even with a Dockerfile.miren, you must define at least one service — a Procfile or a
[services.web] block. Miren does not use the image's CMD/ENTRYPOINT as the start
command; that fallback applies only to auto-detected stacks.
What every guide assumes
- You've installed Miren and can reach a cluster. If not, start with Getting Started.
Your web service must bind to 0.0.0.0 on the port in the PORT environment variable.
Miren injects PORT at runtime and routes traffic to it — an app that hardcodes
localhost or a fixed port won't receive traffic.
Next steps
- Deployment — how
miren deploybuilds and activates versions - App Configuration — customize with
.miren/app.toml - Services — run workers and multiple processes
- Agent Skills — let your agent operate Miren for you