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
type must match the template’s.3
Choose a location
id.4
Create the app
hostnameis the name your app is known by; its public address is derived from it.versionpins one of the template’s versions. Leave it out for the template’s default.envanswers the variables the template declares. Values the template fixes cannot be set.
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.
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:
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.