kepr

@june

Modern source forge for Koh repositories

TypeScript

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

213 files
0f18e9e415d7
back to HEAD
public/87.0 KB · 1 week ago
scripts/10.1 KB · 2 weeks ago
src/358.4 KB · 1 week ago
admin/96.8 KB · 1 week ago
bucket/26.3 KB · 2 weeks ago
describe/15.5 KB · 2 weeks ago
issues/26.7 KB · 2 weeks ago
mirror/26.1 KB · 2 weeks ago
pages/79.3 KB · 2 weeks ago
releases/24.8 KB · 2 weeks ago
server/53.5 KB · 2 weeks ago
tarball/7.6 KB · 2 weeks ago
main.ts1.9 KB · 2 weeks ago
tasks/1.2 KB · 2 weeks ago
tests/443.9 KB · 1 week 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.4.2 KB · 2 weeks agoadmin.test.ts7.4 KB · 2 weeks agobackup.test.ts6.4 KB · 2 weeks 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 · 2 weeks 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 · 2 weeks agobrowser.ts3.1 KB · 2 weeks agobucket.test.ts10.9 KB · 2 weeks 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.9.1 KB · 2 weeks agoconfig.test.ts2.9 KB · 2 weeks agoconnect.test.tsCovers connect setup, validation, one-time redemption, rate limits, admin history, and secrecy.15.9 KB · 2 weeks agoconsole.test.ts27.2 KB · 2 weeks agocontract.test.ts14.2 KB · 2 weeks 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 · 2 weeks 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 · 2 weeks agofake-s3.tsA bucket in memory, served over HTTP for the joint public-steal test: koh3's own S3 backend and Bun's S3Client both talk to it, so Kepr and the two koh3 machines share one bucket.2.4 KB · 2 weeks agofixture.ts8.7 KB · 2 weeks agofront.test.ts10.6 KB · 2 weeks 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.5.0 KB · 2 weeks agoimport.test.ts15.6 KB · 2 weeks agoinstall.test.ts4.5 KB · 2 weeks agoissues.test.ts13.7 KB · 2 weeks agokepr2.test.ts4.2 KB · 2 weeks agokoh-version.txt7 B · 2 weeks agokohpaths.test.ts3.6 KB · 2 weeks agokohrelease.test.ts5.1 KB · 2 weeks agokohremote.test.tsCovers addendum A2 part 2: Koh's own remote layout, served read-only from a public repo's mirror.6.9 KB · 2 weeks 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 koh3 steals it — and later, once that machine has signed in, offers its work back to the bucket.15.5 KB · 2 weeks agokohupdate.test.ts11.0 KB · 2 weeks agolinks.test.ts2.8 KB · 2 weeks agonavbar.test.ts1.7 KB · 2 weeks 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.5.1 KB · 2 weeks agopages.test.ts19.7 KB · 2 weeks agoreleases.test.ts17.3 KB · 2 weeks agorepotext.test.ts7.9 KB · 2 weeks agorepoworkspace.test.tsCovers §24's selected-repo workspace: the summary, detected and shown languages, where the description comes from, and the repo's releases.8.8 KB · 2 weeks agoserver.test.ts2.3 KB · 2 weeks 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.1 KB · 2 weeks agosync.test.ts13.0 KB · 2 weeks agotarball.test.ts13.3 KB · 2 weeks agotimeout.ts359 B · 2 weeks agotriage.test.tsCovers §23–§24's triage: tab counts, awaiting reply, repo/type/word filters, hiding one follow-up, and pausing new issues per repo.8.1 KB · 2 weeks ago
biome.json361 B · 2 weeks agobun.lock20.8 KB · 2 weeks 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 · 2 weeks agopackage.json526 B · 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.