Artifact 97d5531f1069bcd45b03f13f734cf7dbb77de2282a33a95f8d340924c2ac603b:
- File docs/RELEASE-NOTES-0.10.0.md — part of check-in [9fd9d8e3e9] at 2026-11-06 16:13:02 on branch trunk — Release 0.10.0 (user: dmestas, size: 3702) [annotate] [blame] [check-ins using]
zit 0.10.0
zit 0.10.0 is for applications that write to a store without a checkout. It
adds a local daemon that keeps a store open and commits in milliseconds,
builds every commit -R through a new direct-commit core, and lets that
path rename and delete files. New names now follow Fossil's strict rule.
This release is from trunk. Stores, caches and the wire are unchanged from 0.9.1.
New
zit daemon -R STOREserves one store over a local Unix socket, for an application that drains its own journal into zit. Requests are one JSON line followed by raw file bytes, and replies come back in order:commit, andbatchwith one fsync for the whole batch;feedof changes and forks since a cursor;getof file contents;lookup, which finds a stored check-in by time, user and comment without taking the writer lock;status.
A commit is acknowledged only after it is on disk, and a resend with the
same time, user and comment is answered with the stored check-in. The
socket's directory and file are owner-only, and other users are refused.
On a 10,000-file sub-manifest store, a one-file commit takes about 8 ms
and a feed with nothing new about 0.01 ms. zit help daemon documents
the protocol.
commit -Rrenames and deletes: repeatable--rename OLD NEWand--delete PATH, with or without--stdin, make one check-in with no checkout.--stdin NEWgives a renamed file new content.logandannotatefollow the rename.commit --date-override DATETIMEsets the check-in time, in Fossil's formats. With-R, a resend with the same date, user and comment answers with the stored check-in instead of committing again.annotate --partialreads through a purged or shunned version and marks the lines it cannot trace with~. Plainannotatestill refuses with exit 8.
Faster
commit -R no longer builds a temporary checkout. It writes the check-in
from the parent's manifest and the edits, byte-identical to a checkout
commit of the same change. A one-file commit on a 42,000-file sub-manifest
store took 0.37 s and now takes 0.16 s; held open by the daemon, it takes
about 20 ms.
Names
New file names follow Fossil's strict rule, as fossil add does. commit,
add, addremove and mv refuse:
- invalid UTF-8;
- characters above U+FFFF;
- private-use characters and noncharacters;
- a backslash;
- Fossil's reserved names, such as
_FOSSIL_.
zit also refuses control bytes in new file names and in user and branch
names. Fossil already escapes some of them; zit refuses the rest. Spaces
stay allowed. add of a directory warns about a bad name and skips it, as
fossil add does.
Names read from existing check-ins are not checked, so a Fossil-made name still clones, updates and checks out, and a delete or rename can remove it.
Compatibility
Stores and the wire are unchanged from 0.9.1, and nothing is rebuilt on first open. Every check-in zit writes is still one stock Fossil reads.
A name that 0.9.x accepted and that the rules above now refuse, such as a file name with a control byte, can no longer be added or committed under that name. Existing check-ins that hold one are unaffected.
Qualification
The release manifest records native qualification against the exact tagged source archive on macOS ARM64, Linux x86-64 and Linux ARM64, using the pinned Zig 0.17.0 toolchain. Publication is gated on unit and end-to-end tests, Git differentials, deterministic simulation, seeded fuzzing, and Fossil interoperability checks on every distributed target.
For the basis of the conformance claim, see the 0.1.0 release notes.