project live

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

  1. Install Kepr on a machine you control. Run the installer script or pull the Nix package:

    curl -fsSL kepr.uk/install.sh | sh
  2. 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.

  3. Start the daemon with kepr start, then visit your domain to confirm.

  4. Log in from Koh: koh login kepr.local. This registers your machine’s SSH key. Later machines can join with koh login too.

  5. Offer your first save: koh offer. Kepr now holds a rolling history of your work.

  6. Optionally enable builds: create an empty kepr.build at your repo root and run koh offer --builds. Kepr will compile and publish your releases.

Operator commands

CommandWhat it does
kepr initGuided first-time setup — domain, SSH ports, operator key, recovery phrase
kepr start / stop / restartDaemon lifecycle
kepr recoverRebuild the database from disk manifests
kepr backup / restoreFull instance snapshot; restorable on any machine
kepr imageProduce a portable image containing data, config, and the exact binary
kepr storage verifyRehash every object and report disk usage
kepr storage trendProjected 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.