MESH ONLINE│CODENAME: Breaking the Law
NEWPLUG AND PLAY FOR THREE.JS

your game.no server.

Plug and play support for Three.js: turn any Three.js game into a multiplayer game, a co-op game, or an MMO.

Players connect straight to each other whenever the network allows. There is no game server running the match. Free and open source.

preview render
§01 / speed

natively fast. forget the network.

Most online games send every move to a server somewhere and wait for the answer. With NET, you see your own moves right away, and players link directly to each other whenever the network allows. No game server runs the match.

0ms
input delay

Your own moves are predicted on the same frame you press the key. The host confirms them in the background.

~5ms
host tick, 8,000 entities

A benchmark, not a game: one machine, 16 players, 5% of the world moving each tick. Only the entities that changed are checked, and each player is sent only what is near them.

~240kB
total download

The whole networking engine, WebAssembly and JavaScript, gzipped. Smaller than most of your textures.

§02 / play it
demo // co-op + pvp
England, 1461

Rose& Blade

A physics sword fight from the Wars of the Roses. Every knight is a ragdoll, and you swing your sword with the mouse or a controller.

Play alone, team up against the waves, or fight each other eight a side. If the host drops, the next player takes over on the spot and the fight plays on.

solo
The tournament
Seven bouts, one life: the melee, named knights, then a champion. Or endless waves.
co-op · 2–4 players
Fight together
Hold the lists with friends. Waves grow with every player.
pvp · up to 8 a side
York vs Lancaster
16 players, one life a round. First side to three rounds takes the match.

Plays on a computer or laptop, with a mouse and keyboard or a controller (not on phones). For multiplayer, open it in two browsers or send it to a friend.

▸ the multiplayer // net
120/s
updates between players, 60 above 8
p2p
every page linked to every other, direct when possible
0
servers you run (public anchor)
host
drops? the next player takes over, no one notices
§03 / take it apart

a shooter to learn from.

Net Shooter is a small, open-source three.js FPS with NET built in: a server browser, hosting, and joining as a client. Play it, fork it, ship it (MIT), or read how each piece maps to NET. All of the networking is in one file, js/net.js.

hosting co-op, net debug panel openhostNetcode
server browserlistLobbies
listLobbies

Server browser

Open games with server, region, map and player count. Search, filter, sort, and a lock on passworded games.

createLobby

Host a game

Server name, max players, map, region, password and friendly fire. The password is checked on the host's page.

hostNetcode · joinNetcode

Host and clients

The host runs the match at 30 ticks a second. Each player predicts their own movement with the same rules, so it feels instant.

rewind

Fair shots

The host decides what a shot hit, using where the targets were when the shooter fired.

▸ run it yourself
git clone https://github.com/ai-2070/net-fps
cd net-fps
npm install
npm start
Co-op for 2–4 players, over NET's public anchor, so there is no server to run. The first npm start needs mkcert for local HTTPS; the README has the steps.
§04 / game modes

couch co-op to open world.

One package covers all three. Pick a mode and bring your own gameplay.

012–4 players

Co-op

One friend hosts in their browser and plays too. The others join. The host plays through the same view as everyone else.

hostStorejoinStorehostPlayer
how it works →
02128 on one host

Multiplayer

Create a lobby, share a room code, and play. Lobbies are found over the network itself, so there is no matchmaking server. Movement stays smooth even when packets drop. One host held 128 players in testing; past that, split the match across hosts.

createLobbyjoinLobbyjoinNetcode
how it works →
03many hosts, one map

MMO worlds

Split a big map into regions, each run by a different host. Players only receive what is near them, and characters cross region borders without popping or duplicating.

joinWorldcellsAroundregionHandoffs
how it works →
§05 / many hosts

one match. many hosts.

One player doesn't have to carry the whole match. NET can split it across several hosts in the same game, each running its own part, so no single page does all the work.

SNAPSHOTS50 MHOST Ayou + 3 enemiesHOST Banother player + 3 enemies
You fight three enemies. Another player fights three more, 50 m away. Each of you hosts your own fight and runs its AI. Your page doesn't run the far fight: it just draws what the other host sends.
1

Each host runs its own part

A host owns some of the players and NPCs, and runs their AI. Every player joins every host, and NET merges them into one view of one world.

2

Hits across hosts are fair

A hit on someone run by another host is checked against that host's record of where the attacker really was.

3

Players move between hosts

When a player is handed to another host, an input the old host already applied is never applied twice.

4

A host drops, the match goes on

The remaining hosts take over the lost host's players from where they last saw them.

joinShardshostNetcodesampleAt
how sharding works →
128
players on one host, measured
~30×
less traffic for NPCs on known paths
~7×
smaller snapshots with a codec
§06 / add it to your game

five steps. then you're online.

Connect, open a room, share the game state, draw it, move. A few lines each, and this is the real API.

▸ net.ts
import { connect, rememberedIdentity, requestCredential }
  from '@net-mesh/browser';

const { credentialB64, bootstrapUrl } = await requestCredential({
  anchorUrl: 'https://anchor.ai2070.net', // NET's public anchor
  game: 'my-game',
});

const node = await connect({
  ...rememberedIdentity(),
  credentialB64,
  bootstrapUrl,
});
// Each player gets a free, anonymous pass. Returning players are remembered.
§07 / any engine

a protocol, not a plugin.

NET works with any game engine, because it is a network protocol. How much comes ready-made depends on your engine. Three.js gets the full kit today.

plug and play

Three.js

including AI-generated games

Everything on this page, ready to use. Lobbies, shared game state, smooth movement, and a scene binding that adds, moves and removes your meshes for you.

  • ✓lobbies
  • ✓game state
  • ✓netcode
  • ✓scene binding
read the docs →
almost plug and play

Other web engines

e.g. Babylon.js, PlayCanvas, Phaser, plain canvas

The same package works in any browser game. You get the lobbies, game state and netcode as-is, and write the few lines that draw entities in your engine.

  • ✓lobbies
  • ✓game state
  • ✓netcode
read the docs →
speaks the protocol

Any other engine

e.g. Unity, Unreal, Godot, custom engines

NET is an open protocol, not a web library. Native games connect through the Rust, Go, Python or C SDKs and get encrypted connections, channels, streams and RPC. The game layer on top is yours to build for now.

  • ✓encrypted mesh
  • ✓channels
  • ✓streams
  • ✓rpc
read the docs →
§08 / made for ai-built games

prompt the game. prompt the multiplayer.

1

Hard to get wrong

Typos become compile errors instead of silent bugs, and every error has a clear name. AI-written code tends to work on the first try.

2

Comes with an agent skill

The repo ships a net-browser skill that teaches Claude Code and other coding agents how to use the package properly.

3

Test without a network

createLocalMesh() runs several players in one page. Build the whole game offline, then switch to a real connection.

▸ paste this into your ai
> Make this Three.js game multiplayer with NET (@net-mesh/browser).
Follow the docs: https://ai2070.net/docs/sdk/browser
§09 / built in

the hard parts, already done.

Cheat-resistant

Players send what they want to do. The host decides what actually happens.

No wallhacks

Hidden data is never sent to players who shouldn't see it, so there is nothing to dig out. (The host's own page holds everything; for real stakes, run a dedicated host.)

No impersonation

Every player's identity is proven by the encrypted connection. Nobody can pretend to be someone else.

Fair hit detection

Shots are checked against what the shooter actually saw, capped at 200 ms so faking lag doesn't help.

Smooth under packet loss

Movement uses a fast lane that skips late packets instead of waiting for them.

Encrypted end to end

Every NET packet travels inside an encrypted Noise session, even when the anchor has to relay it.

§10 / open source

free to use. free to ship.

NET is an open protocol, licensed MIT or Apache-2.0. Use it in a game jam, a weekend project or a commercial release. No sign-up, no keys, no per-player pricing.

player two has joined.
▶ Start building