Latch

Project

Free and open source

Latch is free to use and its source is open. What that means here, what it is built on, and the licence it ships under.

On this page

Latch is free to use and its source is open. There is no paid tier, no hosted version, no telemetry, no account, and no plan for any of those. You run it, you own it, you can read every line of what it does with your data.

What "open source" means here

The licence

Latch is AGPL-3.0-or-later. The full text is in LICENSE; copyright is held by Lockedtrainee, the maintainer.

AGPL keeps every derivative โ€” including one somebody hosts as a service โ€” open, which is the property that matters most for an app whose whole argument is that you can see what it does with your data. A permissive licence (MIT/Apache-2.0) would have allowed closed forks; that is the one outcome worth guarding against here, so it was ruled out. Selling merch, art, hardware or curated content is untouched by the choice โ€” the AGPL governs the code, not what you build around it.

What it is built on

Licence Role
Python 3.12 PSF the language
FastAPI + Starlette + Uvicorn MIT / BSD the web layer
SQLite public domain the database, in WAL mode
Jinja2 BSD templates
Pillow MIT-CMU stamped photos, thumbnails, recap cards
Python-Markdown BSD this guide
python-multipart Apache-2.0 uploads

That is the complete dependency list. There is no JavaScript dependency: the wheel, the timer, the recorder and the search are a few hundred lines of plain JS in app/latch/web/static/.

Credit where it is due

The game's shape borrows openly from chastity-keyholding apps such as chaster.app โ€” timer, wheel, tasks, verification โ€” reimagined for solo play, pup headspace, and a box you own. The habit-tracker feel (streaks, heatmap, XP) is the common language of a dozen apps. None of their code is here.

The name

Latch is the code name and the public project name. The display name is yours to change (LATCH_APP_NAME). The project is maintained under the pseudonym Lockedtrainee; that is the author line in the licence, the badge issuer identity, and the handle to reach for feedback.

No strings

There is nothing to buy, subscribe to, or sign up for, and there never will be a version that needs a server we run. If you want to give something back, the useful things are a good bug report, a clear suggestion, a module, or a page in this guide.


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.