# Migrating from Hathora to Net Forge

> Hathora's game server hosting shut down on 2026-05-05. If your game is a browser game in TypeScript, this page shows what moves to Net Forge, what Net Forge does not replace, and the other options.

Net Forge, the open-source multiplayer browser game engine built for AI coding agents, is published on npm under `@netforge` with source at https://github.com/netnetdev/net-forge.

Source: https://forge.netnet.capital/docs/migrate/from-hathora  
Last updated: 2026-10-23. Checked against @netforge/engine 0.2.0.

Hathora closed its game server hosting platform on 2026-05-05, after announcing the closure on 2026-03-04 ([Gameye](https://gameye.com/gameye-vs-hathora/); [Supercraft](https://crux.supercraft.host/blog/game-backend-shutdowns-2026-who-died-where-studios-went/)). If your game runs in the browser and its server logic is TypeScript, Net Forge can take over the room: start from the template closest to your game, move your rules into `src/game.ts`, and run the same simulation on the room host and in the page.

```sh
npm create netforge@latest my-game -- --template arena --yes
cd my-game
npm run play -- --players 2
```

Both sources above are published by companies that sell game server hosting, so read their framing with that in mind. On 2026-10-23, `hathora.com` and `hathora.dev` answered with a permanent redirect (HTTP 301) to `gamefabric.com`.

## Who this page is for

| Your game | Good next step |
|---|---|
| Browser game, TypeScript server logic, one of Net Forge's ten genres | This page |
| Browser game, you want to keep your own server code | A room framework such as Colyseus ([Net Forge and Colyseus](https://forge.netnet.capital/docs/compare/colyseus.md)) |
| Native client (Unity, Unreal, Godot) on dedicated servers | A dedicated server host; Gameye describes GameFabric by Nitrado as Hathora's recommended migration path ([Gameye](https://gameye.com/gameye-vs-hathora/)) |

## What maps to what

| On Hathora you had | In Net Forge |
|---|---|
| A server process per room or match | A room on the room host, created when the first player joins |
| Your authoritative game loop | `@netforge/engine-sim`'s fixed-tick `step` (30 Hz by default, 60 Hz in the arena, racer and platformer templates), driven by the template |
| State you serialized and sent | Quantized delta snapshots, 20 a second in local play, encoded for you |
| A room id or code shared with friends | A room link (`?room=<id>`) on the hosted service; locally, every tab joins the open room |
| Regions and fleet scaling | The hosted Net Forge service; the public repository's host runs on one machine |

## 1. Pick the template nearest your game

Start from a finished game rather than an empty room. The ten ids are `survivor`, `arena`, `tower-defense`, `dungeon`, `idle`, `platformer`, `cards`, `collector`, `racer` and `party`. See [Templates](https://forge.netnet.capital/docs/templates.md).

```sh
npm create netforge@latest my-game -- --template survivor --yes
```

## 2. Move your rules into src/game.ts

Port one entity or rule at a time as declarations. An enemy your server spawned becomes a prefab, and a timed event becomes a system:

```ts title=src/game.ts
import { prefab } from "@netforge/engine";

prefab("raider", { model: "style.lowpoly.bat", health: 30, speed: 4, radius: 0.4, damage: 6, ai: "chase" });
```

See [The typed game API](https://forge.netnet.capital/docs/concepts/game-api.md) for what the declarations cover.

## 3. Test it headless, then with people

```sh
npm test
npm run play -- --host 0.0.0.0
```

`npm test` plays the game with bots and no browser. The second line lets phones and laptops on your network join through your computer.

## 4. Decide where it runs

The public repository's room host (in `@netforge/kit-play`) is built for your own computer and network: one process, play money, no lag-compensation history. For a game on the internet, publish it through the hosted Net Forge service. See [Deploy and host your game](https://forge.netnet.capital/docs/guides/deploy-and-host.md).

## What Net Forge does not replace

- **Arbitrary server code.** Net Forge rooms run Net Forge games; `src/game.ts` may import only `@netforge/engine`. If your server does work outside the game's rules, keep it in a service of your own.
- **Native clients.** Net Forge is browser only.
- **Self-hosted production fleets from the public repository.** The local host is not a production server.

## FAQ

### When did Hathora shut down?

Hathora's game server hosting shut down on 2026-05-05, after an announcement on 2026-03-04, according to [Gameye](https://gameye.com/gameye-vs-hathora/) and [Supercraft](https://crux.supercraft.host/blog/game-backend-shutdowns-2026-who-died-where-studios-went/), both of which sell competing hosting.

### What is a Hathora alternative for browser games?

For a browser game in one of Net Forge's ten genres, a Net Forge template gives you the server and the client together. To keep your own TypeScript server code, Colyseus is a room framework with managed hosting in Colyseus Cloud ([Colyseus docs](https://docs.colyseus.io/llms.txt)).

### Can I run Net Forge rooms on my own servers?

The public repository's host runs on one machine and is meant for local and LAN play. The production room server is the hosted Net Forge service.

### Do I have to rewrite my client?

Yes, if it is not a three.js game. Net Forge templates bring their own browser client; your work is mostly moving rules into `src/game.ts`.
