Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1555 commits
Select commit Hold shift + click to select a range
4676d86
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
52bc03a
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
5c51b35
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
745b596
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
6335998
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
688f0a0
Update guides/deployment.mdx
mintlify[bot] Mar 10, 2026
6da7126
Update AGENTS.md
mintlify[bot] Mar 10, 2026
3c0bcb6
Update README.md
mintlify[bot] Mar 10, 2026
261fbda
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
10f604f
Update AGENTS.md
mintlify[bot] Mar 10, 2026
da88419
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
49f0f2f
Update README.md
mintlify[bot] Mar 10, 2026
b113a41
Update README.md
mintlify[bot] Mar 10, 2026
3afb36f
Update AGENTS.md
mintlify[bot] Mar 10, 2026
ec7a0a9
Update AGENTS.md
mintlify[bot] Mar 10, 2026
6b9a178
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
fb340c0
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
634faca
Update .env.example
mintlify[bot] Mar 10, 2026
c11545a
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
18c83e5
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
4b2a9ce
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
6f21c6f
Update README.md
mintlify[bot] Mar 10, 2026
795a8a0
Update README.md
mintlify[bot] Mar 10, 2026
45ec20a
Update README.md
mintlify[bot] Mar 10, 2026
3d9aa38
Update README.md
mintlify[bot] Mar 10, 2026
2420e10
Update .env.example
mintlify[bot] Mar 10, 2026
f5075d4
Update packages/server/.env.example
mintlify[bot] Mar 10, 2026
536baea
Update packages/server/.env.example
mintlify[bot] Mar 10, 2026
45e923a
Update packages/server/.env.example
mintlify[bot] Mar 10, 2026
ea1ee09
Update AGENTS.md
mintlify[bot] Mar 10, 2026
d06bd50
Update AGENTS.md
mintlify[bot] Mar 10, 2026
e9f2c88
Update AGENTS.md
mintlify[bot] Mar 10, 2026
c795385
Update AGENTS.md
mintlify[bot] Mar 10, 2026
7597d39
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
b408a55
Update README.md
mintlify[bot] Mar 10, 2026
8f88c23
Update CLAUDE.md
mintlify[bot] Mar 10, 2026
05b029a
Update README.md
mintlify[bot] Mar 10, 2026
04cf8f5
Update README.md
mintlify[bot] Mar 10, 2026
c72489a
Update README.md
mintlify[bot] Mar 10, 2026
e62e946
Update AGENTS.md
mintlify[bot] Mar 10, 2026
a484e4b
Update README.md
mintlify[bot] Mar 10, 2026
0c5e27c
Update AGENTS.md
mintlify[bot] Mar 10, 2026
66b0bc0
Update AGENTS.md
mintlify[bot] Mar 10, 2026
6ca9242
Update AGENTS.md
mintlify[bot] Mar 10, 2026
563a7a8
Update AGENTS.md
mintlify[bot] Mar 10, 2026
915dd6a
Update docs/migration-threejs-0.183.md
mintlify[bot] Mar 10, 2026
b4a5aaa
Update docs/duel-stack.md
mintlify[bot] Mar 10, 2026
07df875
Update docs/duel-stack.md
mintlify[bot] Mar 10, 2026
eec7180
Update docs/duel-stack.md
mintlify[bot] Mar 10, 2026
fadfcfe
Update changelog.mdx
mintlify[bot] Mar 10, 2026
4bdd29f
Update AGENTS.md
mintlify[bot] Mar 10, 2026
9516cc7
Update AGENTS.md
mintlify[bot] Mar 11, 2026
d1db327
Update AGENTS.md
mintlify[bot] Mar 11, 2026
440ed2b
Update AGENTS.md
mintlify[bot] Mar 11, 2026
9efbd83
Update AGENTS.md
mintlify[bot] Mar 11, 2026
11e7292
Update AGENTS.md
mintlify[bot] Mar 11, 2026
9c605ed
Update docs/MIGRATION_MARCH_2026.md
mintlify[bot] Mar 11, 2026
89d5076
Update docs/DOCUMENTATION_UPDATE_SUMMARY.md
mintlify[bot] Mar 11, 2026
01a642b
Update CLAUDE.md
mintlify[bot] Mar 11, 2026
517a9b4
Update AGENTS.md
mintlify[bot] Mar 11, 2026
ca9a847
Update AGENTS.md
mintlify[bot] Mar 11, 2026
6f170b8
Update AGENTS.md
mintlify[bot] Mar 11, 2026
ddbb54c
Update AGENTS.md
mintlify[bot] Mar 11, 2026
f743e72
Update CLAUDE.md
mintlify[bot] Mar 11, 2026
066a163
Update AGENTS.md
mintlify[bot] Mar 12, 2026
9ce3770
Update AGENTS.md
mintlify[bot] Mar 12, 2026
b00265b
Update AGENTS.md
mintlify[bot] Mar 12, 2026
1277dd5
Update CLAUDE.md
mintlify[bot] Mar 12, 2026
c88b17b
Update README.md
mintlify[bot] Mar 12, 2026
4764241
Update README.md
mintlify[bot] Mar 12, 2026
b2482e2
Update README.md
mintlify[bot] Mar 12, 2026
c0be300
Update guides/deployment.mdx
mintlify[bot] Mar 12, 2026
a51f5d5
Update guides/deployment.mdx
mintlify[bot] Mar 12, 2026
213545c
Update README.md
mintlify[bot] Mar 12, 2026
1b24af5
Update README.md
mintlify[bot] Mar 12, 2026
84c598e
Update README.md
mintlify[bot] Mar 12, 2026
a2a53b7
Update guides/deployment.mdx
mintlify[bot] Mar 12, 2026
b9a2987
Update guides/deployment.mdx
mintlify[bot] Mar 12, 2026
a40a012
Update devops/configuration.mdx
mintlify[bot] Mar 12, 2026
735d1c3
Update changelog.mdx
mintlify[bot] Mar 12, 2026
4e155f1
Update wiki/engine/terrain-lod.mdx
mintlify[bot] Mar 12, 2026
15aaa1d
Update wiki/engine/biomes.mdx
mintlify[bot] Mar 12, 2026
e93793b
Update wiki/engine/tree-instancing.mdx
mintlify[bot] Mar 12, 2026
b6ac417
Update guides/admin-dashboard.mdx
mintlify[bot] Mar 12, 2026
f8ffb5b
Update devops/configuration.mdx
mintlify[bot] Mar 12, 2026
0bb4341
Update api-reference/terrain-lod.mdx
mintlify[bot] Mar 12, 2026
e5aaa47
Update api-reference/admin-api.mdx
mintlify[bot] Mar 12, 2026
dfaf05c
Update api-reference/biomes.mdx
mintlify[bot] Mar 12, 2026
6ca289d
Update api-reference/tree-instancing.mdx
mintlify[bot] Mar 12, 2026
88b1e50
Update AGENTS.md
mintlify[bot] Mar 12, 2026
6140385
Update AGENTS.md
mintlify[bot] Mar 12, 2026
b027453
Update README.md
mintlify[bot] Mar 12, 2026
b594ae2
Update CLAUDE.md
mintlify[bot] Mar 12, 2026
d82f7d7
Update AGENTS.md
mintlify[bot] Mar 12, 2026
5f40202
Update changelog.mdx
mintlify[bot] Mar 12, 2026
c98e7aa
Update devops/configuration.mdx
mintlify[bot] Mar 12, 2026
730bca3
Update AGENTS.md
mintlify[bot] Mar 13, 2026
0306f6f
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
79b6162
Update .env.example
mintlify[bot] Mar 13, 2026
b5dda19
Update AGENTS.md
mintlify[bot] Mar 13, 2026
a81dcba
Update AGENTS.md
mintlify[bot] Mar 13, 2026
6d5c5bc
Update README.md
mintlify[bot] Mar 13, 2026
c29c5eb
Update README.md
mintlify[bot] Mar 13, 2026
9194251
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
b62c9f3
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
7819561
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
b84a7d7
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
37413ef
Update AGENTS.md
mintlify[bot] Mar 13, 2026
2be228b
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
af88ac2
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
d658c07
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
f81304e
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
cca6ca9
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
4121bd6
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
6a7120a
Update AGENTS.md
mintlify[bot] Mar 13, 2026
145e2a1
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
6f5e7fb
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
b3621b0
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
9c1b328
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
6b54202
Update README.md
mintlify[bot] Mar 13, 2026
e2d267c
Update README.md
mintlify[bot] Mar 13, 2026
1cec8b3
Update README.md
mintlify[bot] Mar 13, 2026
88a981a
Update README.md
mintlify[bot] Mar 13, 2026
8061c40
Update README.md
mintlify[bot] Mar 13, 2026
640b3a5
Update packages/server/.env.example
mintlify[bot] Mar 13, 2026
ad330e3
Update packages/server/.env.example
mintlify[bot] Mar 13, 2026
ded35d7
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
e0375ca
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
42a396d
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
88c98e8
Update AGENTS.md
mintlify[bot] Mar 13, 2026
7d7f806
Update AGENTS.md
mintlify[bot] Mar 13, 2026
2357e6f
Update AGENTS.md
mintlify[bot] Mar 13, 2026
c056da0
Update README.md
mintlify[bot] Mar 13, 2026
d4178c9
Update README.md
mintlify[bot] Mar 13, 2026
0fc626a
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
58a865d
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
39b6d80
Update AGENTS.md
mintlify[bot] Mar 13, 2026
49524e4
Update AGENTS.md
mintlify[bot] Mar 13, 2026
8c8989c
Update README.md
mintlify[bot] Mar 13, 2026
c0e683b
Update README.md
mintlify[bot] Mar 13, 2026
2f2f410
Update README.md
mintlify[bot] Mar 13, 2026
a358405
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
f210c46
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
2736ad7
Update packages/server/.env.example
mintlify[bot] Mar 13, 2026
b893afb
Update .env.example
mintlify[bot] Mar 13, 2026
2b7811d
Update guides/deployment.mdx
mintlify[bot] Mar 13, 2026
636d8bd
Update guides/deployment.mdx
mintlify[bot] Mar 13, 2026
c9f172c
Update README.md
mintlify[bot] Mar 13, 2026
055686d
Update README.md
mintlify[bot] Mar 13, 2026
f833dcb
Update README.md
mintlify[bot] Mar 13, 2026
1ba3e77
Update README.md
mintlify[bot] Mar 13, 2026
cf65dd7
Update README.md
mintlify[bot] Mar 13, 2026
f95f06a
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
edbaf06
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
32a8397
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
128d379
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
9872e33
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
d8b74f9
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
fbf2977
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
4659ef6
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
60d8044
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
ce6aa83
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
d706e5c
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
5a41a5f
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
3abf110
Update AGENTS.md
mintlify[bot] Mar 13, 2026
41ddf91
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
224b13a
Update AGENTS.md
mintlify[bot] Mar 13, 2026
eae16e4
Update packages/server/README.md
mintlify[bot] Mar 13, 2026
7f20591
Update packages/plugin-hyperscape/README.md
mintlify[bot] Mar 13, 2026
0f6fd90
Update packages/plugin-hyperscape/README.md
mintlify[bot] Mar 13, 2026
36d0b84
Update AGENTS.md
mintlify[bot] Mar 13, 2026
af0cd00
Update AGENTS.md
mintlify[bot] Mar 13, 2026
07d97c4
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
6755494
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
a71c5fb
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
7cd3e09
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
31889bb
Update README.md
mintlify[bot] Mar 13, 2026
06d38b8
Update README.md
mintlify[bot] Mar 13, 2026
542fa85
Update README.md
mintlify[bot] Mar 13, 2026
ef4406a
Update README.md
mintlify[bot] Mar 13, 2026
f1e299a
Update README.md
mintlify[bot] Mar 13, 2026
c582da7
Update README.md
mintlify[bot] Mar 13, 2026
f377399
Update README.md
mintlify[bot] Mar 13, 2026
b0e8404
Update .env.example
mintlify[bot] Mar 13, 2026
ec453eb
Update .env.example
mintlify[bot] Mar 13, 2026
ea3466c
Update guides/deployment.mdx
mintlify[bot] Mar 13, 2026
1f25f6a
Update guides/deployment.mdx
mintlify[bot] Mar 13, 2026
fed7d24
Update AGENTS.md
mintlify[bot] Mar 13, 2026
93f89e3
Update CLAUDE.md
mintlify[bot] Mar 13, 2026
dd80bce
Update README.md
mintlify[bot] Mar 13, 2026
9cff960
Update AGENTS.md
mintlify[bot] Mar 17, 2026
9dd8bc5
Update README.md
mintlify[bot] Mar 17, 2026
a1f2862
Update CLAUDE.md
mintlify[bot] Mar 17, 2026
056428e
Update AGENTS.md
mintlify[bot] Mar 17, 2026
4ef7374
Update CLAUDE.md
mintlify[bot] Mar 17, 2026
b4587f3
Update README.md
mintlify[bot] Mar 17, 2026
62f64de
Update AGENTS.md
mintlify[bot] Mar 18, 2026
2eef24a
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
cc63843
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
4326c2e
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
1a52f3b
Update AGENTS.md
mintlify[bot] Mar 19, 2026
a6072a3
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
42ef809
Update README.md
mintlify[bot] Mar 19, 2026
398b193
Update README.md
mintlify[bot] Mar 19, 2026
fad1945
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
9aeab03
Update AGENTS.md
mintlify[bot] Mar 19, 2026
e224130
Update README.md
mintlify[bot] Mar 19, 2026
7f30362
Update README.md
mintlify[bot] Mar 19, 2026
fb76636
Update README.md
mintlify[bot] Mar 19, 2026
65cde1d
Update AGENTS.md
mintlify[bot] Mar 19, 2026
66475b2
Update README.md
mintlify[bot] Mar 19, 2026
44b9173
Update AGENTS.md
mintlify[bot] Mar 19, 2026
0b8dbcf
Update README.md
mintlify[bot] Mar 19, 2026
79cf340
Update CHANGELOG.md
mintlify[bot] Mar 19, 2026
cea5381
Update README.md
mintlify[bot] Mar 19, 2026
cc4309d
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
92c88f9
Update README.md
mintlify[bot] Mar 19, 2026
51dfc8c
Update README.md
mintlify[bot] Mar 19, 2026
3d72257
Update README.md
mintlify[bot] Mar 19, 2026
d6c6413
Update MIGRATION.md
mintlify[bot] Mar 19, 2026
9fce3b3
Update quickstart.mdx
mintlify[bot] Mar 19, 2026
0922feb
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
6365fc7
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
9750fd9
Update docs/migration-march-2026.md
mintlify[bot] Mar 19, 2026
f9481d9
Update AGENTS.md
mintlify[bot] Mar 19, 2026
eba9cf9
Update README.md
mintlify[bot] Mar 19, 2026
f3e9ee7
Update changelog.mdx
mintlify[bot] Mar 19, 2026
aa35a94
Update AGENTS.md
mintlify[bot] Mar 19, 2026
eb19a89
Update README.md
mintlify[bot] Mar 19, 2026
608e529
Update AGENTS.md
mintlify[bot] Mar 19, 2026
d89cc1e
Update CLAUDE.md
mintlify[bot] Mar 19, 2026
9636de5
Update devops/docker.mdx
mintlify[bot] Mar 19, 2026
68adba6
Update AGENTS.md
mintlify[bot] Mar 19, 2026
459a1a5
Update CLAUDE.md
mintlify[bot] Mar 20, 2026
c08c2df
Update CLAUDE.md
mintlify[bot] Mar 20, 2026
c7c725e
Update CLAUDE.md
mintlify[bot] Mar 20, 2026
a526f1f
Update README.md
mintlify[bot] Mar 20, 2026
3f86148
Update README.md
mintlify[bot] Mar 20, 2026
d0e3925
Update README.md
mintlify[bot] Mar 20, 2026
3c0082b
Update README.md
mintlify[bot] Mar 20, 2026
4f1c058
Update README.md
mintlify[bot] Mar 20, 2026
9e03dd6
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
62a593d
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
c83ebea
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
420a879
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
90f2bae
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
e8ef18d
Update packages/server/README.md
mintlify[bot] Mar 20, 2026
0548a2a
Update docs/performance-march-2026.md
mintlify[bot] Mar 20, 2026
2054540
Update AGENTS.md
mintlify[bot] Mar 20, 2026
75d4b6e
Update AGENTS.md
mintlify[bot] Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
555 changes: 555 additions & 0 deletions .env.example

Large diffs are not rendered by default.

319 changes: 319 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
# AGENTS.md

Instructions for AI coding assistants (GitHub Copilot, Cursor, etc.) working with this codebase.

## CRITICAL: WebGPU Required (NO WebGL)

**Hyperscape requires WebGPU. WebGL WILL NOT WORK.**

This is a hard requirement. DO NOT:
- Add WebGL fallback code
- Use `--disable-webgpu` flags
- Use `forceWebGL` parameters
- Create headless Chrome configurations without GPU/WebGPU support
- Suggest WebGL as an alternative

### Why WebGPU-Only?
- All materials use TSL (Three Shading Language) which ONLY works with WebGPU
- Post-processing effects use TSL-based node materials
- There is NO WebGL fallback path - the game simply won't render

### Browser Requirements
- Chrome 113+, Edge 113+, Safari 18+ (macOS 15+)
- WebGPU must be available and working
- Check: [webgpureport.org](https://webgpureport.org)
- Note: Safari 17 support was removed - Safari 18+ (macOS 15+) is now required

### Server/Streaming (Vast.ai)
- **NVIDIA GPU with Display Driver REQUIRED**: Must have `gpu_display_active=true` on Vast.ai
- **Display Driver vs Compute**: WebGPU requires GPU display driver support, not just compute access
- Must run non-headless with Xorg or Xvfb (WebGPU requires window context)
- **Chrome Beta Channel**: Use `google-chrome-beta` (Chrome Beta) for WebGPU streaming on Linux NVIDIA (best stability and WebGPU support)
- **ANGLE Backend**: Use Vulkan ANGLE backend (`--use-angle=vulkan`) on Linux NVIDIA for WebGPU stability
- **Xvfb Virtual Display**: `scripts/deploy-vast.sh` starts Xvfb before PM2 to ensure DISPLAY is available
- **PM2 Environment**: `ecosystem.config.cjs` explicitly forwards `DISPLAY=:99` and `DATABASE_URL` through PM2
- **Capture Mode**: Default to `STREAM_CAPTURE_MODE=cdp` (Chrome DevTools Protocol) for reliable frame capture
- **FFmpeg**: Prefer system ffmpeg over ffmpeg-static to avoid segfaults (resolution order: `/usr/bin/ffmpeg` → `/usr/local/bin/ffmpeg` → PATH → ffmpeg-static)
- **Playwright**: Block `--enable-unsafe-swiftshader` injection to prevent CPU software rendering
- **Health Check Timeouts**: All curl commands use `--max-time 10` to prevent indefinite hangs
- If WebGPU cannot initialize, deployment MUST FAIL

## Project Overview

Hyperscape is a RuneScape-style MMORPG built on Three.js WebGPURenderer with TSL shaders.

## CRITICAL: Secrets and Private Keys

**Never put private keys, seed phrases, API keys, tokens, RPC secrets, or wallet secrets into any file that could be committed.**

- ALWAYS use local untracked `.env` files for real secrets
- NEVER hardcode secrets in source files, tests, docs, JSON fixtures, scripts, config files, or workflow YAML
- NEVER put real secrets in `.env.example`; placeholders only
- If a secret is needed in production or CI, use the platform secret store, not a tracked file
- If a task requires a new secret, document the variable name and load it from `.env`, `.env.local`, or deployment secrets

## Key Rules

1. **No `any` types** - ESLint will reject them
2. **WebGPU only** - No WebGL code or fallbacks
3. **No mocks in tests** - Use real Playwright browser sessions
4. **Bun package manager** - Use `bun install`, not npm
5. **Strong typing** - Prefer classes over interfaces
6. **Secrets stay out of git** - Real keys must only come from local `.env` files or secret managers

## Tech Stack

- **Runtime**:
- **Client/Build**: Bun v1.3.10+ (upgraded from 1.1.38 for Vite 6+ compatibility)
- **Server**: Node.js 22+ (migrated from Bun for V8 incremental GC - March 2026)
- **Rendering**: WebGPU ONLY (Three.js WebGPURenderer + TSL)
- **Engine**: Three.js 0.183.2, PhysX (WASM)
- **UI**: React 19.2.0
- **Server**: Fastify (HTTP), uWebSockets.js (game WebSocket), LiveKit (voice)
- **Database**: PostgreSQL (production, connection pool: 20), Docker (local), sqlite3 6.0.1 (dev only)
- **Testing**: Vitest 4.1.0+, Jest 30.3.0, Playwright (WebGPU-enabled browsers only)
- **Build**: Vite 8.0.0, @vitejs/plugin-react 6.0.1, Turbo, esbuild
- **AI**: ElizaOS `alpha` tag (aligned with latest alpha releases)
- **Streaming**: FFmpeg (system preferred over ffmpeg-static), Playwright Chromium, RTMP
- **Mobile**: Capacitor 8.2.0 (Android, iOS)
- **Smart Contracts**: Hardhat 3.1.11+, @nomicfoundation/hardhat-ethers 4.0.6 (ethers.js v6)

## Common Commands

```bash
bun install # Install dependencies
bun run build # Build all packages
bun run dev # Development mode
bun run duel # Full duel stack (game + agents + streaming)
npm test # Run tests
```

## File Structure

```
packages/
├── shared/ # Core engine (ECS, Three.js, PhysX, networking, React UI)
├── server/ # Game server (Fastify, WebSockets, PostgreSQL)
├── client/ # Web client (Vite + React)
├── plugin-hyperscape/ # ElizaOS AI agent plugin
├── physx-js-webidl/ # PhysX WASM bindings
├── procgen/ # Procedural generation (terrain, biomes, vegetation)
├── asset-forge/ # AI asset generation + VFX catalog
├── duel-oracle-evm/ # EVM duel outcome oracle contracts
├── duel-oracle-solana/ # Solana duel outcome oracle program
└── contracts/ # MUD onchain game state (experimental)
```

**Note**: The betting stack (`gold-betting-demo`, `evm-contracts`, `sim-engine`, `market-maker-bot`) has been split into a separate repository: [HyperscapeAI/hyperbet](https://github.com/HyperscapeAI/hyperbet)

## Recent Changes (March 2026)

### Performance & Scalability Overhaul (March 19-20, 2026)

**PR #1064**: Major architectural changes to improve server tick reliability and support 50+ concurrent players with 25+ AI agents.

**Key Changes**:
1. **Server Runtime Migration**: Bun → Node.js 22+ (V8 incremental GC eliminates 500-1200ms stop-the-world pauses)
2. **uWebSockets.js Integration**: Native pub/sub broadcasting on port 5556 (eliminates O(n) socket iteration)
3. **Agent AI Worker Thread**: Decision logic runs off main thread (eliminates 200-600ms blocking)
4. **BFS Pathfinding Optimization**: Global iteration budget, zero-allocation scratch tiles, per-tick walkability cache
5. **Terrain System Optimization**: Low-res collision (16×16), time-budgeted processing, pre-baked walkability flags
6. **Tick System Reliability**: Drift correction, health monitoring, per-handler timing

**Impact**:
- Tick blocking: 900-2400ms → 110-200ms (81-92% reduction)
- Missed ticks: 3-5/min → 0 under normal load
- Event loop blocking: 62.5% → <3%
- Scalability: 20 players + 10 agents → 50+ players + 25+ agents

**Breaking Changes**:
- Server now requires Node.js 22+ (Bun no longer supported for server runtime)
- WebSocket port changed from 5555 → 5556 (uWS, configurable with `UWS_PORT`)
- Client `PUBLIC_WS_URL` must be updated to `ws://localhost:5556/ws`

**Configuration**:
```bash
# Server runtime (REQUIRED)
node >= 22.0.0

# WebSocket transport
UWS_ENABLED=true # Enable uWS (default: true)
UWS_PORT=5556 # uWS port (default: 5556)
PUBLIC_WS_URL=ws://localhost:5556/ws

# Agent AI worker thread
EMBEDDED_BEHAVIOR_TICK_INTERVAL=8000 # Agent tick interval (ms)
AGENT_STAGGER_OFFSET_MS=800 # Stagger offset (ms)
MAX_AGENTS_PER_POLL=5 # Max agents per poll cycle

# BFS pathfinding
MAX_BFS_ITERATIONS_PER_TICK=12000 # Global budget
DEFAULT_MAX_ITERATIONS=4000 # Per-call limit

# Terrain system
SERVER_COLLISION_RESOLUTION=16 # Collision mesh resolution
COLLISION_BUDGET_MS=8 # Collision queue budget (ms)
WALKABILITY_BUDGET_MS=4 # Walkability baking budget (ms)
```

**Files Changed**: 54 files, 6,502 additions, 1,164 deletions

**Documentation**: See `docs/performance-march-2026.md` for complete details.

## Recent Changes (March 2026)

### VRM Material Isolation Fix (March 17, 2026)

**Change** (PR #1061, Commit 364d0a5): Isolated VRM clone materials to prevent highlight bleed across mob instances.

**Problem**: `SkeletonUtils.clone()` shares material instances across all VRM clones, causing hover highlight on one mob to affect all mobs of the same type. When hovering over a goblin, all goblins in the world would highlight simultaneously.

**Fix**: Create fresh `MeshStandardNodeMaterial` per mesh in `cloneGLB()` so each entity has independent `outputNode`/uniforms. Textures remain shared by reference for memory efficiency.

**Implementation** (`packages/shared/src/rendering/materials/cloneGLB.ts`):
```typescript
// Clone material to prevent shared state across instances
// Textures are shared by reference (memory efficient)
// but outputNode and uniforms are per-instance
const clonedMaterial = new MeshStandardNodeMaterial();
clonedMaterial.copy(originalMaterial);
// ... copy all material properties
mesh.material = clonedMaterial;
```

**Impact**:
- Each mob instance now has independent highlight state
- Hovering over one goblin no longer highlights all goblins
- Textures remain shared for memory efficiency
- Fixes visual bug where all VRM mobs of same type would highlight together

### Mob AI Tick Processing Fix (March 17, 2026)

**Change** (PR #1060, Commit a55079e): Wired mob AI tick processing into server tick loop to enable mob state machine transitions.

**Problem**: `MobEntity.serverUpdate()` defers AI to `GameTickProcessor.runAITick()`, but `GameTickProcessor` was never instantiated — so mob AI state machines never received `update()` calls. Goblins entered IDLE on spawn and never transitioned to WANDER, CHASE, or ATTACK.

**Fix**: Register mob AI tick handler at MOVEMENT priority in `ServerNetwork`, before mob tile movement, so AI decides movement targets and the movement system executes paths on the same tick.

**Implementation** (`packages/server/src/systems/ServerNetwork/index.ts`):
```typescript
// OSRS-ACCURATE: Process mob AI BEFORE mob movement each tick
// AI state machine (IDLE → WANDER → CHASE → ATTACK → RETURN) decides movement targets,
// then mob tile movement executes the path on the same tick.
// Without this, mobs stand idle forever because MobEntity.serverUpdate() defers
// AI ticking to the tick system for deterministic OSRS ordering.
const MOB_AI_DELTA_SECONDS = TICK_DURATION_MS / 1000;
this.tickSystem.onTick(() => {
for (const entity of this.world.entities.values()) {
if (!(entity instanceof MobEntity)) continue;
if (entity.getHealth() <= 0) continue;
entity.runAITick(MOB_AI_DELTA_SECONDS);
}
}, TickPriority.MOVEMENT);

// Register mob tile movement to run on each tick (same priority as player movement)
// Runs AFTER mob AI so paths set by AI are executed this tick
this.tickSystem.onTick((tickNumber) => {
this.mobTileMovementManager.onTick(tickNumber);
}, TickPriority.MOVEMENT);
```

**Impact**:
- Mob AI state machines now function correctly
- Goblins and other mobs properly transition through IDLE → WANDER → CHASE → ATTACK states
- Deterministic OSRS-style tick ordering (AI decides, movement executes, same tick)
- Fixes mobs standing idle forever after spawn

### Dev Server Watcher CPU Fix (March 16, 2026)

**Change** (PR #1034, Commit 7b5bf08): Fixed dev server watcher burning 100% CPU when idle.

**Problem**: Two compounding issues caused the dev script to consume 100% CPU core while completely idle:
1. `awaitWriteFinish` polls every watched file at 100ms — redundant since the script already debounces rebuilds itself
2. Polling fallback does a full recursive directory walk every 1s

**Fix** (`packages/server/scripts/dev.mjs`):
```javascript
// Removed awaitWriteFinish (redundant with existing 200ms debounce)
const watcher = chokidar.watch(watchRoots, {
ignoreInitial: true,
// awaitWriteFinish removed - script already debounces via setTimeout
});

// Increased polling fallback interval from 1s to 5s
async function startPollingFallback() {
pollFallbackInterval = setInterval(() => {
// ... scan for changes
}, 5000); // Was 1000ms
}
```

**Impact**:
- Eliminates 100% CPU usage when dev server is idle
- Reduces unnecessary file system polling
- Better developer experience with lower resource consumption
- No impact on rebuild responsiveness (200ms debounce still active)

### Docker Build Improvements (March 15, 2026)

**Change** (PR #1033, Commit 7519105): Major Dockerfile improvements for production deployment.

**Key Changes**:
- **Bun 1.3.10 Upgrade**: Updated from 1.1.38 to support Vite 6+ builds
- **Client Build**: Added `packages/client` build to Docker image (required for multi-service deployments)
- **Workspace Symlinks**: Manually recreate Bun workspace symlinks after Docker COPY (COPY flattens symlinks)
- **Per-Package node_modules**: Bun 1.3 no longer hoists all deps to root - explicitly copy package-level node_modules
- **better-sqlite3 Removal**: Strip from manifests before install (segfaults under QEMU cross-compilation)
- **Manifest Embedding**: Copy manifests from builder stage to ensure cleaned versions are used

**Implementation** (`packages/server/Dockerfile`):
```dockerfile
# Builder stage - Bun 1.3.10
FROM oven/bun:1.3.10-alpine AS builder

# Build client (required for multi-service template)
WORKDIR /app/packages/client
RUN bun run build

# Runtime stage - Bun 1.3.10
FROM oven/bun:1.3.10-alpine AS runtime

# Copy per-package node_modules (Bun 1.3 doesn't hoist)
COPY --from=builder /app/packages/shared/node_modules ./packages/shared/node_modules
COPY --from=builder /app/packages/server/node_modules ./packages/server/node_modules

# Restore workspace symlinks (Docker COPY flattens them)
RUN bun install --production
```

**Impact**:
- Production Docker images now build successfully with Vite 6+
- Client and server can run from same image (multi-service deployments)
- Workspace dependencies resolve correctly at runtime
- No more QEMU segfaults from better-sqlite3

### Dependency Updates (March 19, 2026)

**Major Updates**:
- **Vite**: 6.4.1 → 8.0.0 (major version bump for build system)
- **@vitejs/plugin-react**: 5.2.0 → 6.0.1 (React plugin compatibility)
- **@types/three**: 0.182.0 → 0.183.1 (TypeScript definitions for Three.js 0.183.2)
- **@vitest/coverage-v8**: 4.0.18 → 4.1.0 (test coverage tooling)
- **jsdom**: 28.1.0 → 29.0.0 (testing environment)
- **jest**: 29.7.0 → 30.3.0 (testing framework)
- **@nomicfoundation/hardhat-ethers**: 3.1.3 → 4.0.6 (smart contract tooling)
- **@pixiv/three-vrm**: 3.4.3 → 3.5.1 (VRM avatar support)
- **@solana-mobile/wallet-standard-mobile**: 0.4.4 → 0.5.0 (mobile wallet integration)
- **sqlite3**: 5.1.7 → 6.0.1 (SQLite database driver)

**Impact**:
- Latest build tooling with improved performance and faster builds
- Better React 19 compatibility with new Fast Refresh implementation
- Updated testing environment with Jest 30.x and jsdom 29.x
- Latest VRM avatar features and improvements
- Improved mobile wallet support for Solana
- Updated TypeScript definitions matching Three.js 0.183.2
- Enhanced test coverage reporting with Vitest 4.1
- SQLite 6.x with performance improvements and bug fixes

See CLAUDE.md for complete documentation.
Loading