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.

448,366 lines of code across the three repos, measured at the live release (v0.4.5, v0.4.0, v0.4.5).

  1. groddle-afternoon391,952 lines
    1,079 files · 5,681 tests · 731 commits
  2. 91 files · 363 tests · 58 commits
  3. 78 files · 633 tests · 85 commits

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.

github.com/TinyBitAdventures/groddle-afternoon · MIT licence · measured at v0.4.5 (cfd9e376)

  • Lines of code391,952in 1,079 files
  • Tests5,681in 422 files, run with node --test
  • Commits731up to v0.4.5
  • First commit19 Oct 2026
  • Latest commit29 Oct 2026

Lines by language

  • JavaScript 373,108 lines · 95% · 1,027 files
  • CSS 9,136 lines · 2.3% · 5 files
  • Python 6,669 lines · 1.7% · 23 files
  • Other 3,039 lines · 0.8% (PHP 596 lines in 9 files, HTML 2,253 lines in 13 files, Shell 190 lines in 2 files)

Lines by area

  1. 1Game core130,608
    33% · 291 files · public/game.js, public/content.js, public/js/
  2. 2Tests99,318
    25% · 435 files · tests/
  3. 3Feature modules88,208
    23% · 115 files · public/js/features/
  4. 4Build tools42,260
    11% · 189 files · tools/, build-*.mjs
  5. 5Quest rooms19,290
    4.9% · 30 files · public/js/quest-rooms/
  6. 6Pages and styles12,268
    3.1% · 19 files · public/ (pages, stylesheets, page scripts)

Not counted as code

  • Art and sound17,138 files · 1.17 GB
  • Data (JSON)3,025 files · 178.0 MB
  • Generated modules and built pages1,071 files · 7.3 MB · 147,781 lines
  • Vendored libraries2 files · 842 KB · 2,375 lines
  • Docs and notes19 files · 99 KB
  • Other files2 files · 2 KB

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.

github.com/TinyBitAdventures/groddle-afternoon-server · MIT licence · measured at v0.4.0 (a3df0458)

  • Lines of code39,295in 91 files
  • Tests363in 45 files, run with go test
  • Commits58up to v0.4.0
  • First commit25 Oct 2026
  • Latest commit29 Oct 2026

Lines by language

  • Go 39,225 lines · 99.8% · 88 files
  • Shell 70 lines · 0.2% · 3 files

Largest files

  1. objects.go1,649
  2. crowns.go1,539
  3. projects.go1,359
  4. rook.go1,332
  5. trade.go1,183

Lines by area

  1. 1Shared-world modules18,691
    48% · 26 files · *.go that register a module
  2. 2Tests15,612
    40% · 45 files · *_test.go
  3. 3Core4,922
    13% · 17 files · hub, sockets, tickets, saving
  4. 4Deploy and run scripts70
    0.2% · 3 files · deploy/, run.sh

Areas under 1.5% of the lines are drawn at 1.5% so their squares stay visible.

Not counted as code

  • Data (JSON)10 files · 1.2 MB
  • Docs and notes3 files · 18 KB
  • Other files5 files · 4 KB

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.

github.com/TinyBitAdventures/groddle-afternoon-site · MIT licence · measured at v0.4.5 (58e16590)

  • Lines of code17,119in 78 files
  • Tests633in 44 files in groddle-afternoon that read this repo
  • Commits85up to v0.4.5
  • First commit24 Oct 2026
  • Latest commit29 Oct 2026

Lines by language

  • JavaScript 466 lines · 2.7% · 1 file
  • PHP 15,900 lines · 93% · 67 files
  • HTML 191 lines · 1.1% · 8 files
  • CSS 562 lines · 3.3% · 2 files

Lines by area

  1. 1Player services6,108
    36% · 21 files · src/ classes behind the groddle/v1 REST routes
  2. 2Shared ledger5,546
    32% · 15 files · src/Ledger*.php, src/Economy.php
  3. 3Pages, blocks and menu4,712
    28% · 32 files · the rest of src/
  4. 4Styles562
    3.3% · 2 files · style.css
  5. 5Templates191
    1.1% · 8 files · templates/, parts/

Areas under 1.5% of the lines are drawn at 1.5% so their squares stay visible.

Not counted as code

  • Art and sound59 files · 398 KB
  • Data (JSON)35 files · 197 KB
  • Docs and notes3 files · 10 KB

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.

The live site runs (deployed 29 Oct 2026):

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.

String Practitioner badge
Threader of Renown badge

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

  1. Clone the three repos side by side: groddle-afternoon, groddle-afternoon-server and groddle-afternoon-site.
  2. Play solo: in groddle-afternoon, run node tools/serve-static.mjs public 8080 and open http://127.0.0.1:8080/play/.
  3. Test the game: npm install, then npm 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.
  4. Test the server: go test ./... in groddle-afternoon-server.
  5. 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 test stays 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.