Skip to content
zit Update of ”Home”
Login

Update of ”Home”

Overview

Artifact ID: 8386f51333c92bf87105b0205e54598d3a71ed2c43e053c9b6b6957a04a41a81
Page Name:Home
Date: 2026-09-29 00:33:46
Original User: dmestas
Mimetype:text/x-markdown
Parent: a06895d95f0a33378b9d016f6947fb42372103503c1e5e61250219944eab6ba8 (diff)
Next a8c818ed02b6e78855a18f2a4a93fcf5b0bf983e2c0fcd8c329df2a088591d9f
Content

zit

A Fossil version-control system in Zig.

zit reads and writes Fossil's artifacts and speaks Fossil's sync protocol, so it clones from, pushes to, pulls from, and serves stock fossil, and a checkout means the same thing to both tools. It is written from the specifications, not ported from C: six Internet-Drafts frozen in this repository are the authority, and Fossil itself appears only in the differential tests that hold the two implementations to the same answer.

The zit binary is a thin command over a library — a Zig counterpart to libfossil — whose modules take no ambient time, randomness, filesystem, or network, so the whole stack runs under seeded deterministic simulation.

Download

Download Zit 0.3.35 for macOS ARM64 or Linux x86-64/ARM64, or get the source archive, or read the release notes.

Releases are also mirrored to GitHub.

What it does

The everyday verbs — init, add, commit, update, merge, diff, status, timeline, branch, tag, annotate, grep, bisect, stash, undo/redo, clone, push, pull, sync, serve — with Fossil's output shapes and Fossil's settings: .fossil-settings/ is read at every tier, ignore-glob, clean-glob, manifest, and the rest mean what they mean in Fossil.

Beyond that:

What it leaves to Fossil

By decision, not omission. zit authors and syncs the collaboration artifacts but renders none of them: the web UI belongs to a forge (zit ui hands off to one that serves the repository), and wiki, tickets, forum threads, and technotes are read there rather than here. There is no unversioned-file store; a peer's unversioned files are declined visibly. zit never creates a SHA-1 repository, though it reads one.

The specifications

The drafts under docs/rfcs are the sole authority. Expected values in tests come from the spec text and its worked examples, never from observing another implementation; where the code follows Fossil's implemented behaviour against the published text, the divergence is recorded in docs/rfcs/erratum.

Layer Draft Specifies
delta draft-fossil-delta-format-00 byte-level delta encoding: copy/literal segments, base-64 integers, mod-2³² checksum
artifact draft-fossil-artifact-format-00 card-structured manifests and control artifacts, content addressing (SHA-1 / SHA3-256), checksums
repostate draft-fossil-repo-state-00 branch, tag, and leaf state derived from the append-only artifact set
submanifest draft-fossil-submanifests-00 S-card tree manifests: bounded per-commit manifest size for wide repositories
sync draft-fossil-sync-protocol-00 HTTP replication of the artifact set between repositories
cone draft-fossil-sparse-cone-00 sparse cones: partial worktrees and the sparse-store path for monorepos

Building

Requires Zig 0.16 or later.

zig build --release=fast   # the shipped binary, at zig-out/bin/zit
zig-out/bin/zit version
zig build test             # unit tests, one cited test per RFC clause
zig build smoke            # interop check against a fossil binary on PATH

--release=fast is what the release builds use; a plain zig build is a Debug binary, many times slower on a real history.

Finding your way