Nuz-Dash is a self-hosted multiplayer Nuzlocke platform: play in the browser, let the tracker log encounters straight from the game's memory, and watch everyone's runs live — side by side. No accounts. Invite links are all it takes. Inspired by the PointCrow & pChal Nuzlocke Invitational.
Built-in GB / GBA / NDS emulator, right in the browser — desktop or phone (fullscreen with touch controls). Scan a QR from your desktop and keep playing on your phone, same run, no login. Saves resume automatically from the server.
Wild battles are detected from the running game's memory — species, level, shiny — and logged with one click. Works with pokeemerald-expansion hacks, fakemon included.
Team, HP bars, and faint alerts parsed straight from the battery save. Deaths flow into the tracker with a cause-of-death note. Auto backups on every in-game save.
Every runner streams their game to the lobby. Watch friends' runs — and their wipes — live while you play yours.
Locations appear on a map as you play, colored by encounter status. Dupes clause, shiny clause, and hardcore level caps built in.
When a run dies, restart into a fresh numbered attempt. Every past attempt — encounters, graveyard, diary — stays browsable forever.
Easiest: deploy on Railway — one click, a public URL out of the box, roughly $5/month for a hobby lobby, and your data persists on a volume. Prefer your own hardware? One machine hosts; everyone else just opens a link. Windows, macOS, and Linux:
Grab the source zip from the latest GitHub release and extract it anywhere (or git clone https://github.com/tummyslyunopened/nuz-dash), then in that folder:
npm install npm run build npm start
Open http://localhost:4517 — create your lobby and you're the first runner.
To let friends join over the internet, install cloudflared (drop the binary into a tools/ folder next to the app, or put it on your PATH). Then open the admin dashboard at http://localhost:4518 — the tunnel panel offers two modes:
Quick — hit Start tunnel and you're public in seconds on a random *.trycloudflare.com URL. Zero setup, but the URL changes every time the tunnel restarts.
Named (recommended) — a permanent address on a domain you manage on Cloudflare. In the tunnel panel: switch to named, enter a tunnel name and your hostname (apex or subdomain, e.g. nuz.example.com), click Login to Cloudflare and approve in the browser, then Create tunnel & route DNS, then Start tunnel. Enable auto-start and your address survives every restart.
Either way, every invite link you copy automatically uses the public address.
Copy the invite link from your lobby page and send it privately. Each joiner picks a name and gets their own secret link — that link is their login, so it should be treated like a password. Lost links can be regenerated by any lobby member or from the admin dashboard.
The event that inspired this project — scaled down to your friend group.
Nuz-Dash was inspired by the PointCrow & pChal Nuzlocke Invitational — 16 streamers, 8 teams, one month to survive a hardcore Nuzlocke, and the winning teams battle each other at the end. It's the best spectator format Pokemon has ever had, and nothing about it requires a Twitch audience.
Pick a game or ROM hack, set a deadline, and race: everyone runs the same lobby with hardcore level caps and dupes clause enforced, watches each other live, and mourns each other's graveyards. Survivors bring their hall-of-fame teams to a finale battle — in person, or on Pokemon Showdown with Invitational-style rules.
The Invitational — the event site and tracker · their ruleset · PointCrow on Twitch · the Nuzlocke challenge's history. Nuz-Dash is a fan project — not affiliated with PointCrow, pChal, or the Invitational.
A clip-on controller turns the phone experience from touchscreen-passable to genuinely great. These are the ones we'd pick:
The all-rounder: Hall-effect sticks, console-grade grip, USB-C with pass-through charging. Android & iPhone 15+. Find it on Amazon →
Bluetooth, so it fits any phone (older iPhones included) — and the comfiest to hold, with swappable sticks and layouts. Find it on Amazon →
The budget pick: light, portable, still Hall-effect sticks and pass-through charging. Everything a Nuzlocke needs. Find it on Amazon →
As an Amazon Associate, the Nuz-Dash maintainer earns from qualifying purchases made through these links, at no extra cost to you.
You. Nuz-Dash ships zero game files — each lobby's host uploads their own legally-dumped ROM (patched hacks included). The ROM stays on the host's server and is served only to that lobby's members so everyone races the same game — it's designed for private groups where each runner owns their own copy.
Everything lives in server/data/ on the host machine as plain JSON plus your ROMs, save states, and sprites. Back up that folder and you've backed up every run. Runners also get automatic local .srm + .state downloads on every in-game save.
Secret links. Creating or joining a lobby mints a personal URL containing a random token — possession of the link is the identity. Share invite links privately, bookmark your personal link, and rotate it anytime if it leaks.
The emulator covers Game Boy, Game Boy Color, Game Boy Advance, and Nintendo DS. Deep integration — encounter radar, live party, auto backups — currently supports Gen 3 (Ruby/Sapphire/Emerald/FireRed/LeafGreen) and hacks built on them, including pokeemerald-expansion-based hacks. The manual tracker supports all 21 mainline games.
If your instance doesn't show a URL automatically: open your Railway project, click the service, go to Settings → Networking, and hit Generate Domain (accept the suggested port). That's your instance — open it and create your lobby. You only ever do this once.
Tiny — the emulator runs in each player's browser, so the server just relays saves, tracker data, and low-fps stream frames. Railway scales resources automatically and bills actual usage; a hobby lobby typically lands around $5/month. Optionally cap costs under Settings → Deploy → Replica Limits. One rule: keep replicas at 1 — Nuz-Dash is single-instance by design (one volume, one save authority), and multiple replicas will corrupt lobby state.
Yes — if your domain is on Cloudflare (any plan, including just DNS), the admin dashboard sets up a named tunnel for you: log in once, click "Create tunnel & route DNS", and your instance gets a permanent hostname like nuz.example.com. No port forwarding, no exposed IP, free. If the hostname already has a DNS record, remove it first — the setup won't overwrite existing records.
Download the newest release over your install (or git pull), then npm install && npm run build and restart. Your server/data/ folder is untouched, and data migrations run automatically on boot.