kepr

@june

Modern source forge for Koh repositories

TypeScript

v3.2.5 · 270 saves · 17,225 lines · updated 4 days ago

257 files
HEAD
public/381.3 KB · 5 days ago
css/68.5 KB · 5 days ago
fonts/269.0 KB · 1 week ago
js/43.5 KB · 5 days ago
favicon.svg309 B · 5 days ago
scripts/10.2 KB · 4 days ago
src/465.0 KB · 4 days ago
admin/116.9 KB · 4 days ago
bucket/42.8 KB · 4 days ago
describe/20.3 KB · 1 week ago
issues/54.6 KB · 5 days ago
mirror/39.5 KB · 1 week ago
pages/86.1 KB · 5 days ago
releases/24.4 KB · 1 week ago
server/70.3 KB · 4 days ago
tarball/7.8 KB · 6 days ago
main.ts2.2 KB · 1 week ago
tasks/1.2 KB · 1 week ago
tests/515.3 KB · 4 days ago
fixtures/93.2 KB · 2 weeks ago
kepr2/93.2 KB · 2 weeks ago
api_haven_releases_history.body352 B · 2 weeks agoapi_haven_releases_history.headers89 B · 2 weeks agoapi_haven_releases_latest.body908 B · 2 weeks agoapi_haven_releases_latest.headers89 B · 2 weeks agoapi_kepr_releases_history.body2.8 KB · 2 weeks agoapi_kepr_releases_history.headers89 B · 2 weeks agoapi_kepr_releases_latest.body889 B · 2 weeks agoapi_kepr_releases_latest.headers89 B · 2 weeks agoapi_koh_releases_2.1.0_linux-x86_64.headers99 B · 2 weeks agoapi_koh_releases_2.1.0_macos-aarch64.headers99 B · 2 weeks agoapi_koh_releases_2.1.16_linux-x86_64.body51 B · 2 weeks agoapi_koh_releases_2.1.16_linux-x86_64.headers58 B · 2 weeks agoapi_koh_releases_history.body9 B · 2 weeks agoapi_koh_releases_history.headers12 B · 2 weeks agoapi_koh_releases_latest.body2.1 KB · 2 weeks agoapi_koh_releases_latest.headers58 B · 2 weeks agoapi_nina_releases_history.body13.9 KB · 2 weeks agoapi_nina_releases_history.headers89 B · 2 weeks agoapi_nina_releases_latest.body1.8 KB · 2 weeks agoapi_nina_releases_latest.headers89 B · 2 weeks agoapi_nowhere_releases_latest.body53 B · 2 weeks agoapi_nowhere_releases_latest.headers58 B · 2 weeks agoapi_peach-android_releases_history.body27.1 KB · 2 weeks agoapi_peach-android_releases_history.headers89 B · 2 weeks agoapi_peach-android_releases_latest.body1.6 KB · 2 weeks agoapi_peach-android_releases_latest.headers89 B · 2 weeks agoapi_peach-relay_releases_history.body45 B · 2 weeks agoapi_peach-relay_releases_history.headers58 B · 2 weeks agoapi_peach-relay_releases_latest.body45 B · 2 weeks agoapi_peach-relay_releases_latest.headers58 B · 2 weeks agohaven_meta.body334 B · 2 weeks agohaven_meta.headers58 B · 2 weeks agohaven_releases_0.6.1_checksums.txt.body401 B · 2 weeks agohaven_releases_0.6.1_checksums.txt.headers52 B · 2 weeks agohaven_releases_0.6.1_haven-macos-aarch64.headers109 B · 2 weeks agohaven_releases_0.6.1_macos-aarch64.headers109 B · 2 weeks agohaven_releases_latest_version.txt.body5 B · 2 weeks agohaven_releases_latest_version.txt.headers52 B · 2 weeks agohaven_releases_latest.body0 B · 2 weeks agohaven_releases_latest.headers44 B · 2 weeks agohaven_update-info.body378 B · 2 weeks agohaven_update-info.headers58 B · 2 weeks agokepr_meta.body479 B · 2 weeks agokepr_meta.headers58 B · 2 weeks agokepr_releases_2.0.16_checksums.txt.body397 B · 2 weeks agokepr_releases_2.0.16_checksums.txt.headers52 B · 2 weeks agokepr_releases_2.0.16_kepr-linux-aarch64.headers114 B · 2 weeks agokepr_releases_2.0.16_linux-aarch64.headers114 B · 2 weeks agokepr_releases_latest_version.txt.body6 B · 2 weeks agokepr_releases_latest_version.txt.headers52 B · 2 weeks agokepr_releases_latest.body0 B · 2 weeks agokepr_releases_latest.headers44 B · 2 weeks agokepr_update-info.body377 B · 2 weeks agokepr_update-info.headers58 B · 2 weeks agokoh_meta.body491 B · 2 weeks agokoh_meta.headers58 B · 2 weeks agokoh_releases_2.1.0_checksums.txt.body753 B · 2 weeks agokoh_releases_2.1.0_checksums.txt.headers52 B · 2 weeks agokoh_releases_2.1.0_koh-linux-x86_64.headers112 B · 2 weeks agokoh_releases_2.1.0_linux-x86_64.headers112 B · 2 weeks agokoh_releases_latest_version.txt.body5 B · 2 weeks agokoh_releases_latest_version.txt.headers52 B · 2 weeks agokoh_releases_latest.body0 B · 2 weeks agokoh_releases_latest.headers42 B · 2 weeks agokoh_update-info.body678 B · 2 weeks agokoh_update-info.headers58 B · 2 weeks agonina_meta.body415 B · 2 weeks agonina_meta.headers58 B · 2 weeks agonina_releases_3.4.14_checksums.txt.body763 B · 2 weeks agonina_releases_3.4.14_checksums.txt.headers52 B · 2 weeks agonina_releases_3.4.14_linux-aarch64.headers114 B · 2 weeks agonina_releases_3.4.14_nina-linux-aarch64.headers114 B · 2 weeks agonina_releases_latest_version.txt.body6 B · 2 weeks agonina_releases_latest_version.txt.headers52 B · 2 weeks agonina_releases_latest.body0 B · 2 weeks agonina_releases_latest.headers44 B · 2 weeks agonina_update-info.body691 B · 2 weeks agonina_update-info.headers58 B · 2 weeks agopeach-android_meta.body362 B · 2 weeks agopeach-android_meta.headers58 B · 2 weeks agopeach-android_releases_2.17.43_android-arm64.headers135 B · 2 weeks agopeach-android_releases_2.17.43_checksums.txt.body441 B · 2 weeks agopeach-android_releases_2.17.43_checksums.txt.headers52 B · 2 weeks agopeach-android_releases_2.17.43_peach-android-android-arm64.headers135 B · 2 weeks agopeach-android_releases_latest_version.txt.body7 B · 2 weeks agopeach-android_releases_latest_version.txt.headers52 B · 2 weeks agopeach-android_releases_latest.body0 B · 2 weeks agopeach-android_releases_latest.headers54 B · 2 weeks agopeach-android_update-info.body414 B · 2 weeks agopeach-android_update-info.headers58 B · 2 weeks agopeach-relay_meta.body311 B · 2 weeks agopeach-relay_meta.headers58 B · 2 weeks agopeach-relay_update-info.body33 B · 2 weeks agopeach-relay_update-info.headers58 B · 2 weeks agorecord.shRecords Kepr 2's §22.4 compatibility routes from kepr.uk, GET only, into this folder: <slug>.headers (status line plus the headers the contract tests read) and <slug>.body.2.0 KB · 2 weeks agoschema.sql28.4 KB · 2 weeks ago
account.test.tsCovers the console's Account section (June, 2026-09-30): the admin password, other sessions and the domain, all changed without touching kepr.toml by hand, and applied without a restart.7.8 KB · 4 days agoadmin.test.ts8.1 KB · 1 week agobackup.test.ts6.4 KB · 1 week agobackupbucket.test.tsCovers the optional backup bucket (June, 2026-09-30): set, tested and removed in the console, written to kepr.toml by Kepr alone, each backup copied there with the newest 14 kept, and a failure shown and told once until an upload succeeds.6.1 KB · 1 week agobackupworkspace.test.tsCovers §24's backup workspace: every kept backup listed and downloadable, back up now, the last failure until a backup succeeds, and the written restore steps.3.4 KB · 1 week agobrowser.ts3.1 KB · 5 days agobucket.test.ts12.3 KB · 4 days agobucketadmin.test.tsCovers §24's Bucket section: masked secrets, the connection test, and a save that rewrites kepr.toml and applies the new settings without a restart.8.3 KB · 6 days agoconfig.test.ts2.5 KB · 6 days agoconnect.test.tsCovers connect setup, validation, one-time redemption, rate limits, admin history, and secrecy.15.0 KB · 6 days agoconsole.test.ts28.5 KB · 5 days agocontract.test.ts14.4 KB · 1 week agodescribe.test.ts9.8 KB · 2 weeks agodiff.test.ts2.9 KB · 2 weeks agodownloads.test.tsCovers §24's Downloads section: counts per UTC day, the last 30 days per repo or across all, each repo's totals, the most downloaded files, and dropping days older than 400.2.9 KB · 1 week agoemail.test.tsCovers §24's Email section: SMTP settings in kepr.toml, the test send, emailed notifications and the delivery queue's retries, retry now and discard.9.9 KB · 1 week agofake-s3.tsA bucket in memory, served over HTTP for the joint public-steal test: koh's own S3 backend and Bun's S3Client both talk to it, so Kepr and the two koh machines share one bucket.2.9 KB · 1 week agofixture.ts8.8 KB · 4 days agofollow.test.tsCovers §23's email updates: confirming before anything is sent, who is told what, stopping by link or one-click, and nothing offered without SMTP.11.2 KB · 5 days agofront.test.ts12.2 KB · 5 days agohidden.test.tsCovers per-repo hidden paths (June, 2026-09-30): gone from every page, the stats and new tarballs, kept hidden through later syncs, handed to Koh under .kepr/hidden/, and back on unhide.6.6 KB · 1 week agoignored.test.tsCovers names ignored in every repo (June, 2026-10-01): a file or folder with that exact name, at any depth, is gone from every repo at once, stays gone in later saves, and comes back when the name is taken off the list.4.1 KB · 1 week agoimport.test.ts15.5 KB · 5 days agoinstall.test.ts4.5 KB · 1 week agoissues.test.ts18.6 KB · 5 days agokepr2.test.ts4.2 KB · 2 weeks agokoh-version.txt6 B · 5 days agokohpaths.test.ts3.6 KB · 1 week agokohrelease.test.ts7.2 KB · 1 week agokohremote.test.tsCovers addendum A2 part 2: Koh's own remote layout, served read-only from a public repo's mirror.8.5 KB · 1 week agokohsteal.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 koh steals it — and later, once that machine has signed in, offers its work back to the bucket.15.4 KB · 6 days agokohupdate.test.ts11.0 KB · 1 week agolinks.test.ts2.8 KB · 2 weeks agonavbar.test.tsCovers the signed-in navbar (nav.js): "admin" and "log out" in place of "log in", built from the readable mark signing in sets beside the session.3.1 KB · 1 week agonotifications.test.tsCovers §24's in-app notifications: what raises one, unread state, opening, mark all read, switching kinds off, and keeping the newest 200.6.1 KB · 5 days agopages.test.ts23.8 KB · 5 days agoreleases.test.ts17.7 KB · 5 days agorename.test.tsCovers renaming a repo from the console (June, 2026-10-01): the history moves to the new name in the bucket with a marker left behind, Kepr's own rows and counts move with it, old page URLs redirect, and Koh follows the marker on its next offer.3.4 KB · 1 week agorepodelete.test.tsCovers deleting a repo from the console (§24): the double confirmation, every key of that repo gone from the bucket with no other repo touched, and Kepr's own rows and mirror dropped with it.4.9 KB · 4 days agorepotext.test.ts8.6 KB · 6 days agorepoworkspace.test.tsCovers §24's selected-repo workspace: the summary, detected and shown languages, where the description comes from, and the repo's releases.9.3 KB · 1 week agoscript.test.tsCovers kepr.js's start: every island it calls is defined, so one missing name can't stop the rest of the page's scripts.615 B · 1 week agoserver.test.ts3.3 KB · 5 days agosetup.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.4.2 KB · 1 week agostorage.test.tsCovers §24's Storage section: sizes by repo and kind, kept tarballs with a delete each, and orphan cleanup that touches only Kepr's own files.3.9 KB · 1 week agosync.test.ts22.7 KB · 1 week agotarball.test.ts13.3 KB · 1 week agotimeout.ts358 B · 1 week agototp.test.tsCovers §24's two-step sign-in: RFC 6238 itself, the step either side of now, and what is refused.2.4 KB · 5 days agotriage.test.tsCovers §23–§24's triage: tab counts, awaiting reply, repo/type/word filters, hiding one reply, and pausing new issues per repo.8.1 KB · 5 days agoversion.test.tsCovers the version a repo's header shows without a build: what the project declares, by Koh's own rule (Koh 3's src/build/version.v), and a build's version over it.4.7 KB · 5 days agoworker.test.tsCovers the sync on its own thread (2026-10-02): a real worker syncs a koh-made bucket, holds syncs off while the app works, and applies hidden lists.3.1 KB · 1 week ago
biome.json361 B · 2 weeks agobun.lock20.8 KB · 1 week agobunfig.toml40 B · 2 weeks agokepr.example.tomlCopy to kepr.toml (never saved: it holds the admin password hash and the bucket key).851 B · 1 week agopackage.json524 B · 4 days agoREADME.mdKepr is a self-hosted website for your Koh projects.1.3 KB · 1 week agotsconfig.json441 B · 2 weeks ago
a16dea674709read release records into the mirror when head or releases/latest moves, and keep hidden releases, notes overrides and download and install counts in kepr.db (v3.0.20)2 weeks ago06b0512cf8aerecord kepr 2's release and compatibility routes from kepr.uk as contract fixtures, with the GET-only script that re-records them (v3.0.19)2 weeks agoc2ced00ce4c7show a change to a file's final newline as a changed last line with the no-newline marker, and record the phase 3 review fixes in continuity (v3.0.18)2 weeks ago56d982f71079key cached tarballs by the mirror's strip count so a strip never serves stale bytes even without cleanup, and write every file 0644 as kepr 2 does (v3.0.17)2 weeks agobf8f698c551badd the archives panel with HEAD and recent tarballs and nix profile add lines for flakes, drop stray test mirror files, and record phase 3 in continuity (v3.0.16)2 weeks agoaf1f70ffc57aadd deterministic source tarballs byte-identical to kepr 2's tar, cached on disk and dropped by strip events, with the HEAD redirect and its immutable link (v3.0.15)2 weeks agodec9767f3870add the save page: facts, flag reason, parent past checkpoints, files changed with line stats and highlighted unified diffs from a small Myers diff (v3.0.14)2 weeks agoa6176ba16fafgive Atlas folder panels the full history facts and make the island ignore malformed remembered folders (v3.0.13)2 weeks ago08451dd8bbb6take license headers only in their real shapes, find the README intro as the Atlas finds a first paragraph, and pin real-source headers in tests (v3.0.12)2 weeks agoffa764f54431add the Atlas browser island: hover panel, filename filter and remembered open folders, with phase 2 recorded in continuity (v3.0.11)2 weeks ago5e4eb28dcc4aadd the Atlas to the repo page: folder tree with described rows, per-file history panels and ?at= views at any save (v3.0.10)2 weeks ago532072a50935add descriptions from comments per §21.5, with license-header and shebang skips and first-sentence one-liners (v3.0.9)2 weeks ago9b2c795e05c6treat large invalid utf-8 files as binary, check event kinds against their fields, and refuse unknown mirror schema versions (v3.0.8)2 weeks agode50af6ed620add the public repo page, file viewer and raw files behind the visibility gate, with the svg timeline, shiki highlighting and kepr 2's look (v3.0.7)2 weeks agoaab0488febf0add kepr.db, the per-repo koh 3 mirror with its queries, and the two-minute sync loop that applies strip events and records the last sync (v3.0.6)2 weeks ago1972104e46afvalidate paths, ids and fields of bucket save records before use (v3.0.5)2 weeks ago3f94f3d4aeadadd agents guide, continuity and visual reference for kepr 3 (v3.0.4)2 weeks ago80ceee69d14aadd security headers, the 64 KB body cap, the budget check and the route-list test (v3.0.3)2 weeks ago62097d82837dadd the read-only bucket reader with the koh-remote format check, verified objects and a koh3-built fixture (v3.0.2)2 weeks agod9c345d0eac2scaffold kepr 3 on bun with strict typescript, biome and validated kepr.toml loading (v3.0.1)2 weeks ago

← newer

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.