🕹️ A game about building emulators! https://afska.github.io/emudevz/
  • JavaScript 84.3%
  • Scheme 14.3%
  • CSS 1.2%
Find a file
2026-06-11 23:43:19 -03:00
.github Updating github issue template 2026-01-22 19:14:07 -03:00
docs Adding advanced settings docs 2026-02-10 23:33:02 -03:00
editables FIX: name_tables.png 2026-02-05 02:57:02 -03:00
electron FIX: Opening external URLs from markdown views now work as expected 2026-06-11 22:05:45 -03:00
public FIX: Ctrl+C not working in CodeMirror while ImGui is running 2026-03-16 17:07:11 -03:00
scripts Fixing deploy, testing Steam SDK and achievements 2025-12-19 01:33:27 -03:00
src FIX: Inconsistent valid path check due to global regexps being stateful 2026-06-11 23:43:19 -03:00
.editorconfig Adding highlighting support to MarkdownView 2025-07-05 06:51:55 -03:00
.gitignore Adding sfx 2025-12-27 05:49:57 -03:00
.nvmrc Updating .nvmrc 2025-09-03 01:41:38 -03:00
.prettierignore Reformatting package-lock.json with spaces 2025-09-10 06:08:25 -03:00
.prettierrc.json Converting tests to spaces instead of tabs 2025-10-06 19:56:00 -03:00
index.html Adding 'WebGL unsupported' error 2026-01-24 02:48:22 -03:00
LICENSE Adding LICENSE 2023-05-21 07:02:54 -03:00
package-lock.json Fixing offscreen plotting issue 2026-06-07 06:46:26 -03:00
package.json Fixing offscreen plotting issue 2026-06-07 06:46:26 -03:00
pre-licenses.txt Showing a warning if some emojis aren't supported - Fixes #31 2026-03-12 14:39:48 -03:00
README.md Improving dev install instructions 2026-04-26 21:31:17 -03:00
vite.config.mjs Adding electron integration 2025-12-15 04:21:37 -03:00
workspace.code-workspace Adding template app 2021-01-18 23:18:23 -03:00

EmuDevz

🕹️ A game about building emulators! Check it out!

EmuDevz: Reveal Trailer

rlabs Created by [r]labs.

Key features

  • Full 🕹️ NEEES emulation guide from scratch
  • Interactive 🔨 6502 Assembly tutorial
  • Implement 🧠 CPU, 🖥️ PPU, and 🔊 APU in any order
  • Play 👾 homebrew games to unlock ROMs
  • 🧪 Unit tests, video tests, and audio tests are provided
  • 💻 Unix-style shell and code editor
  • 🎶 Original retro-synthwave soundtrack
  • 📃 Included documentation and in-game dictionary
  • 🗣️ Fully localized into English and Spanish
  • 🐞 Powerful debugger with:
    • 🐏 Memory viewer
    • 🔢 Instruction log
    • 🏞️ Name tables, CHR, Sprites, Palettes
    • Individual APU channel views
    • 🎮 Controllers
    • 🗃️ Emulator logging
  • 🔭 Free mode to use the IDE to develop emulators for other systems!

Where's the save file?

  • Portable: .devz files (import/export from Settings menu)
  • Web: IndexedDB and LocalStorage
  • Steam/Windows: %USERPROFILE%/AppData/Roaming/EmuDevz
  • Steam/Linux: $XDG_CONFIG_HOME/EmuDevz
  • Steam/macOS: ~/Library/Application Support/EmuDevz

Development

Install and run

# [0: install nvm & node]
# - install nvm
# - install the node version listed in `.nvmrc`

# [1: install dependencies]
npm install

# [2: package levels]
npm run package

# [3: add music files (optional)]
# - grab the `music` directory from the `gh-pages` branch
# - put it in `public/music`

# [4: start the dev server]
npm start

Scripts

  • Package levels: npm run package
  • Sort locales: node scripts/sort-locales.js
  • Sort dictionary entries: node scripts/sort-dictionary.js
  • Build: npm run build
  • Deploy to GitHub Pages: npm run deploy <GH_USERNAME> <GH_TOKEN>

Generate licenses

cp pre-licenses.txt public/licenses.txt
yarn licenses generate-disclaimer --prod >> public/licenses.txt

Known issues

These are notes from the January 2026 release on Steam. I hope these issues can be resolved in the future.

Windows

  • On Windows 11, when using a full-screen Electron app with the Steam overlay, ghost Alt-Tab windows are created. As a workaround, fullscreen mode is disabled on Windows.

macOS

Linux

  • The app doesn't boot in sandbox mode when launched via Steam. As a workaround, Steam launches the app with --no-sandbox.
  • The app doesn't boot on Arch Linux with the latest Electron when using the Steam Linux Runtime 3.0. As a workaround, Electron 36.9.5 was used and forced to launch using X11 with --enable-features=UseOzonePlatform --ozone-platform=x11.