kepr

@june

Modern source forge for Koh repositories

TypeScript

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

193 files
55425ebd763c
back to HEAD
public/82.3 KB · 2 weeks ago
scripts/10.1 KB · 2 weeks ago
src/262.5 KB · 2 weeks ago
admin/37.0 KB · 2 weeks ago
bucket/23.3 KB · 2 weeks ago
describe/15.5 KB · 2 weeks ago
issues/22.0 KB · 2 weeks ago
mirror/23.8 KB · 2 weeks ago
pages/79.4 KB · 2 weeks ago
releases/19.1 KB · 2 weeks ago
server/34.5 KB · 2 weeks ago
tarball/7.0 KB · 2 weeks ago
main.ts940 B · 2 weeks ago
tasks/1.2 KB · 2 weeks ago
tests/364.1 KB · 2 weeks 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
admin.test.ts6.6 KB · 2 weeks agobackup.test.ts6.4 KB · 2 weeks agobrowser.ts3.1 KB · 2 weeks agobucket.test.ts10.4 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.ts20.5 KB · 2 weeks agocontract.test.ts14.2 KB · 2 weeks agodescribe.test.ts9.8 KB · 2 weeks agodiff.test.ts2.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.7 KB · 2 weeks agoimport.test.ts15.6 KB · 2 weeks agoinstall.test.ts4.6 KB · 2 weeks agoissues.test.ts12.8 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.7.0 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 agopages.test.ts19.8 KB · 2 weeks agoreleases.test.ts17.4 KB · 2 weeks agorepotext.test.ts7.2 KB · 2 weeks agoserver.test.ts2.3 KB · 2 weeks agosync.test.ts13.0 KB · 2 weeks agotarball.test.ts12.4 KB · 2 weeks agotimeout.ts359 B · 2 weeks ago
biome.json361 B · 2 weeks agobun.lock20.6 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).775 B · 2 weeks agopackage.json498 B · 2 weeks agotsconfig.json441 B · 2 weeks ago
8c1ff73fd409show protected log out in the signed-in navbar (v3.0.117)2 weeks ago7120956a7fa3give the docs page a section sidebar and rewrite it into eight short sections (v3.0.116)2 weeks ago97a0a7672807pin koh3 3.2.25 (v3.0.115)2 weeks agoe2a194a044a9add an expand all and collapse all button to the Atlas bar (v3.0.114)2 weeks ago5d7a600d9f51keep Kepr's uploads in its own .kepr/ folder of the bucket, written only there with the write key and served by presigned link or with Range (v3.0.113)2 weeks agoa9143c7181f1draw timeline dots at Kepr 2's radius of 5 (v3.0.112)2 weeks agof12f0453ceaecap the inline archives and builds at about five entries in a scrolling box (v3.0.111)2 weeks ago10a0fccd0ed8make the support page the operator's own Markdown, edited and switched off in the console, and give the report form a cancel link (v3.0.110)2 weeks ago1d43f75aee52draw the HEAD picker above the sections after the Atlas, and label its box search (v3.0.109)2 weeks ago4030bdcacda1edit a repo's description and details on its page when signed in: Markdown toolbar, live preview, picture, GIF and video uploads sized and placed from the caret, served privately with Range; log in returns to the page (v3.0.108)2 weeks ago386cd633d244name the release in the stylesheet and script URLs so a new release is never shown with an hour-old cached copy (v3.0.107)2 weeks ago88502325cbf4bring Kepr 2's repo map to the Atlas panel: each file's exports, project imports, users and tests, a folder's users, found by syntax per language and linked to jump through the tree (v3.0.106)2 weeks agod5eaa7c0b5e5keep the logo's outer triangle gold and flash the inner one red now and then (v3.0.105)2 weeks agoa44c7c21e466count a repo's lines as source lines only: files in a known language, tests, docs and data left out, recounting existing mirrors once (v3.0.104)2 weeks agob420f182b4ccspace the timeline's dots by the capped gap between saves so it loops without long empty stretches (v3.0.103)2 weeks ago84560fbbe45afix the Atlas at its closed tree's height so opened folders scroll inside it instead of spilling over the page (v3.0.102)2 weeks ago520bd4107571hide .kohignore from the Atlas, let the Atlas shrink below 520px, and keep issue pages and their forms inside the inline panel (v3.0.101)2 weeks ago8ac8cee09624bound the Atlas to Kepr 2's 520px scroll area, shorten the timeline to a 64px strip without its legend, and drop versions from the HEAD picker (v3.0.100)2 weeks ago0ee0106284c7match Kepr 2's repo page: slow glowing ticker, drifting timeline canvas, log in link, koh steal button, inline panels, four-row scrolling history, HEAD save picker, search button, popup file viewer, linked breadcrumbs, plain cards, no repeated counts; pin koh3 3.2.24 (v3.0.99)2 weeks agobef1b9ecd957pin koh3 3.2.22 (v3.0.98)2 weeks ago7355fa2f379cpin koh3 3.2.15 (v3.0.97)2 weeks ago8a14ff237458pin koh3 3.2.14 (v3.0.96)2 weeks ago0c3107c1f7e1pin koh3 3.2.13 (v3.0.95)2 weeks ago4bb14f4e233bpin koh3 3.2.12 (v3.0.94)2 weeks ago85e95637c3dapin koh3 3.2.8 (v3.0.93)2 weeks ago82660c8bc70bpin koh3 3.2.7, whose status opens with the save it is on, and check the stolen copy lists no src.v change rather than no mention of it (v3.0.92)2 weeks ago32b93d188febpin koh3 3.2.5 and record the closed malformed-name and illegal-strip findings in continuity (v3.0.91)2 weeks agoa601b8bd7c1dread records as Koh does: unpaired surrogate escapes and bytes outside UTF-8 fail a path without refusing the record, names escape byte for byte like Koh's, and strips with illegal paths are ignored; pin koh3 3.2.4 (v3.0.90)2 weeks ago450ce8b458b5point the agent guide at the spec's home in koh3/docs and record the finished A3 in continuity (v3.0.89)2 weeks ago00ab790a7f56prove koh offer --builds --json names saves that came in flagged during a stolen repo's upgrade, sharing the test platform helper (v3.0.88)2 weeks ago0336dc246093test that Koh and Kepr drop the same unsafe paths and keep the same file list for every save; pin koh3 3.2.3 (v3.0.87)2 weeks ago1252116e72cequarantine unsafe or oversized paths instead of stopping a repo's sync, cap object inflation at 512 MiB, recount stats outside the landing and past 8 MiB files; pin koh3 3.2.2 (v3.0.86)2 weeks agoa9f5efa204e1record koh3 3.1.5, the terminology sweep and the gate lesson in continuity (v3.0.85)2 weeks ago72900049ddafrename clone, push and commit out of Kepr's source, tests and import script: a repo is stolen, a copy follows its source, the import ends its transaction with END (v3.0.85)2 weeks ago223dda02aa56pin koh3 3.1.5, which bans a stripped path with wildcard characters as itself (v3.0.84)2 weeks agocb7f939c60ceformat the flagged offer test, which v3.0.82 saved failing biome (v3.0.83)2 weeks ago60a7a945470cpin koh3 3.1.4 and prove offer --json names the saves that came in flagged during the upgrade (v3.0.82)2 weeks ago1340381db563record koh3 3.1.3 and the closed codex findings in continuity (v3.0.81)2 weeks ago7da960f87946pin koh3 3.1.3, whose offer takes back what a racing strip reaches (v3.0.81)2 weeks agoba3f6dc2df15record the closed review findings and the koh3 3.1.2 pin in continuity (v3.0.80)2 weeks agob8f30916f471break same-second ties in the connected machines list and its prune by insertion order, so twenty-one redemptions in one second keep the latest twenty (v3.0.80)2 weeks ago4e46c3606ea7pin koh3 3.1.2, which applies held strips to arriving saves as the mirror does (v3.0.79)2 weeks agof54ad035856awrite the handoff: the open codex findings, the koh3 pin and the discipline for the next session (v3.0.78)2 weeks ago46b0e7b67956pin koh3 3.1.0 and expect a stripped file to stay banned in the joint test (v3.0.77)2 weeks ago654b34548308strip every save in the mirror, whatever its time, so Kepr and Koh agree that a strip bans its path from all of history (v3.0.76)2 weeks ago1be3f9f00948record the closed A2 review, the installed koh3 3.0.108, the open mirror strip question and the discipline lessons in continuity (v3.0.75)2 weeks ago81e9c1e06919keep only the twenty redeemed codes the machines list shows, so kepr.db stops growing with every sign-in (v3.0.74)2 weeks ago27749f473202record only the redemption attempts that were allowed, capping the list at ten per address (v3.0.73)2 weeks ago2cea84c3cba0work out a sign-in's next path once, and restore the note on why login registers first (v3.0.72)2 weeks ago4bc2782ec862give every test and fixture hook 30 seconds, preloaded, so a busy machine no longer skips a whole file at Bun's 5-second default (v3.0.71)2 weeks 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.