kepr

@june

Modern source forge for Koh repositories

TypeScript

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

253 files
7e5b89845c1d
back to HEAD
public/381.4 KB · 5 days ago
css/68.7 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 · 5 days ago
src/448.3 KB · 5 days ago
admin/111.5 KB · 5 days ago
bucket/40.3 KB · 6 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/61.6 KB · 5 days ago
tarball/7.8 KB · 6 days ago
main.ts2.2 KB · 1 week ago
tasks/1.2 KB · 2 weeks ago
tests/504.0 KB · 5 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.4.2 KB · 1 week 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 · 1 week agobucket.test.ts12.1 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.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 · 2 weeks 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.7 KB · 1 week 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 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 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 · 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.json525 B · 5 days agoREADME.mdKepr is a self-hosted website for your Koh projects.1.3 KB · 1 week 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.