Creating a Game
A game is the top-level resource in GameFlow. It holds your server configuration, builds, regions, and fleet settings.
Creating a game in the dashboard is a three-step flow: configure, install the SDK, and upload your server build.
Step 1: Configure the game
From Home / Games, click Create Game and fill in the game form.
Basic info
- Title, display name for your game.
- Description, short description shown in the dashboard.
- Cover image, optional. Uploaded to GameFlow's CDN; you can change it later from game settings.
- Tags, free-form tags for filtering and grouping.
Engine
- Game engine, Unity, Unreal, Godot, Colyseus, or Custom.
- Engine version, the version your server is built against.
Networking
- Primary port + protocol, the port your server listens on. Supported protocols:
- TCP, reliable, ordered transport.
- UDP, low-latency, connectionless transport. Common for realtime games.
- TLS, TCP wrapped in TLS termination for clients that require a secure connection, such as web browsers (WSS, HTTPS).
- Additional ports, optional named ports for extra protocols (e.g. a separate query port).
Resources
- vCPU, defaults to
500m. - Memory, defaults to
512Mi.
Regions
Pick one or more regions where servers should run. See Regions and Best Region.
Scaling strategy
Choose how servers are provisioned:
- On-demand (standalone), a fresh server starts each time you allocate.
- Fleet, a warm pool of servers sized by
buffer,minReplicas, andmaxReplicas. Allocations are served from the pool.
For fleets you also choose a rollout strategy (RollingUpdate or Recreate) with maxSurge and maxUnavailable knobs.
Environment variables & launch options
- Environment variables, key/value pairs passed to your container.
- Launch options, extra arguments appended to your server's command.
Step 2: Install the GameFlow SDK
Your server integrates the GameFlow Game Server SDK so GameFlow can manage its lifecycle. The SDK drives the full lifecycle for you:
- Connect, on startup (sidecar mode on GameFlow, local mode off-platform).
- Ready, once the server can accept players; health reporting then starts automatically.
- Track players, as they join and leave.
- Shutdown, when the game session ends.
There's no health loop to write yourself. The SDK Quickstart is the full per-language walkthrough; the short version per engine:
Engines
- Unity, add
gg.gameflow.gameservervia the Package Manager (git URL), create aGameFlowClient, callStart()thenReady(). - Unreal, copy the
GameFlowplugin from the SDK repo intoPlugins/, enable it in your.uproject, addGameFlowUnrealto your module'sBuild.cs, then useUGameFlowSubsystem. - Godot, copy the
gameflowaddon from the SDK repo into your project'saddons/, create aGameFlowinstance, callstart()andready(). - Colyseus,
npm install @gameflow.gg/gameserver-sdk, connect before booting rooms, callshutdown()inonDispose. - Other engines, if there's no GameFlow SDK for your engine yet, see Custom Engine below.
Other languages
- Go,
go get github.com/GameFlowGG/gameflow-gameserver-sdk/sdk/go,gameflow.Connect(ctx),gf.Ready(ctx). - Rust, add
gameflow-gameserver-sdk,GameFlow::connect().await,gf.ready().await. - Node.js,
npm install @gameflow.gg/gameserver-sdk,GameFlow.connect(),ready().
Step 3: Upload your server build
Final step: upload a packaged build of your server. GameFlow builds it into a container image and stores it as the game's first build.
Accepted formats
Compressed archives only, max 2GB:
.zip.tar.tar.gz.gz.pck
The archive must contain a Dockerfile at the root.
Upload methods
Drag & drop the archive onto the upload zone in the dashboard, or browse to pick a file. Upload starts immediately.
CLI, for larger builds or CI pipelines, use the GameFlow CLI:
curl -fsSL https://install.gameflow.gg | sh && \
gameflow builds create --game-id=<GAME_ID> --version v1.0.0 --file server.zip
See GameFlow CLI.
What happens during upload
- Upload, archive is streamed to object storage.
- Build, GameFlow spins up a build container, pulls base images, installs dependencies, compiles, and pushes to the image registry.
- Ready, the build appears on the game's Builds page and is promoted to current automatically (since it's the first one).
You can watch live build logs in the dashboard. If a build fails, fix the issue and retry without re-uploading the archive.
After a successful build
You can immediately launch a test server in any of the game's configured regions, or head to the game's detail page to allocate servers via the API or dashboard.
Custom Engine
Selecting Custom gives you full control over your server's container image. Unlike the managed engines (Unity, Unreal, Godot, Colyseus), GameFlow does not apply a built-in Dockerfile template, you bring your own.
When to use Custom
- Your server is built with an in-house or proprietary engine
- You need a runtime not covered by managed engines (e.g. a C++ dedicated server, a Python simulation, a Rust game server)
- You want to control the base image, OS dependencies, or build steps that the managed templates don't expose
Dockerfile requirements
Your uploaded archive must contain a Dockerfile at the root (detected case-insensitively). GameFlow uses it verbatim, no template is layered on top.
A minimal example for a compiled Linux binary:
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
RUN useradd -u 1000 -m gameuser
WORKDIR /opt/game
COPY . /opt/game
RUN chmod +x /opt/game/server
RUN chown -R gameuser:gameuser /opt/game
USER 1000
EXPOSE 7777/udp
ENTRYPOINT ["/opt/game/server"]
A few things to keep in mind:
- Run as UID 1000. GameFlow enforces non-root execution at runtime.
- Expose the right port. Match the port you configured in the Networking step.
- Keep the image lean. Larger images slow down cold starts and fleet rollouts.
SDK integration
Your server talks to GameFlow for its lifecycle and player tracking through the GameFlow Game Server SDK, which covers Unity, Unreal, Godot, Colyseus, Go, Rust, and Node.js. See Step 2 and the SDK Quickstart.
If your engine isn't covered by an SDK yet, contact GameFlow support for integration options.