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
implementsrejects 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 (adict), or JSON/TOML text with an explicitformat. 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'sopenSheet(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.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gitsheets-0.3.0.tar.gz | 195.2 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| gitsheets-0.3.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| gitsheets-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl | CPython 3.9 | abi3 | Linux musl 1.2+ x86-64 | Details |
| gitsheets-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| gitsheets-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| gitsheets-0.3.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| gitsheets-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 54.4 MB
Release files / gitsheets-0.3.0.tar.gz
| Download URL | gitsheets-0.3.0.tar.gz |
|---|---|
| Size | 195.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3355c39deca281c02520f926193fcd8b3a174618e72d07111a574256f251dc0e
|
|
BLAKE2b-256 checksum How to use checksums |
d43d56366346f3c80451f0feee7fb0afcb030341e4a1cdc07ec3538e06b0e7e1
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-win_amd64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 8.7 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
94b62e547589ac0f55ed75c98c1e4346d48dad1399a36099ece90009008f1b1a
|
|
BLAKE2b-256 checksum How to use checksums |
994dd14f9358ee418b210431badc3a3681706e3d05ec6f15b3ce954297b41ce4
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 9.8 MB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7e6e7395ecb149903185aed5caacff3914d667414e1cc3a314ec0b727bdfbbd5
|
|
BLAKE2b-256 checksum How to use checksums |
046f641fdc0046d2b6c7bee17109fe13e841fd2112901606e062404f790f9815
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 9.2 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9b1f0bed970d2e4413796acfe6663bb23b56a716181ec16e8f0371b78b458279
|
|
BLAKE2b-256 checksum How to use checksums |
1c7a191ab462fe31e5fdc95802205db5829bac762dc520ff7126823c91179f1d
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 9.4 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e28106a4b7e5938e69818cee24f0a3babd66d75eddd15d552bc5f751c5bed5c9
|
|
BLAKE2b-256 checksum How to use checksums |
43560634d971738b60f03dc6c3ec5dea08565b12982c7ed355993a567449d2fc
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.3 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
79a4e277a8f7137ded35187a68f6039ddca3b7249d76dd1c8f1c6d1349249e4b
|
|
BLAKE2b-256 checksum How to use checksums |
b45eb247d81f1e355808aa5a3f196ae227869c77d2a8f27de5352ca11f29c3ac
|
| 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 12, 2026.
Transparency logRelease files / gitsheets-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | gitsheets-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
6c9eab751b58a79926cee6c6810a5b93a66459d11323ab1dd4f54d9bac897e61
|
|
BLAKE2b-256 checksum How to use checksums |
aeed783119040d23ae613fe66a6b8503ffd44e6a1b061bfb6150a09eeb509e23
|
| 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 12, 2026.
Transparency log