Kepr
Source hosting platform that makes auditing Koh repositories easy.
Kepr is a self-hosted home for your Koh repositories. It gives every Koh project a persistent presence on a machine you own — a rolling snapshot history, a release pipeline, and the ability to serve binaries and web assets to the world.
How it works
Kepr runs as a small daemon on a single instance. That instance is the source of truth: visibility, build metadata, and storage policies are all managed here. You connect with koh login, then use Koh’s normal workflow — koh offer pushes saves to Kepr, koh steal pulls them back. Private repos stay invisible to the public; public repos are browsable by anyone.
Core workflow
Offer a face. koh offer creates a save in the local Koh repository, hashes its contents, then sends only the objects Kepr doesn’t already have. The two-phase protocol ensures you never ship data you’ve already stored.
Recover any save. If the machine dies or the disk fails, point another Koh instance at your Kepr instance and run koh steal. You get back a fully working repository — all objects and manifests, exactly as they were.
Build releases. Drop a kepr.build file in your repo root. With koh offer --builds, Kepr cross-compiles your project on your own hardware and uploads the binaries with provenance metadata. The operator curates what gets published; nothing is uploaded without approval.
Private and public
Visibility is per-repo. Flip a repo from private to public with koh offer --public or koh visibility. Private repos are truly private: they’re unlisted, unconfirmable, and invisible to anyone without read access. Public repos let anyone browse snapshots, steal source, or download releases.
Safety and trust
Kepr runs an automated safety analysis on every incoming offer: binary blob detection, script inspection, trojan-source checks, and license compatibility. Clean repos show a simple confirmation; real issues are reported in plain language. There are no badges, no marketing — just a transparent record of what Kepr has seen.
Recovery and storage
Every save is a JSON manifest on disk. The SQLite database is a derived index — kepr recover rebuilds it entirely from the manifests. Nothing is lost unless its manifest is gone. Files under 512 bytes are inlined in the manifest; larger files are stored as zlib-compressed blobs keyed by Blake3 hash. This means deduplication is automatic and exact: unchanged files between saves exist once on disk, and their invariants are mathematically guaranteed.
Getting started
-
Install Kepr on a machine you control. Run the installer script or pull the Nix package:
curl -fsSL kepr.uk/install.sh | sh -
Initialize with
kepr init. This prompts for your domain, data directory, SSH ports, and your first operator key. It also generates a recovery phrase — save it. -
Start the daemon with
kepr start, then visit your domain to confirm. -
Log in from Koh:
koh login kepr.local. This registers your machine’s SSH key. Later machines can join withkoh logintoo. -
Offer your first save:
koh offer. Kepr now holds a rolling history of your work. -
Optionally enable builds: create an empty
kepr.buildat your repo root and runkoh offer --builds. Kepr will compile and publish your releases.
Operator commands
| Command | What it does |
|---|---|
kepr init | Guided first-time setup — domain, SSH ports, operator key, recovery phrase |
kepr start / stop / restart | Daemon lifecycle |
kepr recover | Rebuild the database from disk manifests |
kepr backup / restore | Full instance snapshot; restorable on any machine |
kepr image | Produce a portable image containing data, config, and the exact binary |
kepr storage verify | Rehash every object and report disk usage |
kepr storage trend | Projected disk usage over the next 30 days |
Features
Continuous safety record. Every repo maintains a transparent log of what Kepr has observed on each offer. Binary blobs, unsafe scripts, and license conflicts are flagged immediately. No badges, no marketing — just plain language reports that you can read and act on.
Traffic, privately. Owners can see per-repo counts of steals, archive downloads, and release downloads. By design these are fully anonymous: no IP addresses, no per-visitor tracking, just tallies.
Themeable UI. The operator sets brand colours in the admin panel; the whole site re-themes live without rebuilding.
Releases and binaries. Cross-compiled builds live on your own hardware. Kepr never compiles for you — it only stores and serves the binaries you approve, with provenance metadata and checksums.
Contributions. Set contributions.accept_offers = true to let other users push saves to your repo. Incoming offers land in quarantine pending review; accept to merge, decline to discard. Each offer carries an automated trust assessment.
Accounts and recovery. One account, many machine keys. Lose every device? kepr recover plus your recovery phrase and an email confirmation re-enrols a new key — your work continues.