Skip to main content
An app is a container Storiza runs for you from a template: a Minecraft server, a PostgreSQL database, a Node.js bot. You choose the template and a plan; Storiza handles the machine, the networking and the address. Every app has one volume — its files, which survive stops, restarts and reinstalls — and is reached through its endpoints: a domain for web traffic, or an address and port for games and databases.
1

Choose a template

type is game_server, database or bot. A template lists its versions (Minecraft 1.21, Node.js 22, …), the environment variables it reads, and whether you set its start command yourself (isCommandManaged: false, for runtimes like Node.js and Python) or the image owns it (databases, game servers).
2

Choose a plan

Plans set memory, CPU and storage. The plan’s type must match the template’s.
An app’s plan cannot be changed after it is created. Pick one with room to grow.
3

Choose a location

Each node is a machine in one city. Pick the one closest to your players or users and note its id.
4

Create the app

  • hostname is the name your app is known by; its public address is derived from it.
  • version pins one of the template’s versions. Leave it out for the template’s default.
  • env answers the variables the template declares. Values the template fixes cannot be set.
This pays from your balance. To pay at a checkout instead, send the same body plus method to POST /apps/order — see Billing and payments.
5

Start it

A new app is created stopped, so a successful creation is never confused with a container that failed to boot. Start it:
6

Connect

endpoints lists every way in, ready to use — for example tcp://node-us1.storiza.app:25565 for a game, or https://…storiza.app for a web endpoint. Use address exactly as given: tcp:// and udp:// are not interchangeable.

Changing an app

Settings that apply on the next restart are baked into the container when it is created, so follow them with POST /apps/{id}/lifecycle/restart.
PATCH /apps/{id}/environment replaces the whole set. Any variable you leave out is removed — read the current values from GET /apps/{id} (env) and send back every one you can change, with your edit. Variables the template fixes are refused, so leave those out.

Start commands for bots and runtimes

For runtime templates (Node.js, Python, Java, …) you decide how the app starts. The command is a list of arguments and is not run through a shell, so &&, pipes and variables-in-strings need a shell asked for by name:
That example installs dependencies from package.json on every start, then runs the bot. Dependencies are not installed for you otherwise — a Node.js app started with plain node index.js and no node_modules stops immediately with Cannot find module. $NAME and ${NAME} are replaced with the app’s environment variables before the container starts, so $PORT and your own variables work. POST /apps/{id}/command/preview shows exactly what a command will resolve to — and flags any variable that does not exist — before you save it.

Upload your code

Use the file API or SFTP to put your project into the app’s volume. The volume is the working directory, so relative paths in your code resolve against it.