Help us improve
Share bugs, ideas, or general feedback.
From nethercore
Core development workflow for Nethercore WASM games. Covers the nether CLI (build, run, pack), nether.toml manifest authoring, required WASM exports, and determinism rules for rollback netcode. Use when building, configuring, or structuring a Nethercore game project.
npx claudepluginhub nethercore-systems/nethercore-ai-plugins --plugin nethercoreHow this skill is triggered — by the user, by Claude, or both
Slash command
/nethercore:developmentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Nethercore games compile to WASM and run in the Nethercore player with rollback netcode. All consoles share the same WASM core, ensuring determinism across platforms.
Adds real-time or turn-based multiplayer to existing Phaser 3 or Three.js browser games using PartyKit on Cloudflare. Scaffolds room-based server, NetworkManager client, EventBus events, GameState fields, and extends render_game_to_text.
Generates Cairo Dojo system contracts for implementing game logic, modifying model state, handling player actions, and emitting events in Starknet games.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Share bugs, ideas, or general feedback.
Nethercore games compile to WASM and run in the Nethercore player with rollback netcode. All consoles share the same WASM core, ensuring determinism across platforms.
Every game exports three functions:
#[no_mangle] pub extern "C" fn init() { } // Setup, asset loading
#[no_mangle] pub extern "C" fn update() { } // Deterministic logic
#[no_mangle] pub extern "C" fn render() { } // Drawing only
| Command | Purpose |
|---|---|
nether init | Create nether.toml manifest |
nether compile | Compile WASM from source |
nether pack | Bundle WASM + assets into ROM |
nether build | compile + pack (main command) |
nether run | Build and launch in player |
[game]
id = "my-game"
title = "My Game"
author = "Your Name"
version = "1.0.0"
[build]
script = "cargo build --target wasm32-unknown-unknown --release"
wasm = "target/wasm32-unknown-unknown/release/my_game.wasm"
[[assets.textures]]
id = "player"
path = "assets/player.png"
The Nethercore player handles all networking automatically:
Your only responsibility: Make update() deterministic.
Never write: Networking code, rollback logic, state sync, or input transmission.
The update() function must be deterministic for rollback netcode. Given identical inputs, all clients must produce identical state.
random() functions - Never external randomnesstick_count() not system time - Frame-based logic only| Pattern | Problem | Correct Alternative |
|---|---|---|
rand::thread_rng() | External RNG | FFI random(), random_range() |
SystemTime::now() | System clock | FFI tick_count() |
HashMap iteration | Unordered | Arrays, BTreeMap |
| State changes in render() | Skipped during rollback | Move to update() |
nether run --sync-test --frames 1000
If this fails, you have non-deterministic code.
my-game/
├── nether.toml # Game manifest
├── src/
│ ├── lib.rs # Entry point (init/update/render)
│ └── zx.rs # FFI bindings (console-specific)
├── assets/
│ ├── textures/
│ ├── meshes/
│ └── audio/
└── Cargo.toml
Key principle: Keep entry files minimal (~50 lines). FFI bindings in separate module.