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.
πΎ No handler? Good.
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.
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.
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.
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.
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.
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.
πΈ Have a sniff around
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.
πΎ Why it's built like this
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.
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.
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.
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.
𦴠Where it's at
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.
!ask β the same
conversation as the app, seeing what you chose to let it see, behind a switch that starts
off. Plus challenges: proof asked for at a moment you did not choose, a word and a number
in frame within ten minutes. And the calendar opens a day.
!ask β
Challenges β!hygiene and !relocked,
behind its own switch that starts off. A window run long past its time earns a new Mischief
mark, the long soak. In 0.21.1, a Handler that stays warm between turns and can no longer
write an empty order. From the room βπ§ͺ The beta
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.
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.
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.comThree 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π Take me home
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.
# 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.
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.
Download sourceA dependency-free installer with Windows-98 chrome and a pup aesthetic. Checks Docker, writes your config, builds, starts, and opens Latch for you.
Download for macOSEvery 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.
Read the guide./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.
/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
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.
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.
Download LocktoberNeeds 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.
The playsets pageOne 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.
How to make and submit one㪠Come say hi
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.
Open room for anyone playing Latch β questions, setup help, feature arguments, showing off a streak.
#latch:matrix.aurionblack.comFor anything you'd rather not say in a room. I'm the person who writes it.
@lockedtrainee:matrix.aurionblack.comAll 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
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.