Latch

Project

Roadmap

What has shipped โ€” up to the Pup ID, packs, the local AI Handler and the chat bot in 0.13.0, and the reworked Share in 0.14.0 โ€” the milestones that are the build order, and the game layers behind them. 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
0.9.0 2026-09-22 Hosted mode: one instance, many profiles behind an invite-only login, each in its own database
0.9.1 2026-09-22 Beta surveys and the tester handbook
0.10.0 2026-09-23 The habits module: one tap, a timer, a Shortcut, or a calendar another app writes; the first module to declare egress
0.11.0 2026-09-23 The coach: the Handler judges every habit, rewards consistency, has a word when you slack, and Insight reads the same facts
0.12.0 2026-09-25 Playsets โ€” content from a file, data never code โ€” and events: a window, a sign, badges from a menu of rules. Locktober 2026 is the first
0.13.0 2026-09-29 The Pup ID and papers, consent and the safeword, packs (dens, collars, whitelists, countersignatures), your own AI Handler, AI kennels, and the chat bot
0.13.1 2026-09-30 A penalty held back on a recovery day is written once, not on every tick
0.14.0 2026-10-04 Share, reworked: Dense and Check-in layouts, the event stamp, post text with hashtags, in-place editing on a phone, presets
0.15.0 2026-10-04 Mischief: marks beside your XP that change how your Handler treats you โ€” lapse questions, the short leash, the doghouse, confessions โ€” and orders: training that names a habit, standing days, and Zoomies for doing something else
0.16.0 2026-10-04 Leave it: the habits you want less of โ€” limits from a menu, the nightly ledger, Dark days and Over the line, passes, and a streak that waits for yesterday to be decided
0.16.1 2026-10-04 A refused save keeps what you typed; log a bout from earlier in one form; Play and Wear said plainly; Progress loses "By activity"
0.16.2 2026-10-04 The nav is five menus โ€” a tab bar on a phone, dropdowns on a wide screen; the Share milestone header no longer overlaps itself
0.18.0 2026-10-05 Quests: a chapter carries a goal โ€” the want in your words, measured by a habit's own target, days locked or days reflected; the Handler carries it, the story and the keepsake say whether it was reached
0.19.0 2026-10-11 Talk to your AI Handler from the chat bot's room (!ask, a switch you turn on); verification challenges โ€” proof asked at a moment you did not choose; the calendar opens a day; a share card can carry your standing; the hosted demo
0.19.1 2026-10-11 Catch up: the missed reflections of the week answered late in one entry โ€” each Blank page becomes a Late page, no XP, the days stay blank
0.20.0 2026-10-11 Your Handler's profile: your AI Handler posts to a fediverse account of its own โ€” pride, exposure, photos you tick, your own words โ€” each post a draft you approve unless you hand that over too
0.21.0 2026-10-13 Hygiene from the room: !hygiene and !relocked in the chat bot's room, behind their own switch, and the bot asks "locked back up?" when a window runs out; ๐Ÿ› Long soak, a Mischief mark for a window run past its time
0.21.1 2026-10-18 ai.keep_alive_minutes (blank = the cycle plus 10 โ€” a warm model between cycles) and a reply schema with one branch per action type, its keys and ranges, so an empty-shell action is ungrammatical
0.22.0 2026-10-19 Today's mantra, voiced: a 3โ€“5 minute wake and bed track rendered overnight by a local voice (latch-voice, opt-in), the voice chosen by ear; played to the end counts as recited; the bot can post the wake one
0.23.0 2026-10-21 Kennel Card: your pup homepage โ€” a Tag, your links, a Toy box and a Wishlist โ€” shown through views (one random link each, each its own ticks) and built as a static site you host anywhere; the box never serves it

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

M6 ยท Playsets

โœ… Shipped in 0.12.0: Playsets and events. What remains on the milestone: audio tracks in a playset (spec 2, with the player and the duty-of-care questions), signing (waits on M7), a public catalogue with a page on the site, and art from the badge forge for the shipped playsets.

M5 ยท Packs โœ… (the first version shipped in 0.13.0)

Federated Latch: a Handler's box hosting a pack, pups joining it with a collar tag, pack-mates on a board, a Handler asking for what the pup grants โ€” with every capability a grant the pup chooses and can revoke. Shipped: joining, collars, grants with item-by-item whitelists, the board and kudos, Handler commands, countersignatures, leaving, hosting and a den on its own listener โ€” see Packs and the design in Packs โ€” how federated Latch works. The AI kennel โ€” a pack whose Handler is a model on the operator's own Ollama โ€” shipped in 0.13.0 with the rest. Still to come: the Matrix and mesh pipes, pack play, mates cards sealed per mate (today the den relays them and can read them), a host's "close this pack" and a pup's "forget this pack".

M7 ยท Identity โœ… (the Pup ID shipped in 0.13.0)

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. Shipped: the Pup ID itself โ€” the key, sealing, the recovery sheet, papers, pup.json, restoring a bundle and moving boxes โ€” and, with packs, collars and countersignatures. Still to come: handles. See 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.

M10 ยท The game (quests, wagers, rites, witness)

The 2026-10-05 design pass: the lock makes the wanting, the Handler aims it, the log proves it, the pack witnesses it. โœ… Quests shipped in 0.18.0 โ€” a chapter carries a goal. Still to come, each its own issue: wagers (stake clock time on a habit target you wrote), sealed orders (training written now, opened at a time or a tap), strictness that follows rank, a tap event kind and scan surfaces on the den, Handlers as playsets (a persona in a file), rites (ceremonies for first lock, first countersign, a hundred locked days), and pack play. The physical side โ€” a collar tag and a tamper seal for the cage โ€” lives in latch-hardware.

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 unless you grant it, item by item โ€” never to a cloud AI, and of your health data only one yes/no, to your own AI.
  2. The core makes zero outbound calls; a module says when it does not. The core contacts nothing. A module that reaches the network โ€” fetching a calendar feed, posting a card, fetching a playset โ€” declares it, and the app tells you before you enable it: optional, informed, per module. Habits is the first module to do so. 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.