kepr

@june

Modern source forge for Koh repositories

TypeScript

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

43 files
af1f70ffc57a
back to HEAD
a561612eb0ad/88.3 KB · 2 weeks ago
public/24.4 KB · 2 weeks ago
scripts/2.4 KB · 2 weeks ago
src/91.8 KB · 2 weeks ago
tests/59.2 KB · 2 weeks ago
biome.json361 B · 2 weeks agobun.lock20.6 KB · 2 weeks agokepr.example.tomlCopy to kepr.toml (never saved: it holds the admin password hash and the bucket key).596 B · 2 weeks agopackage.json497 B · 2 weeks agotsconfig.json441 B · 2 weeks ago
f03421d19ef3pin koh3 3.0.108 and prove a stolen repo's offer stops on a clash instead of choosing a side (v3.0.70)2 weeks agobb2b6cc5f7e2record guided steal completion in Koh 3.0.102 (v3.0.69)2 weeks ago1d0e27dd457arecord that guided steal (8e) was discarded unbuilt, not in flight (v3.0.68)2 weeks ago1e6bacd9a98dclose the joint test's review: prove the explicit offer, every field, and the clock-order prune (v3.0.67)2 weeks agofe8c5250fc91upgrade a stolen repo through offer, and pin koh3 3.0.98 (v3.0.66)2 weeks ago1b4865e81200prove public steal end to end: list the saves and objects a clone walks, and prune the redemption limit by value (v3.0.65)2 weeks ago4c969e0a75afserve public repos read-only in Koh's remote layout (v3.0.64)2 weeks ago731c1ce0a9b6close the connect review findings and follow koh3 3.0.94's renamed view command (v3.0.63)2 weeks agob16612d47778hand out bucket access to a signed-in machine through a one-time code (v3.0.62)2 weeks ago4928df826985note why the hidden-checkbox row stays on one line, closing the last R11 finding (v3.0.61)2 weeks agoefb3a30ea420move the koh3 pin to the release build now installed, verified against the whole suite (v3.0.60)2 weeks ago75c84df65b78record the corrections and the final counts in continuity (v3.0.59)2 weeks ago2886f480bd44pin the mirror's strip landing with a regression test that fails without it, note why two long HTML rows stay whole, and move the koh3 pin to the binary it was verified with (v3.0.58)2 weeks ago47192351ee32close the joint update test's review: a tampered download refused with the binary untouched, a watchdog and a timeout on every wait, the temporary folders cleaned up, and the environment's limits named in the file (v3.0.57)2 weeks ago9445b343df7fmake the frozen Koh 2 route a permanent 404, keep executable bits in tarballs and confine the sandbox to raw files and uploaded assets, with the pin moved to the koh3 they were verified against (v3.0.56)2 weeks agocf30e2643e1arecord the campaign in AGENTS.md and continuity: the rebalanced budgets, the writing rules, the koh3 version pin and what the joint tests cover (v3.0.55)2 weeks agof4a466e83f88test that koh3 updates itself from a release Kepr served: check exit codes, an unreachable download refused with the binary untouched, and the installed copy signed and running (v3.0.54)2 weeks agodedcbd4f3830test the joint release contract with the real koh3: offer --builds publishes, Kepr serves the release on every route byte for byte, and the suite is pinned to the koh3 it was verified with (v3.0.53)2 weeks ago2b7a429de79aapply the rebalanced budgets and R11's normal layout across Kepr, and close the five fixes: the frozen Koh 2 404 body, executable bits in tarballs, the per-address sign-in lockout, the sandbox on raw files and uploaded assets, and Koh's own strip rule in the mirror (v3.0.52)2 weeks agodbdfebfae1f4refuse a kepr.toml domain whose port is outside 1-65535, closing the codex re-check of the review fixes (v3.0.51)2 weeks ago0f0b95ee972fdocument haproxy on the same host as the production reverse proxy in place of caddy (v3.0.50)2 weeks agod784c3018552record the kepr 3 campaign outcome and june's open decisions in continuity (v3.0.49)2 weeks agobb3469688eaarecord each Kepr 2 fixture request into a fresh header file and fail on curl errors other than the expected max-filesize stop, and note the review fixes in continuity (v3.0.48)2 weeks agofd5e11c6a76ctest that a whole-history strip already in the mirror strips late-arriving saves made before it and spares one made after (v3.0.47)2 weeks ago009e5c4064e1place timeline dots and card ticks between the earliest and latest save times, and end a /** */ description at its */ when code follows on the line (v3.0.46)2 weeks ago8722a5c608afgate Kepr 2's redirects behind the visibility check, treat a page past the last as page 1, refuse a non-hostname domain at startup, reject a flag or clear event with a path, and validate static paths before touching the disk (v3.0.45)2 weeks ago71ae032e7c17make the Kepr 2 import fail loudly before any bucket write on a bad imported row, credit replies to the operator only from Kepr 2's operator marks and refuse third-party ones, and accept a 412 only when the object holds the same bytes (v3.0.44)2 weeks ago946c9882a405add the one-time Kepr 2 import tool, writing put-if-absent and checked by the sync's own release validator, with a local-Postgres test, and record phase 8 in continuity (v3.0.43)2 weeks ago7ec223c3528aanswer Kepr 2's moved URLs with 301s and its retired ones with 410 Gone, refuse to sync bucket repos named like Kepr's own routes, and check the route list both ways (v3.0.42)2 weeks agob73f541c166bwrite backup download entries 0600 through a file mode on the tar writer, keeping source tarballs 0644, and refuse signatures over 60 KB before the body cap (v3.0.41)2 weeks agodbc8eb3d4b8acache per-save pages, raw files and tarballs as private for a year so no shared cache keeps a repo after it turns private, and note why a backup cannot interleave with a signature change (v3.0.40)2 weeks ago4538c2a89e9aadd daily backups of kepr.db by vacuum into plus assets into data/backups with the last 14 kept and sessions left out, the status page's last backup and download backup as a tarball, a restore test onto a fresh instance, the docs' admin and backup sections, and phase 7 in continuity (v3.0.39)2 weeks ago0c07b179ceebadd the admin site and profile section: site name, tagline, branding, handle, bio, location, link and building since, and a signature upload checked by magic bytes as png, jpeg or webp only, stored content-named under data/assets with svg refused (v3.0.38)2 weeks agof412b53f8e44add the admin releases section: every version per repo with download counts per platform, displayed notes stored in kepr.db over the record's, and hide or unhide, tested to drop a hidden version from pages, latest and every feed (v3.0.37)2 weeks ago1a15eaa5791badd the admin issues section: every repo's issues with open, closed and hidden filters, the reporter's contact detail, reply, close with an optional fixed-in save, reopen, hide, unhide and set type, tested end to end from a public filing to the operator's answer and close (v3.0.36)2 weeks ago0750fb5f4f0aadd the admin repos section: every repo the sync found with its visibility switch, category, homepage, card order, three install lines, last sync time and error, and sync now, tested to 404 every public surface and drop a private repo from every list and count (v3.0.35)2 weeks ago3917c91388dfadd the admin sign-in at /sign-in with an argon2id check, a per-address and global failure limit and a double-submit token, 30-day revocable sessions stored as hashes, sign-out, and the /admin guard requiring a session plus origin and form token on every post, with the status page (v3.0.34)2 weeks ago1c735cca38e4count public lines and languages at the newest real save so a checkpoint at head never reaches the cloud, bar, cards or header, follow reduced-motion changes in the hex glow, and test encoded traversal and nested asset paths (v3.0.33)2 weeks ago53b804b9db21serve /docs with the self-hosting guide and /support from markdown in the repo, rendered once at startup, and record phase 6 in continuity (v3.0.32)2 weeks ago9a87fc577759add the operator's profile at /@<handle>: the hex backdrop of real save ids with its glow island, the signature image served from data/assets or the handle in sacramento, settings-driven identity, public stats, the language bar, recent activity and repo cards, and a 404 for any other handle (v3.0.31)2 weeks agob623f609221badd the front page and browse: the drifting save-message ticker, the library's count of distinct objects, the file-type and category cloud, latest offered and shared repo cards with one tick per save, all from public repos and real saves only (v3.0.30)2 weeks agode6037e2c124rate-limit issue filing by the socket peer, taking x-forwarded-for's rightmost entry only from a loopback proxy (v3.0.29)2 weeks ago6fcced41a42cserve public issue pages: filing with honeypot, 3-second stamp, hashed-ip rate limit and size cap, one-time follow-up links, and the marked thread (v3.0.28)2 weeks ago755ef3f89667add the issues and thread tables to kepr.db with per-repo numbers, hashed follow-up tokens and the data layer the public pages read (v3.0.27)2 weeks ago3835b4d58a83take update-info's head from the actual head save, send cors on the api feeds' 404s, compare version components exactly, and refuse a releases/latest that is not a version (v3.0.26)2 weeks ago1fc904a2b237record phase 4 in continuity: release decisions, peach android's confirmed contract and the missing koh 2.1.16 release (v3.0.25)2 weeks agoa79b2f329d95serve the generic install.sh per repo, tested end to end against a stand-in s3, and add robots.txt, the public-repos sitemap and kepr 2's favicon (v3.0.24)2 weeks ago075f6d740acctest every recorded kepr 2 route against kepr 3: byte-exact feeds, history, version.txt, checksums and 404s, and the shape where the spec makes kepr 3 differ, with the frozen koh 2 route on 2.1.16 (v3.0.23)2 weeks ago0f7e06f66cceserve the release feeds, checksums and downloads of §22.1 and §22.4 with kepr 2's bytes and error bodies, count downloads before a five-minute presigned redirect, count nix tarball fetches as installs, and pin the koh 2 route on 2.1.16 (v3.0.22)2 weeks ago4622d4048bd6add the builds panel with versions newest first, notes or their fallback, per-file label, size, sha-256, download count and install hints, and show the newest release in the repo header (v3.0.21)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.