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.
| Storage | Reader requirement |
|---|---|
| Plain portable v2 | Existing v2-compatible readers |
| TINEZ1 compressed file / descriptor v2 repository | v0.11 or newer |
| Descriptor v3 / format-3 local packs | v0.13 or newer; opt-in via gc --upgrade |
| Domain-separated v2 catalog signature | v0.12 or newer |
| TINEAES4 remote storage | v0.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.
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 --decompressCompression 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
# Preview only
tine prune
# Remove eligible unreachable objects after review
tine prune --deletePrune 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
tine archive create backup.tinearchive --repo .
tine archive restore backup.tinearchive restored-repoArchives 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.