A Container runs your code in one of 12 runtimes: Python, Node.js, Bun, .NET, Dart, Go, Java, Kotlin, Haskell, Lua, Odin and Rust. Each runtime starts a default file, for example app.py for Python or index.js for Node.js, and installs your packages or builds your code when the server starts. You change the file name and other settings on the Startup tab. This page lists what each runtime does and what you can change.
How a runtime starts your code
- Without GitHub deploys, the server installs your packages and, for compiled languages, builds your code every time it starts. Then it runs your app.
- With GitHub deploys, the install and build run once per deploy, in the deploy script. For every runtime except Python and Node.js, starting the server then only runs the finished app, so restarts are faster. Python and Node.js still check their packages on every start.
To change a setting:
- Click Manage on your server.
- Click Startup. If you do not see it in the top bar, click More first.
- Change the field. It saves by itself. Restart the server from the Console.
To change the version of the runtime, for example Python 3.11 to 3.13, pick another one under Runtime Version on the same tab.
Quick reference
| Runtime | Starts by default | Settings on the Startup tab |
|---|---|---|
| Python | app.py |
App py file, Requirements file, Additional Python packages |
| Node.js | index.js |
Main file, Additional Node packages, Additional Arguments |
| Bun | index.ts |
Main File |
| .NET | Your .csproj, built |
Project File, DLL File |
| Dart | bin/server.dart, compiled |
Main File |
| Go | Your module, built | Go Package, Executable |
| Java | Your Maven or Gradle project, built | JAR File |
| Kotlin | Your Gradle project, built | JAR File |
| Haskell | Your Cabal or Stack project, built | Executable Name |
| Lua | main.lua |
Main File, LuaRocks Packages |
| Odin | Your package, built | Package Folder, Build Flags |
| Rust | Your crate, built | Crate Path, Binary Name, Executable |
Kotlin and Haskell are on paid plans only. Every other runtime has a free plan.
Python
The server installs the packages in Additional Python packages, then everything in requirements.txt, then runs app.py. Change the file to run in App py file. See installing Python packages for the details and common pip errors.
More: Python hosting
Node.js
If there is a package.json, the server runs npm install, then starts the Main file (index.js) with node. It does not run npm start. A Main file that ends in .ts, like index.ts, runs with ts-node, so TypeScript works without a build step. Additional Arguments are passed to node.
More: Node.js hosting
Bun
If there is a package.json, the server runs bun install, then runs the Main File (index.ts) with bun. Bun runs TypeScript directly.
More: Bun hosting
.NET
The server runs dotnet publish on the .csproj in Project File, or on the first .csproj in the main folder when the field is empty, and runs the result. Without a project, it runs the published DLL in DLL File (app.dll).
Dart
The server runs dart pub get when there is a pubspec.yaml, compiles the Main File (bin/server.dart) with dart compile exe, and runs it.
More: Dart hosting
Go
With a go.mod, the server builds the package in Go Package (., or for example ./cmd/bot) and runs it. Without a go.mod, it runs a binary you uploaded, named in Executable (app). Go's memory limit is set to 90% of your plan's memory, so the garbage collector works before the server runs out.
Java
With a pom.xml, the server builds with Maven. With a Gradle build file, it builds with Gradle (your gradlew when there is one). Tests are skipped. It runs the JAR the build made, preferring a -all.jar (fat JAR). Without a project, it runs the JAR in JAR File (app.jar). Java may use 75% of your plan's memory.
Kotlin
With a Gradle build file, the server builds with Gradle like Java does. Without one, it compiles the .kt files in the main folder with kotlinc. Without either, it runs the JAR in JAR File. Gradle needs about 1 GB of memory to build, so pick a plan with at least that much.
More: Kotlin hosting
Haskell
The server builds with Cabal when there is a .cabal file or cabal.project, otherwise with Stack. It runs the executable in Executable Name, or the first one in your .cabal file when the field is empty.
More: Haskell hosting
Lua
The server installs the dependencies of your .rockspec and the rocks in LuaRocks Packages with LuaRocks, then runs the Main File (main.lua). Rocks that need OpenSSL to build, like luasec, cannot be installed.
More: Lua hosting
Odin
The server builds the package in Package Folder (.) with odin build and the Build Flags (-o:speed), then runs it.
More: Odin hosting
Rust
With a Cargo.toml in Crate Path (.), the server builds your crate with cargo install and runs its binary. If the crate has more than one binary, name the one to run in Binary Name. A Cargo.lock is respected. Without a Cargo.toml, it runs a binary you uploaded, named in Executable (app).
More: Rust hosting