kepr

@june

Modern source forge for Koh repositories

TypeScript

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

214 files
82938843e282
back to HEAD
public/87.0 KB · 1 week ago
scripts/10.1 KB · 1 week ago
src/363.7 KB · 1 week ago
admin/98.3 KB · 1 week ago
bucket/28.7 KB · 1 week ago
describe/15.5 KB · 2 weeks ago
issues/26.7 KB · 1 week ago
mirror/27.1 KB · 1 week ago
pages/79.3 KB · 1 week ago
releases/24.8 KB · 1 week ago
server/53.9 KB · 1 week ago
tarball/7.6 KB · 1 week ago
main.ts1.9 KB · 1 week ago
tasks/1.2 KB · 2 weeks ago
tests/450.0 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 · 1 week agoadmin.test.ts7.4 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 · 1 week agobucket.test.ts10.9 KB · 1 week 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 · 1 week 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 · 1 week agocontract.test.ts14.2 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 · 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 · 1 week 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 · 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.3.9 KB · 1 week agoimport.test.ts15.6 KB · 2 weeks agoinstall.test.ts4.5 KB · 1 week agoissues.test.ts13.7 KB · 1 week agokepr2.test.ts4.2 KB · 2 weeks agokoh-version.txt7 B · 1 week agokohpaths.test.ts3.6 KB · 1 week agokohrelease.test.ts5.1 KB · 1 week agokohremote.test.tsCovers addendum A2 part 2: Koh's own remote layout, served read-only from a public repo's mirror.6.9 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 koh3 steals it — and later, once that machine has signed in, offers its work back to the bucket.15.5 KB · 1 week agokohupdate.test.ts11.0 KB · 1 week 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 · 1 week agopages.test.ts19.7 KB · 1 week agoreleases.test.ts17.3 KB · 1 week agorepotext.test.ts7.9 KB · 1 week 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 · 1 week 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 · 1 week agosync.test.ts15.1 KB · 1 week agotarball.test.ts13.3 KB · 1 week 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 · 1 week 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
a51b3aa79a12end release download links in the stored filename (v3.0.217)1 week ago1bbe304e31capin the tests to koh 3.4.3 (v3.0.216)1 week agoc88aba67e9a5pin the tests to koh 3.4.2 (v3.0.215)1 week ago28a9ce02dab1give each bundle its own statements, so two steals at once no longer split the rows between them (v3.0.214)1 week agoaece163caff1record the bundle route deployment on Tylee (v3.0.213)1 week agoe5acc75f9efaend the bundle with 'end 0' so a cut connection is caught; tests pinned to koh 3.4.1 (v3.0.212)1 week ago7653310330f2pin the tests to koh 3.4.0, which steals through /koh/bundle (v3.0.211)1 week ago111c54322524serve a public repo's whole Koh layout in one streamed /koh/bundle response (v3.0.210)1 week ago49573f256698record the verified operator navigation deployment (v3.0.209)1 week ago3470f48c8b57prevent dense timeline dots flashing before canvas loads (v3.0.208)1 week agobd7e99daf81badd a navbar bell with unread dot and recent notifications (v3.0.207)1 week ago7531ccf13b73make repo selection vertical and expose global hide (v3.0.206)1 week ago2b85afaa7b7frecord the verified declared-version deployment on Tylee (v3.0.205)1 week ago4976de193715use koh throughout fixtures and current project guidance (v3.0.204)1 week ago57c99012f4b4match Koh whitespace and line endings when reading declared versions (v3.0.203)1 week ago65b4734faa48use the current koh command in agent guidance (v3.0.202)1 week ago927addf9de90write the session handoff in continuity: what is live, v3.0.200 awaiting its Codex review, deploy steps, Tylee facts and the queue (v3.0.201)1 week ago766144e8cfd8show a repo's declared version in its header when it has no build, read at land time by Koh's own rule; describe budget 530, ceiling 12,900; Codex review pending, its service unreachable (v3.0.200)1 week ago9148c9819b36give release articles and notes fields their own id prefixes so no id on a repo's one-page console workspace can collide, completing one tab per repo (v3.0.199)1 week ago10e65d3e89e7wip: put each repo's whole console workspace on one page behind one tab per repo, gate green but Codex review, §30 entry and deploy still to do; record the campaign in continuity (v3.0.198)1 week ago9b19186bb949lighten the front end: the timeline's words come from /:repo/timeline after first paint and its canvas rests off screen; the signed-in navbar comes from the cookie with no flash and no /admin fetch; fonts are self-hosted, versioned assets immutable, and pages prefetch on hover (v3.0.197)1 week ago92240bfbe802work out the Atlas's touches and file facts and each repo's known objects as saves land (mirror schema 4), so pages read instead of compute and no Atlas or facts cache, warm-up or synced message remains (v3.0.196)1 week ago45b702df7e26run the sync on its own thread so landings, recounts and migrations never stall a request; console sync, holds, hidden lists and bucket settings go through it; mirror schema checks lock only to migrate, at start; snapshot reads for kept tarballs and the Atlas; bucket budget 1,170, ceiling 12,870 (v3.0.195)1 week ago5b76ba01ba36stop page views waiting on the bucket: list repos with one delimiter listing, read the sync's objects 16 at a time within a byte gate, show the sync's record on /admin and an hourly measurement on /admin/storage; bucket budget 1,010, ceiling 12,710 (v3.0.194)1 week ago0c253117d56capply hidden paths in place by setting rows aside in hidden_files instead of rebuilding from the bucket, hand the list to Koh from the sync with retry, and serve only visible objects on the Koh routes (v3.0.193)1 week ago0a9f3887db51record the measured performance audit of Kepr 3 on Tylee, ranked with causes and directions, in .agent (v3.0.192)1 week ago38fcc30ef93frecord the console rename, Koh 3.2.27 following it and the missing live write key in continuity (v3.0.191)1 week ago79cdb799725crename a repo from the console: copy its keys with head last, leave a marker for Koh, move Kepr's rows and mirror, delete the old keys and redirect old pages; tests pinned to koh3 3.2.27 (v3.0.190)1 week ago9d511388989erecord the on-demand picker and its page sizes in continuity (v3.0.189)1 week agoac9e6999d366load the Atlas picker's saves when it first opens and cut timeline tooltips to 120 characters, taking a big repo's page from 1.5 MB to a fraction (v3.0.188)1 week ago8a3ca16206b1record the Atlas speed results and Cloudflare's email obfuscation errors in continuity (v3.0.187)1 week ago1e6fb78d58b5build each public repo's Atlas after its sync, so the first visitor after a new save gets a warm page (v3.0.186)1 week agodc678fae81fffetch each Atlas panel on demand from /:repo/atlas/panel and keep the computed Atlas per repo and save, so a big repo's page carries rows only (v3.0.185)1 week ago77686535d05drecord renaming koh3 and kepr3 to koh and kepr in the live bucket in continuity (v3.0.184)1 week ago983be8d5af83record the six-character ID failure, the Bun 1.3.14 S3 leak and the move to Bun 1.4.2 in continuity (v3.0.183)1 week ago43081c75fd34accept the six-character save IDs Koh 2's early saves keep through migration, an exact ID winning over a longer one it begins (v3.0.182)1 week ago12218adb0fdfread the bucket through presigned fetches, since Bun's S3File reads keep a copy of every body (v3.0.181)1 week ago9504bcb405d8record the OOM fixes, lowercase names, global ignore and the pending Haven cleanup in continuity (v3.0.180)1 week ago82938843e282store a save's objects ahead of it when one save alone passes a batch, so a first import's huge save fits in memory (v3.0.179)1 week agoa7772f7d8854hide names ignored in every repo, set in the site section, at any depth from pages, stats and tarballs (v3.0.178)1 week agoefd0734feb70count the front page's distinct objects from the objects table, not a DISTINCT over every save's whole tree (v3.0.177)1 week ago0b7b8cbd36f5keep only save IDs while walking a sync and cap a batch at 100 saves, since each record lists its whole tree (v3.0.176)1 week ago72c73018a692land a sync's new history in 32 MB batches oldest first, so a big first sync fits in memory and resumes if cut short (v3.0.175)1 week ago611700826bbfpin the tests to koh3 3.2.26, which lowercases repo names at first offer (v3.0.174)1 week ago0f18e9e415d7record the first five repos migrated and offered to the live bucket in continuity (v3.0.173)1 week agof59a3792d797send the setup page with a same-origin referrer policy so browsers post it with their real origin (v3.0.172)1 week ago819b6f716f84record Kepr 3 running on Tylee in place of Kepr 2 in continuity (v3.0.171)1 week ago798f81d1cc3crecord the phone menu, the viewer's CSS order fix and the stale-asset trap in continuity (v3.0.170)1 week agoc45748e284b7let the file viewer and the description editor take a phone's full width, their phone rules now after the rules they override (v3.0.169)1 week ago318ff45f727afold the navbar links behind a menu button on phones, wrapping them when the script is absent (v3.0.168)1 week ago

← newerolder →

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.