Groddle Field Notes · Code
How Groddle Afternoon is built
Groddle Afternoon is open source, in three repositories on GitHub: the game that runs in your browser, the server that lets players share a street, and the website that keeps accounts and saves. The site runs on Minn Engine, and the art, sounds and game data are Tiny Speck’s own. Every figure on this page is measured from git at the release the live site runs.
435,696 lines of code across the three repos, measured at the live release (v0.3.1, v0.3.0, v0.3.0).
The game The realtime server The site What it runs on Art, sound and data Contributing
Fiber The scraps we started from: Tiny Speck’s code and art files, pages the Wayback Machine kept, and what players recorded.
The game
groddle-afternoon is the whole game: streets and physics, skills, quests, crafting, gardens, homes, and the multiplayer client. It is plain JavaScript in ES modules, drawn with PixiJS, with no framework and no build step for the game itself: the files in public/ are what your browser loads. Most rules are ported from Tiny Speck’s GameServerJS, and the scripts in tools/ turn Tiny Speck’s item, street and art files into the data and sprites the game reads. The tests run on Node’s own test runner, and many of them check the game against Tiny Speck’s files directly.
On GitHub: the code · issues · pull requests
- Lines of code379,828in 1,024 files
- Tests5,390in 394 files, run with
node --test - Commits684up to v0.3.1
- First commit19 Oct 2026
- Latest commit28 Oct 2026
Lines by language
- JavaScript 362,957 lines · 96% · 977 files
- CSS 9,082 lines · 2.4% · 5 files
- Python 4,799 lines · 1.3% · 19 files
- Other 2,990 lines · 0.8% (PHP 596 lines in 9 files, HTML 2,211 lines in 12 files, Shell 183 lines in 2 files)
Lines by area
- 1Game core127,025
- 2Tests94,355
- 3Feature modules87,876
- 4Build tools39,089
- 5Quest rooms19,290
- 6Pages and styles12,193
Not counted as code
- Art and sound
- Data (JSON)
- Generated modules and built pages
- Vendored libraries
- Docs and notes
- Other files
Spindle The build tools, which spin those scraps into the data and sprites the game reads.
The realtime server
groddle-afternoon-server is the multiplayer side: one Go program that keeps who is where, chat, parties and groups, and the parts of the world players share, such as quoins, rocks, races, Rook attacks and trades. Players connect over a WebSocket (coder/websocket), and each shared system is a module of its own that registers with one hub. It saves its state to files when it stops; on the live server it runs under systemd behind Caddy. Its world data is written by the game’s build tools, so both sides read the same numbers.
On GitHub: the code · issues · pull requests
- Lines of code39,157in 91 files
- Tests362in 45 files, run with
go test - Commits57up to v0.3.0
- First commit25 Oct 2026
- Latest commit28 Oct 2026
Lines by language
- Go 39,087 lines · 99.8% · 88 files
- Shell 70 lines · 0.2% · 3 files
Largest files
Lines by area
- 1Shared-world modules18,650
- 2Tests15,515
- 3Core4,922
- 4Deploy and run scripts70
Areas under 1.5% of the lines are drawn at 1.5% so their squares stay visible.
Not counted as code
- Data (JSON)
- Docs and notes
- Other files
Thread The modules: one strand for each system, from gardens to trades.
The site
groddle-afternoon-site is groddleafternoon.com: a theme and extension for Minn, in PHP. The theme draws the pages and Notes in the site’s look. The extension serves the built game beside them, adds the page blocks (each a block.json drawn in PHP, like the figures on this page) and answers the game’s groddle/v1 routes: sign-up and sign-in, saves, buddies, groups, profiles, homes, and the shared ledger of currants and items. It uses only Minn’s own classes, no WordPress functions. Its tests live in the game repo and run when the two are checked out side by side.
On GitHub: the code · issues · pull requests
- Lines of code16,711in 74 files
- Tests619in 40 files in groddle-afternoon that read this repo
- Commits77up to v0.3.0
- First commit24 Oct 2026
- Latest commit28 Oct 2026
Lines by language
- JavaScript 466 lines · 2.8% · 1 file
- PHP 15,526 lines · 93% · 63 files
- HTML 191 lines · 1.1% · 8 files
- CSS 528 lines · 3.2% · 2 files
Lines by area
- 1Player services6,096
- 2Shared ledger5,546
- 3Pages, blocks and menu4,350
- 4Styles528
- 5Templates191
Areas under 1.5% of the lines are drawn at 1.5% so their squares stay visible.
Not counted as code
- Art and sound
- Data (JSON)
- Docs and notes
Loomer The tests, which weave the strands together and hold them to the original.
What it runs on
Minn Engine is a from-scratch PHP engine, MIT licensed, that speaks WordPress’s contracts (its database tables, REST API, sign-in and roles), so the site can be hosted and run like a WordPress site without being one. Minn Admin is the admin it comes with, where the words on this page are edited. Both are separate projects with repositories of their own.
- Minn Engine at commit 707b59e3
- Minn Admin at commit 43c7a991
Where the art, sound and data come from
When Glitch closed, Tiny Speck released its art and code into the public domain (CC0) at github.com/tinyspeck: the items, locations, avatars and overlays, the Flash client, and the GameServerJS code that ran the game. Groddle Afternoon is built from those files, and where nothing survived, rebuilt from what players recorded. The Glitch name and logo were not part of that release, so they are not used here.
Fabric The finished cloth: the game you play at groddleafternoon.com.
Contributing
Issues and pull requests are welcome on all three repos. A bug you hit while playing, a rule that does not match the original, an item that is missing: open an issue, or send the fix.


A nod to everyone who sends a pull request: String Practitioner and Threader of Renown, two of Tiny Speck’s badges. In Glitch you earned them by spinning fiber straight into string and by threading five bead necklaces. Nothing grants them for a pull request: they are only our thanks.
The game groddle-afternoon
The realtime server groddle-afternoon-server
The site groddle-afternoon-site
Run it locally
- Clone the three repos side by side:
groddle-afternoon,groddle-afternoon-serverandgroddle-afternoon-site. - Play solo: in
groddle-afternoon, runnode tools/serve-static.mjs public 8080and openhttp://127.0.0.1:8080/play/. - Test the game:
npm install, thennpm test(Node 22 or newer). For the full suite, clone Tiny Speck’s glitch-GameServerJS, glitch-client, glitch-items, glitch-overlays and glitch-locations beside it; a test that needs a missing checkout skips and says what to clone. - Test the server:
go test ./...ingroddle-afternoon-server. - Run the site: it needs a Minn site. Cove runs one locally; the site’s readme has the steps.
Licences
The code in all three repos is MIT. Tiny Speck’s art and game data are CC0. Credits covers the sounds and the Glitch name.
House rules
- Commit subjects use Emoji-Log:
📦 NEW:,👌 IMPROVE:,🐛 FIX:,📖 DOC:or🤖 TEST:, then the change in plain words, such as📦 NEW: Peat bogs and dirt piles to dig. - Every change comes with a test, and
npm teststays green. - Solo play does not change for multiplayer work: multiplayer sits beside the solo game, never inside it.
- Rules cite their source: the GameServerJS file and line a number or a line of dialogue came from.
- Page copy is in our own words; item and game text come from Tiny Speck’s files.
What counts as code: files in JavaScript, Go, PHP, Python, Shell, CSS and HTML that people write, every line counted, blank ones too. Art and sound, JSON data, vendored libraries, docs, and files a tool writes (their header says so, and the built item and notes pages) are listed under each repo but not counted. Tests are the it() and test() cases in the game’s tests and the Test functions in the server’s.