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).

  1. groddle-afternoon379,828 lines
    1,024 files · 5,390 tests · 684 commits
  2. 91 files · 362 tests · 57 commits
  3. 74 files · 619 tests · 77 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.3.1 (84e181db)

  • 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

  1. 1Game core127,025
    33% · 277 files · public/game.js, public/content.js, public/js/
  2. 2Tests94,355
    25% · 407 files · tests/
  3. 3Feature modules87,876
    23% · 115 files · public/js/features/
  4. 4Build tools39,089
    10% · 176 files · tools/, build-*.mjs
  5. 5Quest rooms19,290
    5.1% · 30 files · public/js/quest-rooms/
  6. 6Pages and styles12,193
    3.2% · 19 files · public/ (pages, stylesheets, page scripts)

Not counted as code

  • Art and sound14,742 files · 988.7 MB
  • Data (JSON)2,960 files · 176.4 MB
  • Generated modules and built pages1,065 files · 6.9 MB · 144,055 lines
  • Vendored libraries2 files · 842 KB · 2,375 lines
  • Docs and notes19 files · 103 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.3.0 (fa6c4595)

  • 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

  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,650
    48% · 26 files · *.go that register a module
  2. 2Tests15,515
    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.3.0 (4cd3edc1)

  • 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

  1. 1Player services6,096
    36% · 21 files · src/ classes behind the groddle/v1 REST routes
  2. 2Shared ledger5,546
    33% · 15 files · src/Ledger*.php, src/Economy.php
  3. 3Pages, blocks and menu4,350
    26% · 28 files · the rest of src/
  4. 4Styles528
    3.2% · 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 28 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.