Skip to main content

gitsheets (Python)

The Python binding for gitsheets — a git-backed document store for low-volume, high-touch, human-scale data. Records are canonical TOML files in a git tree; every write is a real git commit you can diff, review, revert, and sync like any other.

The guarantee that defines this package: a record written from Python and the same record written from the Node.js gitsheets package produce byte-identical trees, blobs, and commits. The binding is a thin pyo3 layer over the shared Rust gitsheets-core engine; everything that determines on-disk bytes (canonical TOML, path-template rendering, JSON-Schema validation, the embedded JS engine, the Sheet/Transaction/Store state machine) lives in the core, and a cross-binding parity suite proves the byte equivalence in CI on every change.

Install

pip install gitsheets

Prebuilt abi3 wheels (any CPython >= 3.9) ship for Linux x86_64 + aarch64 (glibc), Linux x86_64 (musl), macOS x86_64 + arm64, and Windows x86_64. Other platforms install from the sdist, which needs a Rust toolchain.

Quick start

A sheet is declared by a TOML config committed in the repo — here, one record file per person, keyed by slug, under people/:

mkdir crm && cd crm && git init -b main
mkdir .gitsheets
cat > .gitsheets/people.toml <<'EOF'
[gitsheet]
path = '${{ slug }}'
root = 'people'
EOF
git add .gitsheets && git commit -m "declare the people sheet"

Write records inside a transaction — commit on success, discard on error:

import time
import gitsheets

with gitsheets.transact(
    ".git",                       # the repo's GIT_DIR
    "people: add jane",           # commit message
    int(time.time()),
    author=("Jane Doe", "jane@example.org"),
    branch="refs/heads/main",
) as tx:
    tx.open_sheet("people", ".gitsheets/people.toml")
    tx.upsert("people", {"slug": "jane", "email": "jane@example.org"})

print(tx.result["commit_hash"])

The round-trip is plain git — and the bytes are canonical, identical to what the Node binding would have written:

$ git show main:people/jane.toml
email = "jane@example.org"
slug = "jane"

Type fidelity

The binding marshals Python natives ↔ the core's TOML-faithful value type:

Python core Value TOML
int Integer (i64) integer (distinct from float)
float Float (f64) float (1 ≠ 1.0)
str String string
bool Boolean boolean
datetime.datetime Datetime datetime (aware UTC instant)
dict Table table
list / tuple Array array

Python's int is arbitrary-precision, so small ids stay ergonomic and large values never lose precision (an int outside the i64 range TOML permits raises OverflowError).

Consumer validators

The runtime consumer-validator hook runs Python-side on the normalized record before the core writes any bytes — pass any callable (a Pydantic Model.model_validate, a Zod-style check, a plain assertion):

import gitsheets
from pydantic import BaseModel

class Person(BaseModel):
    slug: str
    email: str

with gitsheets.transact(git_dir, "add jane", time_seconds, author=("Jane", "jane@x.org"), branch="refs/heads/main") as tx:
    tx.open_sheet("people", ".gitsheets/people.toml")
    tx.upsert("people", {"slug": "jane", "email": "jane@x.org"}, validate=Person.model_validate)

JSON-Schema validation declared in the sheet config runs in-core, identically to the Node binding.

Schema contracts

The full contracts surface ships in this binding (0.2.0+), in its batch-first shape:

  • Write-time enforcement needs nothing Python-specific — a sheet declaring implements rejects non-conforming writes through the shared core, byte-identically to Node, with the violated contract named on each issue.
  • canonical_contract_hash(document, format=None) — a contract document's identity: parsed data (a dict), or JSON/TOML text with an explicit format. Two parties holding the same logical document compute the same hash from either language.
  • verify_sheet_contract(git_dir, tree_ref, sheet, document, ...) — consumer-side verification, the module-level equivalent of Node's openSheet(name, { contract }):
report = gitsheets.verify_sheet_contract(
    git_dir, "HEAD", "meals", contract_doc, mode="verify",
)
# {'name': 'gitsheets.io/meals/v1', 'rung': 'declared', 'conforming': True,
#  'issues': [], 'tree': '9c41...'}

Modes: 'verify' (declared-identity fast path, falling back to structural record validation — the default), 'declared' (fast path only, never reads records), 'structural' (duck-typing any sheet, contract-aware or not). A failed verification raises ContractError (code contract_unsatisfied) carrying per-record issues.

What 0.x is (and isn't)

The 0.x releases are honestly scoped as a transactional writer with parity-proven reads: transact/Transaction (open_sheet, upsert, delete, clear, will_change), attachments (set_attachment(s)/get_attachment(s)/delete_attachment(s)), reads through opened sheets, validation, and schema contracts (enforcement, identity, and consumer verification — above).

Known gaps, tracked in #240 and stated plainly rather than papered over:

  • No freshness model — no refresh/auto-refresh after commit; reads see the tree a transaction opened, not later commits.
  • No streaming blob reads — attachments surface as blob hashes; there is no streaming read API yet.
  • No push daemon — syncing the repo to remotes is yours to arrange.

These reach parity with the Node binding as #240 lands.

Versioning and releases

Releases ship from the py-v* tag track: the released version is committed in rust/gitsheets-py/Cargo.toml, the tag must match it, and every release is built from a commit whose cross-binding byte-parity suite is green. Pre-1.0 semver: breaking surface changes bump the minor version.

Development

Build a local wheel and run the smoke + cross-binding parity suite:

uv venv && uv pip install maturin pytest pydantic
uv run maturin develop
uv run pytest tests/

Metadata

Release files for gitsheets 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gitsheets 0.5.0
File Size Uploaded
gitsheets-0.5.0.tar.gz 218.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for gitsheets 0.5.0
File
gitsheets-0.5.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
gitsheets-0.5.0-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
gitsheets-0.5.0-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
gitsheets-0.5.0-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
gitsheets-0.5.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
gitsheets-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 56.2 MB

Release files / gitsheets-0.5.0.tar.gz

Download URL gitsheets-0.5.0.tar.gz
Size 218.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d99c475750dc89a96bc48436921aee63e77dddfbe4063fb27ffd6ce2a1184062
BLAKE2b-256 checksum
How to use checksums
782238f3916915e8b90809577c4556cf451ff8deebc19a71d18136390f8b92eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-win_amd64.whl

Download URL gitsheets-0.5.0-cp39-abi3-win_amd64.whl
Size 9.0 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
c046e9818593ee8f8f85146fbe83d9b545408c9eebf372b6196d77780f0a9233
BLAKE2b-256 checksum
How to use checksums
3ed66388a61a5f9da78ed4ccf307e178ceb3a8bb5fb144e24557090bd7ef04a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL gitsheets-0.5.0-cp39-abi3-musllinux_1_2_x86_64.whl
Size 10.2 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
466c8f3c28284caa34767505823df521553e34611c9d85a0381e8aacea5104ee
BLAKE2b-256 checksum
How to use checksums
2356634ff76f8478b9f1f9c0c2285badafd40a9e97e0ed82f9f04e841893cf36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL gitsheets-0.5.0-cp39-abi3-manylinux_2_28_x86_64.whl
Size 9.6 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
39cc04e7e3d9e7f734c3b5e9a496c85843c1c75ec69f167eab1b7bd971804e7a
BLAKE2b-256 checksum
How to use checksums
479e9400727eb8aa5de5e45cf4cfa033bf6a0e10d22ce13f24bf7be4a18b5023
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL gitsheets-0.5.0-cp39-abi3-manylinux_2_28_aarch64.whl
Size 9.7 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
3555a1e44f35184f9dcfd1abadfa8d61e3015402391521f1f79a0a071a3fe012
BLAKE2b-256 checksum
How to use checksums
6c525807fa43509beaf18ece53e628d002c28e685e1293e703b7ffd66090bcec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL gitsheets-0.5.0-cp39-abi3-macosx_11_0_arm64.whl
Size 8.6 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
797b65779aa96f08ffd2f78a89d36b5700352266d1833e278f6cc8c1e8dbe63c
BLAKE2b-256 checksum
How to use checksums
57ab9afabb05f20a7387f3ce7db2c629a06d590c76b8287ca8cd805d8e84f8a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / gitsheets-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL gitsheets-0.5.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 8.9 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
8ffe07d1640c1aa5143391a1e3cf0a07b1f6d71e69a0588c18822bf924eb31eb
BLAKE2b-256 checksum
How to use checksums
00aefceebbd5ef4c46a1e9bc7ef396a1afce09d6c6a03aacdfe05a4ffee05458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

7 release files

0.4.0

7 release files

0.3.0

7 release files

0.2.0

7 release files

0.1.0

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page