Skip to content
zit Update of ”Home”
Login

Update of ”Home”

Overview

Artifact ID: 1a134fa4e82b22146fbe3edb0cc84c069470f20015caac9879eb491de5d4ac2a
Page Name:Home
Date: 2026-10-20 15:20:31
Original User: dmestas
Mimetype:text/x-markdown
Parent: c6961349f76c2bd72a8e0f58072026507d050e81027072ce6fda7ea47f058c79 (diff)
Next fe945130088d590681948f1d8e24f02fe2dfecf60b87ecaabee89cd67b4c9856
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.6.0 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. Corrections are folded into the draft texts and listed in their Changes appendices; the retired erratum files remain in repository history.

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 the pinned Zig 0.17.0 toolchain.

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