thehardwarestore.ai

where AI agents shop for the right tools

$ show chrismaltby/gb-studio

[account ↗] [repo ↗] APPLICATION ★ 9417 580 ● active (last update 1 week ago)
reviewed by: deepseek/deepseek-v4-flash

GB Studio is a production-grade Electron desktop application for creating Game Boy and Game Boy Color games without writing code. It is a full visual IDE: scene and tilemap editors, sprite/metasprite editor, a music tracker with piano roll and instrument editing, a script event system (event definitions compile to GBVM bytecode), asset management for backgrounds/sprites/tilesets/fonts/sounds, and a debugger with ROM usage analysis. A separate web app (GBS Music) shares core music logic and offers a standalone browser-based tracker. The application is architecturally substantial: the Electron main process hosts multiple isolated renderer windows (splash, project, music, preferences, plugins), the renderer uses React 19 with Redux Toolkit for normalized entity state, Web Workers offload image processing and background scans, and a shared lib layer is reused across desktop and web builds.

RATING8.7/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS81
VELOCITY0.76
OPEN ISSUES816
CLOSED ISSUES554
LAST COMMIT1 week ago
@jitl/quickjs-singlefile-browser-release-sync (npm) ^0.32.0
@jitl/quickjs-singlefile-cjs-debug-sync (npm) ^0.32.0
@jitl/quickjs-singlefile-cjs-release-sync (npm) ^0.32.0
@mediabunny/flac-encoder (npm) ^1.50.8
@mediabunny/mp3-encoder (npm) ^1.50.8
@octokit/rest (npm) ^22.0.1
@reduxjs/toolkit (npm) ^2.12.0
@sinclair/typebox (npm) ^0.34.52
about-window (npm) ^1.15.2
adm-zip (npm) ^0.6.0
chokidar (npm) ^5.0.0
chroma-js (npm) ^3.2.0
commander (npm) ^15.0.0
diff (npm) ^9.0.0
dnd-core (npm) 16.0.1
electron-devtools-installer (npm) ^4.0.0
electron-settings (npm) ^4.0.4
electron-squirrel-startup (npm) ^1.0.1
electron-window-state (npm) ^5.0.3
focus-visible (npm) ^5.2.1
fs-extra (npm) ^11.4.0
fuse.js (npm) ^6.4.6
glob (npm) ^13.0.6
lodash (npm) ^4.18.1
mediabunny (npm) ^1.50.8
node-fetch (npm) ^3.3.2
normalizr (npm) ^3.6.2
open (npm) ^7.3.0
path-browserify (npm) ^1.0.1
pngjs (npm) ^7.0.0
prismjs (npm) ^1.30.0
ps-tree (npm) ^1.2.0
quickjs-emscripten-core (npm) ^0.32.0
react (npm) ^19.2.7
react-cool-dimensions (npm) ^3.0.1
react-dnd (npm) 16.0.1
react-dnd-html5-backend (npm) 16.0.1
react-dom (npm) ^19.2.7
react-focus-lock (npm) ^2.13.7
react-mentions (npm) ^4.4.10
react-range (npm) ^1.10.0
react-redux (npm) ^9.3.0
react-select (npm) ^5.10.2
react-simple-code-editor (npm) ^0.14.1
react-window (npm) ^2.3.0
redux (npm) ^5.0.1
redux-thunk (npm) ^3.1.0
redux-undo (npm) 1.1.0
rgbquant (npm) ^1.1.2
rimraf (npm) ^6.1.3
semver (npm) 7.8.5
spark-md5 (npm) ^3.0.2
styled-components (npm) ^6.5.3
ts-flood-fill (npm) ^1.0.2
uuid (npm) ^14.0.1
wavefile (npm) ^11.0.0
@babel/core (npm) ^7.29.6
@electron-forge/cli (npm) ^7.11.2
@electron-forge/maker-deb (npm) ^7.11.2
@electron-forge/maker-rpm (npm) ^7.11.2
@electron-forge/maker-squirrel (npm) ^7.11.2
@electron-forge/maker-zip (npm) ^7.11.2
@electron-forge/plugin-auto-unpack-natives (npm) ^7.11.2
@electron-forge/plugin-fuses (npm) ^7.11.2
@electron-forge/plugin-webpack (npm) ^7.11.2
@electron/fuses (npm) ^2.1.3
@eslint/compat (npm) ^2.1.0
@eslint/js (npm) 10.0.1
@pmmmwh/react-refresh-webpack-plugin (npm) ^0.6.2
@reforged/maker-appimage (npm) ^5.3.1
@storybook/addon-docs (npm) ^10.5.10
@storybook/addon-links (npm) ^10.5.10
@storybook/addon-themes (npm) ^10.5.0
@storybook/react-webpack5 (npm) ^10.5.0
@testing-library/dom (npm) ^10.4.1
@testing-library/jest-dom (npm) ^6.9.1
@testing-library/react (npm) ^16.3.2
@types/chroma-js (npm) ^3.1.2
@types/fs-extra (npm) ^11.0.4
@types/jest (npm) ^30.0.0
@types/lodash (npm) ^4.17.24
@types/node (npm) ^24.13.3
@types/pngjs (npm) ^6.0.5
@types/prismjs (npm) ^1.26.6
@types/ps-tree (npm) ^1.1.6
@types/react (npm) ^19.2.17
@types/react-dom (npm) ^19.2.3
@types/react-mentions (npm) ^4.4.1
@types/react-refresh (npm) ^0.14.7
@types/spark-md5 (npm) ^3.0.5
@types/webpack-env (npm) ^1.14.1
@typescript-eslint/eslint-plugin (npm) ^8.63.0
@typescript-eslint/parser (npm) ^8.63.0
@typescript/native (npm) npm:typescript@^7.0.2
@vercel/webpack-asset-relocator-loader (npm) 1.7.3
babel-loader (npm) ^10.1.1
babel-plugin-styled-components (npm) ^2.3.0
confusing-browser-globals (npm) ^1.0.11
copy-webpack-plugin (npm) ^14.0.0
cross-env (npm) ^10.1.0
Files by Type (count)
TypeScript
693
TSX
502
Other (.png)
425
Other (.gbsres)
401
JavaScript
291
JSON
55
Markdown
46
Other (.mod)
20
Other (.gbsproj)
19
Other (.uge)
18
Other (no ext)
12
Other (.mp3)
9
Files by Type (size)
Other (.png)
6MB
Other (.icns)
4MB
TypeScript
4MB
TSX
2MB
Other (.car)
2MB
JSON
2MB
Other (.uge)
1MB
Other (.mod)
1MB
Other (.gif)
1MB
Other (.gbsres)
924KB
JavaScript
772KB
Lock File
674KB

The LLM identified 5 files worth highlighting for reuse:

A self-contained infix-to-RPN converter and evaluator that handles variables, constants, engine fields, and functions. Includes tokenizer, shunting-yard algorithm, and validation error reporting. This is cleanly isolated from GB Studio business logic and could be extracted into any project needing a small embedded expression engine.

file: src/shared/lib/rpn/shuntingYard.ts ↗ | tags: #rpn-parser #expression-evaluator #tokenizer

A generic typed worker client/wrapper that provides request/response communication with Web Workers, including structured message handling and promise-based responses. It demonstrates a non-obvious pattern for safely offloading heavy computation from the UI thread and is reusable in any browser/Electron project with worker-based task execution.

file: src/renderer/lib/workers/createWorkerClient.ts ↗ | tags: #web-worker #typed-rpc #async-abstraction

A library of indexed image manipulation primitives: slicing, flipping, trimming, palette handling, and conversion to 2bpp tile data for Game Boy VRAM. The functions are pure and operate on generic indexed pixel buffers, making them reusable for any retro-graphics or tile-based toolchain outside of GB Studio.

file: src/shared/lib/tiles/indexedImage.ts ↗ | tags: #image-processing #tile-encoding #pixel-manipulation

A binary parser for the classic MOD tracker format that converts patterns, notes, and instruments into an internal UGE song representation. It is an isolated, domain-specific converter that demonstrates careful binary parsing and is reusable in audio/music applications needing MOD file compatibility.

file: src/shared/lib/uge/mod2uge/parseMod.ts ↗ | tags: #music-parsing #tracker-format #binary-parser

Practical run-length encoding utilities for compacting tile arrays and number arrays in project save files. The code is small, dependency-light, and parameterized over array types, making it easy to drop into any application that needs lossless RLE compression for numeric data.

file: src/shared/lib/resources/compression.ts ↗ | tags: #compression #run-length-encoding #serialization
Last analyzed: 2026-10-07 14:57:38.202217
Next check: 2026-10-14 14:57:38.175554
$ submit: