# Can NetCraftGames host my game?

> We host multiplayer games that already work and have a server program that runs without a window. Five questions tell you which side of that line your game is on, and what to ask your AI to change. Nothing is uploaded and your answers stay in your browser.

*NetCraftGames (NCG) by Charging Bull Software. Last updated: 2026-10-03. Canonical page: https://netcraftgames.com/can-you-host-my-game/*

## The short answer

**NetCraftGames hosts a multiplayer game that already works.** It needs a server program, one that runs on its own machine without a window, on Linux. We do not write multiplayer, we do not turn a single-player game into a multiplayer one, and we do not host games that run on an online service such as Photon or PlayFab. If an AI built your game, read this page before you build anything else for hosting.

You get one of three answers:

- **Yes, ready.** Your game has the pieces we need. Next you run a check on your own computer, then submit.
- **Almost.** One change is missing. You get the change in one sentence and a prompt to give your AI.
- **Not yet.** We cannot host this today. We tell you why now, instead of after you upload.


> **What this check is, and is not.** NetCraftGames has not hosted a customer game yet, so no 24-hour result exists. This is a quick check of your answers, not a certification: we have not seen your code, and nothing has been run.
>
> NetCraftGames aims to have a valid submission online within 24 hours. That is a processing target, not a guarantee, and the clock pauses while we wait for a fix that only you can make. The clock starts when we receive a complete submission. This quick check, and the time you spend building and testing your server, are not part of it. A brand-new submission after a closed one starts a new clock. See https://netcraftgames.com/24-hour-promise/ for the conditions.


## Check your game

Pick the answer that fits best. **Not sure** is always fine: it leads to a way to find out.


1. **What is your game built with?** Unity; Unreal Engine; Godot; A browser game (JavaScript or TypeScript); Python; Something else (Go, Rust, C#, C++, Java); I do not know. If you pick a browser game or Python, you are also asked which networking library the server uses.
2. **Can two people play together over the internet right now?** Yes, and I tested it with two players; It is supposed to, but I never tested it; No, it is single-player; Not sure.
3. **How do players connect to each other?** To a server program that I run (a dedicated server); One player hosts and the others join that player (host, listen server or peer to peer); Through an online service (Photon, PlayFab, Steam, Epic, Firebase, Supabase or a lobby service); Not sure.
4. **Does the game have a server mode that runs without opening a window?** Yes, I already run it that way; Yes, but only on Windows or Mac; No, the server only runs inside the game window or the editor; Not sure. For a browser or Python game this question reads: is your server a Node.js or Python program that you start from a terminal?
5. **Which of these does your server already do?** It listens on a port I can change with a setting; It answers a health check page; It saves and exits cleanly when told to stop. Asked only if you have a dedicated server that already runs without a window on Linux. If you picked Something else, a fourth tick asks whether your server sends a fixed hello line, or answers a simple web page, to prove a player could join.


## Not sure? Ask your AI to find out

This prompt makes your AI read your project, change nothing and print one JSON answer. Paste that answer into the box above, and every "Not sure" is filled in. The answer is checked inside this page and never sent anywhere.


**Find out what my project is**

```text
TASK: Read this project and tell me what it is. Do not change any file.
Answer by printing ONE JSON object and nothing else, in exactly this shape (schema ncg.qualify-answers/1):
{
  "schema": "ncg.qualify-answers/1",
  "engine": "unity" | "unreal" | "godot" | "browser-js" | "python" | "other",
  "language": "<main language>",
  "networking": "none" | "dedicated-server" | "host-or-p2p" | "third-party-service",
  "networkingLibrary": "<name found in the code or package files, for example Mirror, Netcode for GameObjects, ws, socket.io, Colyseus, Photon, Steam, none>",
  "twoPlayerTestExists": true | false,
  "serverModeWithoutWindow": "yes-linux" | "yes-windows-or-mac-only" | "no",
  "hasHealthEndpoint": true | false,
  "readsPortFromSetting": true | false,
  "handlesSigtermAndSaves": true | false,
  "evidence": ["<file path and line for each answer, at most 12 items>"]
}
Rules: base every answer on files you actually opened. If you cannot tell, use the most cautious value (for example "none" or false) and say why in evidence.
Do not include secrets or file contents beyond one short line per evidence item.
```


## What we host and what we do not

We would rather tell you now than after you have spent a weekend on it. The [glossary](https://netcraftgames.com/glossary/) explains any word you do not know.


- **We do not write multiplayer.** NetCraftGames runs servers for games that already have multiplayer working. We never add networking to a game, and a single-player game is held when it is uploaded.
- **Games where one player is the server.** The thing we run is a dedicated server program that you own, one that runs on its own machine without a window. A game where one player hosts the others (a listen server, host mode or peer to peer) needs a dedicated server mode first. The one exception is a browser game that already uses WebRTC: we offer room signaling for it, but we do not relay the game traffic itself.
- **Games built on an online service.** Photon, PlayFab, Steam, Epic Online Services, Firebase and Supabase realtime run their own cloud. Our lane runs a server program that you wrote and own. If your game also has its own server code, that part can qualify.
- **Colyseus and other frameworks that need web requests before the WebSocket.** Our gateway passes WebSocket connections only. Colyseus asks for a room over plain HTTP first, so it does not work through the gateway and we say so before you submit. socket.io does work, but only with WebSocket-only transport (long polling is not passed) and the fixed path you declare in the manifest.
- **Servers whose WebSocket path changes for every room or player.** The gateway connects to your server at one fixed path: the root path "/" unless you declare a wsPath in the manifest (for example "/ws" or "/socket.io/?EIO=4&transport=websocket"). It cannot follow a path that changes for each room or each player, it does not forward anything a player puts in the address, and it passes WebSocket connections only, never plain web requests.
- **Other Node versions, Deno, Bun and servers that call other websites.** Our servers run Node.js 24.21.0 and Python 3.12. Nothing is installed on our side, so your packages travel inside your upload, built for Linux x64 (ncg pack does this on your own computer). Another Node version, Deno or Bun must be shipped inside the upload as a Linux x86-64 program. A server cannot look up other websites by name: DNS is closed to game servers on purpose, so a game that calls an outside address by name will fail. Node.js 26 is planned after it becomes a long-term-support release, with no date and no promise.
- **Windows or macOS servers and servers that need a screen.** Dedicated servers must be Linux x86-64 builds that run without a window or a graphics card. Windows, macOS and ARM server builds are not hosted.
- **A "Yes" here is not a certification.** This page checks your answers. We have not seen your code and nothing has been run. A real server start and a real player join are checked only after you submit a build.


## The decision table

This is the whole check as a table, for readers who skip the buttons and for search tools. Read down it: the first row that describes your game is your result.


| Row | If this describes your game | Result | The one change | Prompt |
| ---: | --- | --- | --- | --- |
| 1 | You said the game is single-player. | Not yet | None. We do not write multiplayer. | [Plan multiplayer for my game (a plan, not code)](https://netcraftgames.com/can-you-host-my-game/#p-plan-multiplayer) (planning only) |
| 2 | Players connect through an online service such as Photon, PlayFab, Steam or Firebase. | Not yet | Add a server program you own, or choose another host. | [Plan multiplayer for my game (a plan, not code)](https://netcraftgames.com/can-you-host-my-game/#p-plan-multiplayer) |
| 3 | One player hosts or it is peer to peer, in Unity, Unreal or Godot, and two-player play is tested. | Almost: one change | Add a dedicated-server mode: same networking code, no local player. | [the prompt for your engine or language](https://netcraftgames.com/can-you-host-my-game/prompts/) |
| 4 | One player hosts or it is peer to peer, in a browser game, and two-player play is tested. | Almost: one change | If the players connect with WebRTC, our room signaling can host the rooms. | [Browser game with WebRTC: use NetCraftGames room signaling](https://netcraftgames.com/can-you-host-my-game/prompts/webrtc-signaling/) |
| 5 | One player hosts or it is peer to peer in any other case. | Not yet | A dedicated server design comes first. | [Plan multiplayer for my game (a plan, not code)](https://netcraftgames.com/can-you-host-my-game/#p-plan-multiplayer) |
| 6 | Browser game that uses Colyseus. | Not yet | Move to plain WebSocket rooms or choose another lane. | [Move from Colyseus (or python-socketio) to plain WebSocket](https://netcraftgames.com/can-you-host-my-game/#p-node-migrate-to-ws) |
| 7 | Two-player play over the internet was never tested. | Almost: one change | Test with two real players first. | [Prove two players can play together](https://netcraftgames.com/can-you-host-my-game/#p-two-player-test) |
| 8 | The server only runs inside the game window or the editor. | Almost: one change | Add a server mode that runs without a window. | [the prompt for your engine or language](https://netcraftgames.com/can-you-host-my-game/prompts/) |
| 9 | The server mode exists, but only on Windows or Mac. | Almost: one change | Build the server for Linux x86-64. | [the prompt for your engine or language](https://netcraftgames.com/can-you-host-my-game/prompts/) |
| 10 | Browser or Python game that uses socket.io. | Almost: one change | JavaScript: switch to WebSocket-only transport and declare the socket.io path in the manifest. Python: move to plain WebSocket. | [Node.js with socket.io (WebSocket only)](https://netcraftgames.com/can-you-host-my-game/prompts/node-socketio/) (JavaScript), [Move from Colyseus (or python-socketio) to plain WebSocket](https://netcraftgames.com/can-you-host-my-game/#p-node-migrate-to-ws) (Python) |
| 11 | You answered "Not sure" to any of questions 1 to 4 and nothing above decided it. | Not sure yet | Find out first: run ncg check, or give your AI the discover prompt. | [Find out what my project is](https://netcraftgames.com/can-you-host-my-game/#p-discover) |
| 12 | You ticked every server basic in question 5. | Yes, ready | Next: run ncg check, then ncg pack. | none |
| 13 | One or more server basics in question 5 are missing. | Almost: one change | Add the missing server basics. | [the prompt for your engine or language](https://netcraftgames.com/can-you-host-my-game/prompts/) |


## Prompts that set up your server

Each prompt tells your AI exactly what the host needs: a port that can be set, a health probe, a join probe, a clean stop on SIGTERM, no secrets in code, and an `ncg.json` file with the exact settings. Every setting in them is checked against the real validator before this site is built. A prompt marked "Manifest checked" has passed that check; none of them has yet been tried against a real AI, so read what your AI changes.


| Prompt | What it makes your AI do | Status |
| --- | --- | --- |
| [Node.js WebSocket server (ws)](https://netcraftgames.com/can-you-host-my-game/prompts/node-ws-hosting-basics/) | Gets a Node.js server that uses the ws library ready: health page, clean stop, packaging with ncg pack, ncg.json. | Manifest checked |
| [Node.js with socket.io (WebSocket only)](https://netcraftgames.com/can-you-host-my-game/prompts/node-socketio/) | Makes a socket.io server work through the gateway: WebSocket-only transport and a fixed path in the manifest. | Draft |
| [Python WebSocket server (websockets or FastAPI)](https://netcraftgames.com/can-you-host-my-game/prompts/python-ws-hosting-basics/) | Gets a Python server ready: health page, clean stop, packaging with ncg pack, ncg.json. | Draft |
| [Unity: add a dedicated-server mode](https://netcraftgames.com/can-you-host-my-game/prompts/unity-dedicated/) | Makes your AI add a headless Linux server mode to a Unity project that uses Netcode for GameObjects or Mirror, and build it. | Manifest checked |
| [Unity: build the server I have for Linux](https://netcraftgames.com/can-you-host-my-game/prompts/unity-linux-build/) | For a Unity dedicated server that exists only for Windows or Mac: makes your AI build it for Linux x86-64. | Draft |
| [Unreal Engine: package a Linux dedicated server](https://netcraftgames.com/can-you-host-my-game/prompts/unreal-dedicated/) | Makes your AI package the Linux server target and add the health page and clean stop. | Draft |
| [Godot 4: run as a dedicated server](https://netcraftgames.com/can-you-host-my-game/prompts/godot-dedicated/) | Makes your AI add a headless server start path for ENet or WebSocket, export it for Linux and add the health page. | Draft |
| [Go, Rust, C#, C++ or Java server with its own protocol](https://netcraftgames.com/can-you-host-my-game/prompts/native-custom/) | Prepares a server with its own TCP or UDP protocol for the limited Custom native lane. | Draft |
| [Browser game with WebRTC: use NetCraftGames room signaling](https://netcraftgames.com/can-you-host-my-game/prompts/webrtc-signaling/) | Connects a browser game that already uses WebRTC to our room signaling. We do not relay the game traffic. | Draft |
| [Node.js with Express or Fastify and WebSocket](https://netcraftgames.com/can-you-host-my-game/prompts/node-hosting-basics-generic/) | Same as the ws prompt, with the Express and Fastify details. | Manifest checked |


The [prompts page](https://netcraftgames.com/can-you-host-my-game/prompts/) lists them all, including one for socket.io (WebSocket only, with a fixed path in the manifest).

### Test it with two players first


**Prove two players can play together**

```text
TASK: Prove that two real players can play together before anything is hosted. Do not change gameplay.
1. Add a script (an npm script, or the equivalent for this engine) that starts the server on your own computer and connects two clients, headless or scripted. Each client sends a move or an action, and the script checks that each client receives the other's state.
2. Run it and show me the real output. If it fails, tell me which part of multiplayer does not work yet. Do not paper over it.
3. Add the result to the project README in two lines.
```


### Plan multiplayer, with no code


**Plan multiplayer for my game (a plan, not code)**

```text
TASK: Do not write multiplayer code yet. Write MULTIPLAYER-PLAN.md for this game covering:
1. Which parts of the game state must be shared, who is authoritative (the server), how often the server updates, and what a client may send (inputs, not positions).
2. Which networking library fits this engine and language, and how a dedicated server can run without a window on Linux.
3. What changes in the client: a list of files and a realistic size estimate in days of work.
4. A test plan with two real clients.
Be honest that adding multiplayer to a single-player game is a large change. Show me the plan and wait.
```


### Move from Colyseus to plain WebSocket


**Move from Colyseus (or python-socketio) to plain WebSocket**

```text
TASK: This project uses Colyseus or python-socketio. The hosting service passes WebSocket connections only, to one fixed path. It cannot pass HTTP long polling or HTTP matchmaking, which Colyseus and the default python-socketio mode need before the WebSocket opens. (socket.io for JavaScript does not need this move: it has its own prompt.)
First write a short migration plan in MIGRATION.md: list every event, room and message the game uses, how rooms and reconnection will work on plain WebSocket (JSON messages with a "type" field), and which client files change. Show me the plan and WAIT for my approval before you edit any code.
After my approval: replace the realtime layer with the "ws" package on one HTTP server (JavaScript) or the "websockets" library (Python), keep the game rules unchanged, update the client to use new WebSocket(url), and add a test with two clients that proves two players see each other. Do not add features. Then ask me to run the hosting prompt for this stack.
```


## What happens to your answers

Nothing. The check runs in your browser with the same code the dashboard and the command line use. The page tells your browser, through its security policy, that it may not make any network request, so even a bug could not send your answers away. There are no cookies, no analytics and no stored answers. The page also works with JavaScript turned off: the questions, the decision table and every prompt are plain text you can select and copy.

## How to find out if your game qualifies


1. **Answer five questions.** Say what your game is built with, whether two people can play together over the internet, how players connect, whether the server runs without a window, and which server basics it already has. The page gives Yes, Almost or Not yet.
2. **Make the one change.** If the answer is Almost, copy the prompt to your AI. It changes only what the prompt lists. Test the result with two real players.
3. **Check it on your own computer.** When you have the `ncg` tool, `ncg check` reads your files locally and tells you what the service would say. It uploads nothing.
4. **Submit when we open.** NetCraftGames is not accepting customers yet. Join the waitlist, keep your `ncg.json`, and submit when the doors open.


## Frequently asked questions


### Do you see my code or my answers when I use this check?

No. The check runs in your browser and the page is not allowed to make network requests, so nothing is uploaded, stored or sent. We only see the files you submit later, and only when you submit them. Without JavaScript the page still works as plain text.

### Does a Yes mean you will host my game?

No. A Yes means your answers describe a game with the pieces we need. We have not seen your code and nothing was run. A real server start and a real player join are checked after you submit a build, and NetCraftGames has not hosted a customer game yet.

### My game is single-player. What can I do?

We cannot host it, because we do not add multiplayer. If you want to build it later, the planning prompt makes your AI write a design document first, with no code. Adding multiplayer to a single-player game is a large change, and we promise nothing about hosting the result.

### Why is my Node.js or Python game only "Almost"?

Our servers run Node.js 24 and Python 3.12, but they install nothing, so your packages have to travel inside your upload, built for Linux. The command `ncg pack . --node --install` (or `--python`) does that on your own computer, and the prompts for your stack add the health page, the clean stop and the manifest. If your WebSocket answers at a path such as /ws, one line in the manifest names it.

## Related pages

- [How NetCraftGames takes your game online](https://netcraftgames.com/how-it-works/): How NetCraftGames takes your multiplayer game from submission to a running server in 24 hours: submit, AI reads, connection config, deploy, players join.
- [Multiplayer hosting glossary](https://netcraftgames.com/glossary/): Plain-English definitions of dedicated server, headless, UDP, WebSocket, WSS, WebRTC, STUN, TURN, ENet, KCP, manifest, join probe, weighted hour and more.
- [The 24-hour promise, with the conditions stated plainly](https://netcraftgames.com/24-hour-promise/): What NetCraftGames means by "online and server ready in 24 hours": a processing target, when the clock starts and pauses, exclusions and open questions.
