v0.10.1 e4c85c7

2026-10-11

11a76ebtest: run timing-dependent tests in synctest bubbles with real delays GPG Verifiedbrice
c505b30perf(web): list repos and refs in one call, share live refs fragments, trim blob copies GPG Verifiedbrice
e2ac0a6docs(web): mention the file tree and file finder GPG Verifiedbrice
2b2a2cffeat(web): find files across the repository with a fuzzy finder GPG Verifiedbrice
ed6aa64perf(gitcli): run up to 4 cat-file processes per repo, skip blob streams on raw 304 GPG Verifiedbrice
806d83drefactor(ermitegit): move tree route selection onto Routes GPG Verifiedbrice
4fbe895test: replace hand-written fakes with mockery mocks and map hexcheck roles GPG Verifiedbrice
576bc4afeat(rpc): serve GitService.ListPaths GPG Verifiedbrice
329477afeat(readers): list the file paths of a revision GPG Verifiedbrice
c33e43cperf(browse): route warm reads to ermite-git and cache immutable last-commit results GPG Verifiedbrice
e42fec5perf(web): gzip pages and assets, add ETag revalidation to public pages GPG Verifiedbrice
a2fc532fix(githttp): cap concurrent git backends globally and per client, bound body reads GPG Verifiedbrice
49d6992fix(web): harden CSP and headers, ignore htmx in untrusted HTML, cache health checks GPG Verifiedbrice
7559d0ffeat(app): add the ListPaths use case and reader port GPG Verifiedbrice
39ca311feat(web): expand directories in place in the Files view GPG Verifiedbrice
bfab294fix(web): keep tableless diff files closed, label the lede, show the tag count past the dated limit GPG Verifiedtag v0.5.0brice
08e6388feat(web): show the latest tag in its own summary rail block GPG Verifiedbrice
5e5d8fbfix(web): reopen diff files on a layout switch and let x expand them again GPG Verifiedbrice
e84f160fix(web): size split diff columns from a colgroup and wrap long lines GPG Verifiedbrice
bcc3a12feat(web): darker dark theme and a hermit-by-the-fire logo GPG Verifiedbrice
11c083adocs: note that air reloads on web asset changes GPG Verifiedbrice
755f86dbuild(dev): rebuild on embedded web asset changes GPG Verifiedbrice
221e8defix(web): put the repo description above content and rail GPG Verifiedbrice
c8e4042fix(web): keep keys inside open dialogs and name icon-only controls GPG Verifiedbrice
c48540bfeat(web): rework the interface with surfaces, a two-level header and a command palette GPG Verifiedbrice
3027a40build(deps): require the ermite-api with delete_source_branch GPG Verifiedtag v0.4.0brice
0ba3d35test(mr): cover branch deletion over the API and the web box; document what mr:merge allows GPG Verifiedbrice
5cb495bfix(mr): read squash-merged requests whose commits were pruned and check branches under the merge lock GPG Verifiedbrice
4ea27bafeat(mr): delete the source branch on merge from the web and the CLI GPG Verifiedbrice
d205ffddocs(skills): add an agent skill for using ermite and its CLI GPG Verifiedbrice
9fdf386build(deps): require ermite-git v0.1.0 GPG Verifiedtag v0.3.0brice
b42de97docs(ermitegit): document negative MaxObjectSize and which writes refresh at once GPG Verifiedbrice
23f3a22fix(ermitegit): keep a refresh after a write from counting as a read of the repository GPG Verifiedbrice
9de0f7dtest(readertest): classify the invalid-argument domain errors in the reader comparison GPG Verifiedbrice
7b4c456perf(ermitegit): re-route the readers with the numbers of ermite-git 5228465 GPG Verifiedbrice
127d960perf(ermitegit): look up candidate refs without allocating on a miss GPG Verifiedbrice
778461abuild(deps): bump ermite-git to 5228465 GPG Verifiedbrice
38230d3test(ermitegit): add cold and parallel variants to the routing benchmarks GPG Verifiedbrice
dbef343feat(cmd): wire the ermite-git reader to pushes and maintenance GPG Verifiedbrice
a4afa9bfeat(ermitegit): bound memory, close idle repositories, claim refreshes and close synchronously GPG Verifiedbrice
5925475feat(app): tell the reader when a push or the maintenance changed a repository GPG Verifiedbrice
dedf508fix(ermitegit): keep a dangling ref out of ErrNotFound and trim names like git GPG Verifiedbrice

2026-10-10

c38360afeat(cmd): choose the git reader with ERMITE_GIT_READER GPG Verifiedbrice
b54f0d3feat(ermitegit): add the RepoReader adapter over ermite-git GPG Verifiedbrice
65a5c34feat(gitcli): write v2 Bloom filters in new repositories, expose RepoDir and OnTrash GPG Verifiedbrice
7f0f2f2refactor(domain): share blob sniffing, commit text, tree order and ref path splitting GPG Verifiedbrice
7586fbddocs(readme): document merge requests, web sign-in and the signing key GPG Verifiedbrice
41cf2ecfix(web): make the answer to an invalid cookie uncacheable GPG Verifiedtag v0.2.0brice
e2c58e1fix(app): reserve the token labels owner and root GPG Verifiedbrice
a658df0feat(serve): warn at startup when browser sign-in cannot work over http GPG Verifiedbrice

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 45

↑↓ moveenter openesc close