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

Share without an opentine server

A TINEBUNDLE1 file contains a transfer pack, canonical ref manifest, and SHA-256 over the bundle. Annotations and attestations travel with the runs. Integrity verification does not establish an author's identity; use signed evidence when authenticity matters.

Terminal
# From an existing repository
tine bundle create review.tinebundle --all --repo .
tine bundle verify review.tinebundle
tine bundle unbundle review.tinebundle --as reviewer --repo .

# Or select particular refs
tine bundle create selected.tinebundle heads/main --repo .

--all excludes remote-tracking refs and cannot be combined with explicit refs. Verification needs no repository and checks size bounds, digests, canonical manifest, ref names, targets, and object IDs.

unbundle (alias import) installs only after verification and moves refs atomically under remotes/<name>/*. Existing tracking refs advance only to descendants unless --force is explicit. Reimporting the same bundle is a no-op.

Ordinary git remotes

Terminal
tine bundle push https://github.com/YOUR-ORG/run-evidence.git heads/main --repo .
tine bundle fetch https://github.com/YOUR-ORG/run-evidence.git --as evidence --repo .

These operations store a bundle at refs/tine/bundle on a git remote, including GitHub, Gitea, bare repositories, and local paths. Git uses argument arrays, a scrubbed environment, bounded time, and restricted protocols. Received data is size-capped and verified before local refs move. A racing push is refused by git's fast-forward check.

Bundles exchange selected refs and reachable evidence. Archives preserve whole repository state. The self-hosted remote remains available for managed synchronization.