Browse documentation
Docs target stable release v0.15.0; v0.16.2 on main is unreleased.Stable vs main checked 2026-10-30

Storage and compatibility

Portable payloads remain v2 and repository objects remain v3. Storage wrappers and descriptors have their own reader requirements. Current releases read stored data back to v0.3, but an older reader may refuse newly compressed or upgraded storage.

StorageReader requirement
Plain portable v2Existing v2-compatible readers
TINEZ1 compressed file / descriptor v2 repositoryv0.11 or newer
Descriptor v3 / format-3 local packsv0.13 or newer; opt-in via gc --upgrade
Domain-separated v2 catalog signaturev0.12 or newer
TINEAES4 remote storagev0.12 or newer server

Inspect, pack, and upgrade

The unreleased v0.16.2 source contains additional fixes for GC sharing violations and pack-list races during concurrent recording. They are not part of the published v0.15.0 package.

Terminal
tine du --json
tine gc --repo .
tine repack --repo .

# Deliberate storage-v3 upgrade, or return to storage v2
tine gc --upgrade --repo .
tine gc --downgrade --repo .

# Plain portable output for an older reader
tine compress result.tine --decompress

Compression and packing preserve canonical object IDs, digests, and signatures. Packs are written and read back before loose copies are removed. New repositories use compressed storage; existing descriptor-v1 repositories stay unchanged until GC upgrades them. OPENTINE_COMPRESS=0 or global --no-compress selects plain writes. Python 3.11–3.13 needs the zstd extra to read zstd data; otherwise new writes use zlib.

Storage v3 adds bounded blocks, snapshot deltas, and a binary index; every reconstructed object is hashed on read. Auto-packing controls live-session growth and coalesces a recorder's packs at finalize. Configure OPENTINE_AUTO_PACK or the repository's auto_pack setting; packing can cost additional recording time.

Pruning is explicit

Terminal
# Preview only
tine prune
# Remove eligible unreachable objects after review
tine prune --delete

Prune is a dry run by default. Roots include refs, reflogs, associations, shallow boundaries, worktrees, and linked git evidence. It fails closed if required roots or objects cannot be read. Current pruning enforces a 70-minute minimum age floor; the default age threshold is 14 days. Reflog expiration follows conservative keep rules.

Whole-repository archives

Terminal
tine archive create backup.tinearchive --repo .
tine archive restore backup.tinearchive restored-repo

Archives preserve objects, refs, shallow boundaries, and annotation adoption state. Restore verifies every object ID and requires a new repository. For selected refs or ordinary git transport, use bundles.

Transfer packs negotiate TINEPACK4 with compatible peers and retain TINEPACK3 interoperability. Remote storage uses compressed-then-sealed TINEAES4; before a server rollback, follow the tagged reseal instructions instead of assuming an older server can read it.