kepr
Modern source forge for Koh repositories
timeline
atlas209 files
public/
scripts/
src/
admin/
describe/
mirror/
pages/
a and b are its 0-based line numbers in the old and new text.docs.tsfiles.tsfront.tshighlight.tshousekeeping.tshtml.tsMarkup that is already safe: built by html, or rendered by markdown-it with raw HTML off.kepr2.tslayout.tslibrary.tsmarkdown.tsprofile.tsreleases.tsrepo.tssave.tstimeline.tsreleases/
server/
tarball/
tests/
fixtures/
kepr2/
.kepr/hidden/, and back on unhide.import.test.tsinstall.test.tsissues.test.tskepr2.test.tskoh-version.txtkohpaths.test.tskohrelease.test.tskohremote.test.tsCovers addendum A2 part 2: Koh's own remote layout, served read-only from a public repo's mirror.kohsteal.test.tsThe joint public-steal contract (addendum A2, item 8d): one machine publishes a repo to a bucket, Kepr serves it read-only over HTTP in Koh's own layout, a second koh3 steals it — and later, once that machine has signed in, offers its work back to the bucket.kohupdate.test.tslinks.test.tsnavbar.test.tsnotifications.test.tsCovers §24's in-app notifications: what raises one, unread state, opening, mark all read, switching kinds off, and keeping the newest 200.pages.test.tsreleases.test.tsrepotext.test.tsrepoworkspace.test.tsCovers §24's selected-repo workspace: the summary, detected and shown languages, where the description comes from, and the repo's releases.server.test.tssetup.test.tsCovers first-run setup (June, 2026-09-30): with no kepr.toml, Kepr serves only /setup, which takes the one-time code printed in the terminal, then the password, domain and bucket, writes kepr.toml itself, and hands over to the real app.sync.test.tstarball.test.tstimeout.tstriage.test.tsCovers §23–§24's triage: tab counts, awaiting reply, repo/type/word filters, hiding one follow-up, and pausing new issues per repo.history
details
Kepr
Kepr is a self-hosted website for your Koh projects. It reads your Koh remote and lets people browse the code and history you choose to publish. You run it on your own domain, with your own storage, and keep working in Koh from the terminal.
Visitors can read highlighted source, see file descriptions, and inspect diffs at any save. They can download source archives or published releases, with checksums and update feeds available for releases. Bug reports and questions don't require a visitor account.
Each instance has one operator. Repositories start private; you choose which ones appear on the site. Kepr is built with TypeScript, Bun, Hono, and SQLite.
See Kepr in use · Self-hosting guide
Set up an instance
You'll need Bun and a Koh 3 remote. You can use an S3-compatible bucket or try Kepr locally with a folder remote. A public instance needs a domain and an HTTPS reverse proxy.
bun install --production
bun run start
On the first run, open /setup on your instance (http://localhost:3000/setup
locally). The terminal prints a setup code. Enter it in the browser and set your
password, domain, and storage connection. Kepr saves the configuration and
starts syncing from your remote.
Sign in to select the projects you want to make public.