The Teleport Coding Challenge

Port NetHack 5.0 from C to JavaScript. Bit-exact parity. Highest score wins.

NetHack is one of the most complex and longest-lived open source programs ever written. After 46 years of continuous development — tracing its lineage from Rogue (1980) to Hack (1982) to NetHack — v5.0 just shipped: the first major version bump since 3.0 in 1989. That’s 442,901 lines of C and Lua to port.

This contest asks: can a swarm of LLM coding assistants enable a single person to work with a program of this scale and complexity? Can agents create hundreds of thousands of lines of code that humans would actually want to own afterwards?

About the contest →   About NetHack →

News

Several teleport-contest bugs fixed thanks to careful reports from @xeophon (#5) and @serteal (#6): the public session corpus is back in sync between contest and judge (38 files re-recorded), seed0030's seg-0 character mismatch is fixed, and the scorer now requires the cursor to land in the recorded position for a screen to count as matched. Pull the latest template and re-run bash frozen/score.sh to pick up the corrections.

Older news

Contest updates: several improvements. Forks now declare a category — agentic, transpiled, or other — by running set-category.sh once before it will be scored. Animation-frame parity is scored as a supplemental metric, supported by a new API. /play/<owner>/ now supports saving, loading, and an in-browser options editor at /nethackrc/, and the persistence API was simplified to a single opts.storage handle so save/restore survives a browser reload. (serteal’s port hasn’t regressed; their sessions just need a small migration to fit the new API.) The corpus was re-recorded with instrumentation fixes. Phase 2 is clarified as a test of maintainability.

serteal has submitted the first transpiled solution — an Emscripten compilation of the C source into a JavaScript emulation of the C state machine, including a simulated C heap. Click serteal’s name to inspect the JavaScript, and Play to play the working game in the browser. It is not yet a readable JS port, and there is still plenty of time to write one! Can you build a port that beats the transpiler in Phase 2?

Leaderboard

Re-scored every two hours · Full view →

Loading…

Category is based on how the team plans to produce most (over 50%) of the code. Agentic codebases are mostly produced by generating code with an LLM and Transpiled codebases rely mostly on transpiling the C sources with tools. Points shown as public + held-out: matched 80×24 screens, one point per recorded step where the fork’s render matches C exactly. The 88 sessions split 44/44 across the public corpus and a held-out set kept private until contest end. PRNG is shown as advisory progress — it’s the structural prerequisite for screens to match. The Sessions column tallies sessions where every screen and PRNG call matched (public + held-out). Play opens the build in your browser; Tests opens the Session Viewer scoped to it.

Play it in your browser

Hit any Play button on the leaderboard above to open that contestant’s port directly in your browser — running entirely client-side, no install. Tests opens the Session Viewer scoped to that same fork: scrub through any of the 44 public sessions and see, frame by frame, where the JS port diverges from the official C trace.

Two phases

Phase 1 — Foundation

Opens May 2026 · Deadline Sun Nov 29, 2026

Standard parity contest against NetHack 5.0. Score against 88 sessions (44 public and 44 held-out). Top 10 teams qualify for Phase 2.

Phase 2 — Generalization

Target announced Nov 30 · Deadline Dec 31, 2026

Judges pick a “5.1” target — selected changes to the baseline codebase. Phase 2 score is parity against 5.1, divided by a penalty proportional to how much you changed your js/ from your Phase 1 submission. Ports with maintainable code win.

Best Method award

Throughout both phases, judges spotlight team writeups on the leaderboard. After Phase 2, a separate Best Method award is judged on the quality and reproducibility of the writeup — independent of where you placed in the parity ranking. The goal: capture and share the actual techniques that worked.