Browse documentation

Supported runtimes

The 12 Container runtimes on FPS.ms: which file each one starts, how it installs packages or builds your code, and which Startup settings to change.

CanerAkar
On this page

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.

Run your Python script for free

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:

  1. Click Manage on your server.
  2. Click Startup. If you do not see it in the top bar, click More first.
  3. 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

Next steps

Run your Python script or bot for free.

Upload your code, add your environment variables and keep it running 24/7.

Run your script free