Latch

Hey there, pup.
You look lost.

Come here. Sit. Latch is a lock game you play by yourself, about getting better β€” a Handler that asks after you, a wheel that messes with your clock, training that wants proof, the habits you keep saying you'll keep, and a log that remembers all of it honestly.

Built for pups who are tired of waiting for a handler to show up. You don't need one to be held to something. You need a rule, a voice, some work to do, and a record you can look back at without flinching. You do the thing because you're a good boy β€” and your Handler wants you to be the best boy you can be. A little better every day.

Beta open β€” no install Free forever Open source Self-hosted No account Nothing phones home
The Latch dashboard: a glowing countdown ring reading one day and eleven hours remaining, with cards for the Handler, wheel, training and kit. The same dashboard on a phone.

🐾 No handler? Good.

It's just you, the game, and the work.

Most chastity apps assume there is somebody else holding the key β€” a keyholder to find, to keep interested, to wait on. Latch assumes there isn't, and builds the structure instead. It is self-improvement through play and fantasy: something that notices, that asks you to write and be honest, that wants to see the training, the workout, the stretch, the practice β€” and that keeps score without ever needing another person to log in.

🐢

You always hold the key

Latch never talks to a physical device and never will. The emergency key is one tap, costs you nothing but the clean-unlock XP, and is never hidden, throttled, or shamed. Stopping is the game working.

πŸŽ€

A Handler, not a person

It asks for a reflection every day you're locked, checks in on a cadence, hands you mantras, and notices when you skip. Firm and affirming. Every word it says is yours to rewrite.

🎯

It watches the work you already do

Guitar, yoga, a walk, a stretch β€” log a habit with one tap, run a timer, fire a Shortcut, or point Latch at the calendar your practice app already keeps and let it read the sessions straight out of it. Your Handler judges each one: praise and time off the clock for consistency, a stern word when you slack.

πŸ““

A record you can trust

Append-only. The clock is derived from the log, never stored, so nothing in a browser can quietly change the truth. Undo strikes through; it never deletes. Late is marked late, forever.

🏠

On a box you own

One container, one SQLite file, one media folder. No account, no cloud, no telemetry, no CDN β€” this page included. If this website vanished tomorrow your instance would keep working, guide and all.

The loop

  1. Cage up.Pick a sentence β€” or roll dice for one, or hide it from yourself so you genuinely don't know when it ends.
  2. Live locked.The Handler wants a reflection and periodic check-ins. Training gets assigned, some of it wanting a verification photo. The wheel adds time, takes it away, freezes the clock, or drops a task in your lap.
  3. Do the work, and log it.Training with proof. The habits you're building β€” practice, yoga, a walk β€” with a tap, a timer, or read from your practice app's calendar. Photos, notes, voice memos, mantras, headspace sessions. Finished something on the train? Log it for when it actually happened β€” it'll carry a logged later badge and that's the point.
  4. Time served.Unlock clean for the XP, or use the emergency key. Either way it becomes a record: a recap card, stamped photos, a row in your stats.
  5. Look back.Streaks, a 26-week heatmap, rates per week, headspace over time. Then cage up again, good boy.

πŸ“Έ Have a sniff around

Every screen, nothing staged

These are real screenshots of a real instance β€” running a seeded demo log of about five months of play, so you can see what the charts, the streaks and the badges actually look like once there's something in them. Click any of them to see it properly.

The kennelLive clock, quick adjustments, and the action row.
The HandlerReflection, check-ins, mantras β€” and it noticed you slept badly.
Wheel of FortuneGive up a little control.
ProgressTotals, streaks, heatmap.
TrendsHand-drawn SVG, no library.
InsightOnly what clears the floors.
TrainingDeadlines and proof.
HabitsThe work, watched.
KitGear, toys, consumables.
BadgesThe whole catalogue.
HealthYour body moves the clock.
The logAppend-only, honest.
GalleryEXIF stripped on the way in.
Share cardsFacts travel; prose doesn't.
HeadspaceThe quiet half.
CalendarMonth by month.
The guideShips inside the app.
SettingsAll of it, in one place.
Kit, full pageScroll the whole thing.

…and it's built for a phone

Dashboard
Progress
Handler
Kit
Habits

🐾 Why it's built like this

Getting better is the point

The cage is the least important part. What Latch is really for is transformation, played as a game β€” the pup headspace, the calm that comes from a clear rule, something that notices, and a day with a shape and work in it. The timer gives the day an edge; the Handler gives it a voice; training and habits give it work; the log gives it a memory. Introspection, through play and fantasy.

✍️

You have to write. You have to talk.

Reflection is required, not optional. A paragraph a day, or thirty seconds spoken. Missing it is an event with a cost.

Denial without reflection is just waiting. Writing down where your head went is what turns a locked day into training.

πŸ’ͺ

You have to do the work

A reflection that says I should practise more is a sentence. Forty logged minutes of practice is a fact. The game wants both, and treats them differently: the words are yours and never leave; the minutes are something the Handler can count, chart and praise.

Streaks and levels are there because they feel good and because a heatmap with a hole in it is honest. Winning is a day where you were locked, did the training, practised, wrote the reflection β€” and can read it back a month later and recognise yourself, a little better. Best boy is a rank you reach by showing up, again.

πŸ•―οΈ

Pace is yours

Some weeks are a four-hour lock and a mantra. Some are a week with a hidden timer and the Handler at full strictness. Both are the game.

Consent here is with yourself, and it's renewable. You chose the strict setting; you can change it, and the record will show you did.

Three rules nothing gets to bend

Your data never leaves your box. No cloud AI on any of it, ever. When the Handler becomes a real AI persona it will be a model on your hardware β€” your words stay on your LAN.
The core makes zero outbound calls. Not a font, not a script, not an analytics ping β€” and there's a test in the repository that fails if a served page ever references one. A module that does reach the network has to say so, in one sentence, on its settings page before you turn it on. Today exactly one does: calendar feeds, which fetch the URLs you add and nothing until you add one.
The log stays honest. Append-only, clock derived, undo voids rather than deletes, late is marked late. A feature that needs to edit history doesn't get built.
What leaves, when you make it. A stamped photo, a recap card, an export β€” those go because you tapped a button, and they go re-encoded with location and camera metadata stripped. Your reflections and check-ins are never on a share card and never on the API's event feed. Facts are shareable; prose is yours.

🦴 Where it's at

Young, but real

Latch is being handed to a small number of people to try β€” the beta is open now. It is used daily by the person who writes it, it has a full manual, and it does not eat your data β€” but it is early, it is one person's project, and the roadmap below is a direction rather than a schedule.

v0.23.0 released 21 October 2026 Β· AGPL-3.0-or-later
Tests
2258
Dependencies
7
Phones home
Never
Modules
15
JS frameworks
0
Price
Free

Shipped

New in 0.13: the Pup ID and packs. If words like den, papers or federated make your ears go back, start with Pup ID and packs, explained β€” what they are, when you would want them (a new computer, a Handler far away, a group of friends, an AI kennel), who can see what, and how to set each one up. Both are optional.

Next

Ideas, not promises

Before your first lock. Always have a backup key for any physical lock, within reach, before you start. Pain, numbness, swelling, colour change, or a device that has shifted β€” it comes off. No timer is worth an injury; the app cannot see your body and you can. Latch is not medical advice and nothing in it should override a doctor.

πŸ§ͺ The beta

Play it without installing anything

There is a copy of Latch running at play.latch.aurionblack.com that I host. You get your own profile on it β€” your own clock, Handler, wheel, training, log β€” and you play in a browser, on your phone or your laptop, with nothing to download. It is invite-only, and I am looking for a handful of serious pups to try it with.

πŸ•

"Serious" means

You'll actually play it for a stretch β€” lock, reflect, spin, do the training β€” and you'll jump through my hoops when I ask you to try something specific. Then you'll tell me what confused you, what broke, and what you loved, in enough detail that I can act on it. That's the whole job. Kink experience optional; constructive feedback not.

βœ‰οΈ

How to get in

Message me on Matrix, or on Bluesky or PupSpace β€” wherever you already found me. Tell me a little about why you want in. If it's a fit, I send you a one-time invite code and you make your profile at play.latch.aurionblack.com/register.

@lockedtrainee:matrix.aurionblack.com
πŸ—£οΈ

Where feedback goes

Three short surveys and a quick-note box live inside the app, on its Feedback page β€” how it feels, what you do, what you'd change. Bugs and ideas go on Forgejo (the templates say exactly what to include) or in the pack room. Please don't DM bugs β€” the next pup can't learn from a DM. The whole deal, including what makes a bug report or an idea actionable, is in the beta tester handbook.

#latch:matrix.aurionblack.com
Read this before you sign up. It's the honest version. The beta instance runs on my hardware, and I can see whatever you put on it β€” reflections, check-ins, photos, voice memos, all of it. It is a test, so treat it as a playground, not a diary: don't upload anything you would not hand to me in person. Nothing on it is backed up, and every profile and everything in it will be destroyed when the trial ends. How long the trial runs is not decided yet; it will become clear once feedback starts coming in, and you'll get warning before the wipe so you can export your data from Account if you want it. If any of that isn't okay with you, that's a perfectly good answer β€” the self-hosted version below is the one where nobody but you can see anything, and it always will be.
What's different on the hosted copy. The JSON API and the health sync are off (they're single-player features), calendar feeds have to live on the public internet (no pointing my server at your NAS), and you pick your own timezone at sign-up so your days and streaks roll over on your clock. Everything else β€” the emergency key included β€” works exactly as it does on your own install. 18+ only, same as everywhere else here.

🏠 Take me home

Get it running

Not in the beta, or want the version where nobody but you can see anything? Latch runs as one container on anything that has Docker β€” a spare laptop, a NAS, the box in the closet. It takes about two minutes. There is nothing to sign up for and nothing to pay. This is the real privacy story; the hosted beta is a convenience.

The quick way

# grab the source, then:
docker compose up -d --build

# it's now at http://localhost:8770 β€” that's it.

Your play data lives in a Docker volume called latch_data, not in the folder, so you can update or reinstall without losing anything.

πŸ“¦

Source

The whole app. Run it with Docker, or with the included setup wizard if you'd rather click through it. This is the one most people want β€” or clone it from Forgejo.

latch-0.23.0 Β· tar.gz Download source
🧩

Setup wizard

A dependency-free installer with Windows-98 chrome and a pup aesthetic. Checks Docker, writes your config, builds, starts, and opens Latch for you.

macOS Β· Intel & Apple Silicon Β· unsigned Download for macOS
πŸ“–

The manual

Every page of it, right here β€” your first lock, every module, habits and calendar feeds, the privacy model, the Pup ID and packs, rewriting every word the Handler says, and getting your data back out. Read it before you install anything.

the same guide your instance serves Read the guide
On the installers: the wizard is macOS only for now β€” a universal build, so it runs on both Intel and Apple Silicon. It's unsigned, so the first launch is right-click β†’ Open rather than a double-click. If you already have Python 3 (macOS and Linux both ship it) you don't need it at all β€” ./setup.sh in the source is the whole installer on any platform. Windows and the ISO are on the way, and this is exactly the kind of thing the beta is for: if the install path is what's stopping you, say so.
The guide ships inside the app. Your own instance renders it at /guide from the markdown in docs/, so it is always the manual for the version you are running and it works with the internet unplugged. The same pages are here if you want to read them first.

🎁 Playsets

Content you drop in. Events you sign up for. The whole page β†’

A playset is one file β€” training, lines for the Handler, wheel segments, habits, a trance score, badges β€” made by someone else, installed on the Playsets page, removed with one tap. It is data: nothing in it runs, nothing in it can touch your clock or read what you wrote, and the app never fetches one on its own. An event is a playset with a calendar: a sign in your header, the Handler in a new voice, training on the day, and badges you can only earn inside the window.

πŸŽƒ

Locktober 2026

Thirty-one days. One cage. Your Handler is watching, and so is the moon. Thirty-one days, first to last of October. The Handler's mantras, affirmations and questions become October's; a piece of training lands on nineteen of the days; six pumpkin segments join the wheel; a darker trance score called Hollow; nine badges β€” and the two that say you did the whole month are decided on the first of November, not a minute before. 18+. Join it from the dashboard once it's installed; leave whenever you like, what you earned stays.

locktober-2026 Β· 1.1.0 Β· CC-BY-SA-4.0 Β· sha256 b769896a1e53… Download Locktober
πŸ“₯

Installing one

Needs Latch 0.12 or newer. Open Playsets in the top bar, choose the file, press Install. It is checked first: an unknown key, a bad rule or a file it may not carry is refused with the reason, and nothing is written. Switch it off to hide everything it added; remove it to take it all back β€” badges you earned stay.

nothing is downloaded by the app β€” you bring the file The playsets page
✍️

Make your own

One TOML file, a README, and PNGs for the badges if you have them. The format, the badge menu and the rules are in the guide, and the same validator the installer runs is on the command line so you see the exact refusal before anyone else does. The catalogue is a public repository: a pull request or an issue with the zip gets you listed, and people who make playsets get badges for it.

python -m latch.playsets check my-playset.zip How to make and submit one
What a playset is not. It is not a plugin. A module β€” code β€” is something you install by hand with your eyes on it. A playset can only ever add rows to tables that already exist, and the app refuses anything that says otherwise. That is what makes it safe to install one written by a stranger, and what makes sharing yours cheap.

πŸ’¬ Come say hi

Tell me it's broken

Latch is one person's project and it is early. A good bug report or a clear suggestion is genuinely the most useful thing you can give it β€” more than a star, more than a thank you. Come find me on Matrix β€” or on Bluesky or PupSpace, if that's where you know me from. To ask for a beta invite, the same places; see the beta for what I'm asking of testers.

🐾

The pack room

Open room for anyone playing Latch β€” questions, setup help, feature arguments, showing off a streak.

#latch:matrix.aurionblack.com
βœ‰οΈ

Me, directly

For anything you'd rather not say in a room. I'm the person who writes it.

@lockedtrainee:matrix.aurionblack.com
πŸ—ƒοΈ

The code

All of it. Browse it, clone it, read every line that touches your data β€” or file an issue when it misbehaves. AGPL-3.0-or-later, Β© Lockedtrainee.

forge.boyslop.dev/lockedtrainee/latch sign-up is open Β· accounts activated by hand
Never attach an export to a bug report. latch.json, the CSVs and the bundle are your whole journal in plaintext. No bug needs them β€” if I need data I'll ask for one specific row. Same for your API token and anything from .env. A screenshot is fine, after you've looked at what's in it.