Project Roadmap
From fork to the best N64 emulator on the internet.
Overview
Phase 1: Better Engine
:::info STATUS: IN PROGRESS Lowest effort, highest impact. Build flag changes + Emscripten upgrade. :::
Goals
- 2-3x performance improvement over baseline N64Wasm
- Zero code changes to the emulator core (build configuration only)
- Prove the architecture works with benchmarks
Tasks
| Task | Effort | Impact | Status |
|---|---|---|---|
| Fork N64Wasm (MIT) | 1 day | Foundation | Done |
Remove -DNOSSE, add -msimd128 | 1 hour | 2-4x RSP speedup | Next |
Remove -DNO_ASM | 1 hour | Minor gains | Next |
| Upgrade Emscripten 2.0.7 → 3.x | 2-3 days | 10-20% overall | Planned |
Add -pthread + PROXY_TO_PTHREAD | 1 week | 30-50% throughput | Planned |
Add -sMALLOC=mimalloc | 1 hour | Thread-safe allocator | Planned |
| Run benchmarks (FPS comparison) | 2 days | Proof | Planned |
Success Criteria
- Super Mario 64: 60fps on mid-range laptop (currently struggles)
- THPS: Solid 60fps with no drops
- Audio: No worse than current (we fix it in Phase 2)
Phase 2: Better Shell
:::warning STATUS: PLANNED Modern web architecture that makes this a native React component. :::
Goals
- Zero audio issues (AudioWorklet)
- Native React integration (no iframe)
- Polished mobile experience (all buttons work, haptic feedback)
Tasks
| Task | Effort | Impact |
|---|---|---|
| AudioWorklet ring buffer | 1 week | Fixes ALL audio issues |
| OffscreenCanvas rendering | 1 week | 4x smoother frames |
React <N64Emulator /> component | 2 weeks | No iframe needed |
| Gamepad API with remapping | 3 days | Full controller support |
| Gamepad Haptics (rumble) | 2 days | Immersion |
| Touch control system | 2 weeks | Mobile-first UX |
| Screen Wake Lock | 1 day | No screen dimming |
| COOP/COEP header setup | 1 day | Enables SharedArrayBuffer |
| NextJS page integration | 3 days | Ship it on n64.weshuber.com |
Success Criteria
- THPS plays with zero audio pops on Chrome, Firefox, Safari
- Works on iPhone (Safari) and Android (Chrome)
- Embeds in TrickBook website without iframe hacks
Phase 3: Better Features
:::warning STATUS: PLANNED The differentiators. Things no other browser emulator has. :::
Goals
- Social gaming — clips, scores, challenges
- Cross-device continuity — cloud saves
- Installable — PWA with offline play
Features
Clip Recording
User plays THPS → lands sick combo → hits "Clip That"
→ Last 30 seconds saved as WebM → Share to TrickBook feed
canvas.captureStream(30)for videoMediaRecorderwith VP9 codec- Rolling 30-second buffer (DVR mode)
- Web Share API for one-tap sharing
Cloud Saves
User plays on phone → saves game → opens laptop
→ Save is already there → continues playing
- OPFS for local persistence (3-4x faster than IndexedDB)
- Background sync to TrickBook backend
- Conflict resolution (timestamp-based, last-write-wins)
THPS Leaderboards
User completes a run → score extracted from emulator memory
→ Posted to TrickBook leaderboard → Friends see it
- Memory address watching for score values
- Server-validated (anti-cheat via save state verification)
- Per-level and overall leaderboards
Save State URL Sharing
User at cool moment → generates shareable link
→ Friend opens link → lands at exact same game state
- Serialize save state → compress (Compression Streams API) → base64
- Short URL generation
- Recipient loads state directly into emulator
Challenge System
Creator sets up challenge: "Land a 50k combo in 2 minutes"
→ Shares challenge URL → includes starting save state + rules
→ Others attempt it → results posted to leaderboard
Phase 4: WebGPU ParaLLEl-RDP
:::danger STATUS: FUTURE (2027) The moonshot. Bitexact N64 rendering in the browser. :::
Goals
- Pixel-perfect rendering matching real hardware
- HD upscaling (2x, 4x, 8x resolution)
- HD texture packs
- Widescreen hacks
Approach
- Analyze ParaLLEl-RDP's ~30 Vulkan compute shaders
- Port to WGSL (WebGPU Shading Language)
- Integrate with emulation core (replace HLE graphics path)
- Add upscaling pipeline
- Add texture replacement system
Why This Matters
- Only browser emulator with hardware-accurate rendering
- Supports games that HLE can't handle
- Enables features only possible with LLE (HD packs, widescreen)
- Technical moat — hard to replicate
Phase 5: The Long Game
Beyond 2027 — optional, aspirational
- Rust rewrite — unified codebase via wgpu (desktop + browser + mobile)
- Netplay — P2P multiplayer via WebRTC with rollback
- RetroAchievements — achievement integration
- Other consoles — PS1, Saturn, Dreamcast using same architecture
- AI upscaling — neural network texture enhancement in WebGPU compute
Metrics We Track
| Metric | Baseline (N64Wasm) | Phase 1 Target | Phase 2 Target |
|---|---|---|---|
| SM64 FPS (M1 Mac) | 45-55 | 60 | 60 (locked) |
| THPS FPS (M1 Mac) | 50-60 | 60 | 60 (locked) |
| Audio drops/minute | 5-10 | 5-10 | 0 |
| Input latency | ~30ms | ~25ms | ~15ms |
| Time to playable | 3-5s | 3-5s | <2s |
| WASM size | 2.5MB | 3MB | 3MB |
| Mobile FPS (iPhone 14) | 30-50 | 45-60 | 55-60 |