Latch

Project

Roadmap

What has shipped, the milestones that are the build order, the game layers behind them, and the proposals for packs and identity. A direction, not a schedule.

On this page

The roadmap is the issues and milestones in the repository. This page is the readable version of them. It is a direction, not a sprint: horizons flex with energy and interest, and anything below can be reordered by a good argument on an issue.

Shipped

Version Date What
0.1.0 2026-09-13 The engine, the Handler, the wheel, training with photo verification, stamped export with five layouts, recap cards, voice memos, undo, the export bundle
0.2.0 2026-09-14 One /settings page with the play pages kept clean, the dashboard actions row, the retroactive log (when on every write), one-tap photo check-in, the share sheet
0.3.0 2026-09-14 This guide, served by the app; issue templates for testers
0.5.0 2026-09-19 The health module: Apple Health and SparkyFitness steer the game
0.6.0 2026-09-19 The kit module โ€” gear, toys and consumables โ€” and the badge engine
0.7.0 2026-09-20 Share cards: three kinds, seven themes, badges on the card
0.8.0 2026-09-20 /progress with four tabs, inline-SVG charts and the Insight block

The milestones

M1 ยท Player surface โœ…

A play screen that is a game, settings that live elsewhere, retroactive logging so a game can start mid-stream, photo check-ins one tap away. Shipped in 0.2.0. One issue remains: the decisions only the maintainer can make (display name, licence, secrets to the password manager).

M2 ยท Share and install

M3 ยท Data and immersion

M4 ยท Bots

M5 ยท Packs (proposal)

Federated Latch: a Handler instance training several pups, pack-mates who can see each other's clocks and streaks, pack training and pack wheels โ€” with every capability a grant the pup chooses and can revoke. Not committed yet; the design is written up in Packs โ€” federated Latch.

M7 ยท Identity (proposal)

A pup that is a keypair rather than a server: badges that travel as signed papers, the collar as a first-class record with a start and an end, stray and collared as real states, and handles bound to the key instead of the key derived from an account. Not committed yet; the design is written up in Identity โ€” the pup, not the box.

Identity was numbered around a gap: the milestone depends on a badge engine to issue papers about, and there was none. That engine now exists โ€” it arrived in 0.6.0 with the kit module, in core/badges.py rather than inside kit, precisely so it could be built on. A badge is already a durable record with a subject, a period and frozen evidence; what M7 adds is signing it and letting it travel. The gap in the numbering stays where it is.

The game layers behind the milestones

The milestones are the build order. These are the layers of the game they add up to:

What gates everything

Three rules no feature gets to bend:

  1. Class-P. Your data never leaves your box. No cloud AI on any of it, ever.
  2. The core makes zero outbound calls; a module says when it does not. The core contacts nothing. A module that reaches the network โ€” posting a card, fetching a playset โ€” declares it, and the app tells you before you enable it: optional, informed, per module. A declaration is a statement, not a cage โ€” the app can say a module reaches the network, never that one cannot. Anything that leaves is still re-encoded with metadata stripped, and Class-P data (rule 1) never rides along.
  3. The log stays honest. Append-only, derived clock, undo voids and never deletes, late is marked late. A feature that needs to edit history does not get built.

Have an idea?

Feedback and issues โ€” suggestions are issues with the type/feature label. The best ones say what you were trying to do, not just what you want added.


This page also ships inside the app, at /guide โ€” so your own instance always serves the guide for the version you are running, with the internet unplugged. Get Latch ยท Something wrong here? Tell me.