- TypeScript 89.4%
- CSS 5.5%
- JavaScript 3.5%
- Shell 1%
- HTML 0.5%
M-03 verlangte drei Wortersetzungen (SCAN-7741 → UNIT-7741, TRACE-3392 → RELAY-3392, WATCH-0012 → NODE-0012), die weder in der Transmission noch im Briefing vorkamen — ohne HINT nur durch Raten lösbar. Gleiche Fehlerklasse wie M-02/M-06/KATA-03, gefunden beim Spielen im Obsidian-Plugin. Der Ableitbarkeits-Test von 2026-07-24 konnte das strukturell nicht sehen: er vergleicht zeilenweise, und eine In-Place-Wortersetzung lässt den Rest der Zeile stehen — die Bigram-Ähnlichkeit bleibt weit über der Schwelle. Fix zweigeteilt: Ersetzungsliste in die Briefing-DIRECTIVE (Muster R-16/R-24/M-06) und ein zweiter Invariant-Test eine Granularität tiefer, der jedes Solution-Token gegen Transmission+Briefing prüft. Erstlauf meldete 10 Missionen, alle triagiert: 9 legitim (Tippfehler, Formeln, FRAGMENT-10 als verlinkte Quelle) und als EXPLAINED_TOKENS begründet, 1 defekt. 210 Tests, 4-Workspace-Typecheck, Lint grün. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| .gitea/workflows | ||
| .github/workflows | ||
| docs | ||
| experiments | ||
| packages | ||
| scripts | ||
| .editorconfig | ||
| .gitignore | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLA.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| eslint.config.mjs | ||
| LICENSE | ||
| LICENSE-DOCS | ||
| LICENSING.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| SECURITY.md | ||
| tsconfig.base.json | ||
NeuroVim
Learn Vim by playing a cyberpunk spy-thriller.
▶ Play in the browser (GitHub Pages mirror) · Desktop downloads
An AI handler named CIPHER assigns you "missions" that are really Vim exercises — restore CORP-corrupted documents, fix glitched transmissions, beat the clock. You end up learning Vim almost by accident; the spy-thriller is the hook. Same game ships three ways from one codebase: a web app, an Obsidian plugin, and a native desktop app.
Screenshots
![]() Welcome — CIPHER intro |
![]() NEXUS — mission picker + status |
![]() Briefing — story before each mission |
![]() Editor — CodeMirror 6 + Vim |
![]() Result — mission complete |
![]() THE RAVEN — free-play sandbox |
![]() Archive — unlockable lore & loot |
![]() Cheatsheet — Vim keymap overlay |
Features
- Story-driven campaign — a curriculum of Vim missions (motions, find-char, the dot command, operators, text objects, search & replace, macros, registers, visual-block, global commands, regex) wrapped in a narrative that unlocks progressively as you level up.
- Real editor — CodeMirror 6 with actual Vim keybindings, not a fake terminal.
- THE RAVEN sandbox — free-play: fix N injected glitches against the clock, beat your best (EASY / NORMAL / HARD).
- Progression & mastery — XP, levels, progressive mission unlock, streaks, and gold/silver/bronze par-tiers that score each run by keystrokes; progress saved locally in your browser.
- Terminal / CRT aesthetic — restrained phosphor-green "Kuro" theme, monospace, optional scanline.
- Plays anywhere — in the browser with no install, or as a ~3 MB native desktop app (macOS / Windows / Linux).
Play
- Browser: https://jkaindl.codeberg.page/neurovim/ — nothing to install.
- Desktop: download an installer from the latest release
(macOS
.dmg, Windows.exe/.msi, Linux.AppImage/.deb/.rpm). The macOS.dmgis Developer ID-signed + notarized (opens without a Gatekeeper warning); the Windows installer is currently unsigned — seedocs/DESKTOP.md.
Run from source
npm install
npm run dev # web app → http://localhost:5173/
npm run build # full build (content → Obsidian plugin → web)
npm test # test suite
npm run build:dmg # native desktop app + macOS DMG (needs Rust + Xcode CLT)
Contributor guide: CONTRIBUTING.md · architecture & internals
for agents/maintainers: AGENTS.md.
Manual
New players start with the Player Manual — a Diátaxis-structured guide:
- Tutorial — play through your first mission, no Vim knowledge needed.
- How-to guides — the sandbox, scoring, unlocks, desktop install, resetting progress.
- Reference — the Vim keymap
and ranks & unlocks (generated from the game
data via
npm run build:manual). - Explanation — why NeuroVim is shaped the way it is.
Built with
TypeScript · Preact · CodeMirror 6
- @replit/codemirror-vim · Vite · Tauri v2 · self-hosted JetBrains Mono (OFL).
A small monorepo (npm workspaces): a platform-neutral core (game logic, Web
Audio, Preact UI) with thin adapters for the web, Obsidian, and desktop. No
UI kit, no CSS framework. See AGENTS.md for the architecture.
Contributing
Issues and PRs welcome on Codeberg
(primary) or the GitHub mirror.
Please read CONTRIBUTING.md first.
License
NeuroVim is dual-licensed — see LICENSING.md.
- Open source: GNU AGPL-3.0 — copyleft with the network-use clause: if you host a modified version so others can use it over the network, the source of your variant must also be made available under the AGPL.
- Commercial license: for uses that the AGPL does not fit — e.g. a proprietary
or closed-source product, or an Apple App Store build (App Store terms are
incompatible with the AGPL) — a separate commercial license is available. See
LICENSING.md; contributions are covered by the CLA.
Documentation and narrative text (docs, missions, lore) are licensed under CC BY-SA 4.0. The bundled JetBrains Mono font is under the SIL Open Font License.







