Skip to main content

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

TaskEffortImpactStatus
Fork N64Wasm (MIT)1 dayFoundationDone
Remove -DNOSSE, add -msimd1281 hour2-4x RSP speedupNext
Remove -DNO_ASM1 hourMinor gainsNext
Upgrade Emscripten 2.0.7 → 3.x2-3 days10-20% overallPlanned
Add -pthread + PROXY_TO_PTHREAD1 week30-50% throughputPlanned
Add -sMALLOC=mimalloc1 hourThread-safe allocatorPlanned
Run benchmarks (FPS comparison)2 daysProofPlanned

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

TaskEffortImpact
AudioWorklet ring buffer1 weekFixes ALL audio issues
OffscreenCanvas rendering1 week4x smoother frames
React <N64Emulator /> component2 weeksNo iframe needed
Gamepad API with remapping3 daysFull controller support
Gamepad Haptics (rumble)2 daysImmersion
Touch control system2 weeksMobile-first UX
Screen Wake Lock1 dayNo screen dimming
COOP/COEP header setup1 dayEnables SharedArrayBuffer
NextJS page integration3 daysShip 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 video
  • MediaRecorder with 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

  1. Analyze ParaLLEl-RDP's ~30 Vulkan compute shaders
  2. Port to WGSL (WebGPU Shading Language)
  3. Integrate with emulation core (replace HLE graphics path)
  4. Add upscaling pipeline
  5. 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

MetricBaseline (N64Wasm)Phase 1 TargetPhase 2 Target
SM64 FPS (M1 Mac)45-556060 (locked)
THPS FPS (M1 Mac)50-606060 (locked)
Audio drops/minute5-105-100
Input latency~30ms~25ms~15ms
Time to playable3-5s3-5s<2s
WASM size2.5MB3MB3MB
Mobile FPS (iPhone 14)30-5045-6055-60