Contributing¶
Thanks for considering it. TOVIO ships under a per-component ("open-core") licensing model:
the core engine, the CLI, and the SDKs are Apache-2.0 (OSI open source); the Forge and the
enterprise modules are commercial. Elastic-2.0 was retired from this project ([ADR-0312]). This page
is the friendly overview; the binding documents are LICENSE, LICENSE-APACHE, docs/cla/CLA.md,
CONTRIBUTING.md, GOVERNANCE.md, and SECURITY.md in the project repository. For a fuller
breakdown see the FAQ license entry. Every project space,
the public feedback portal included, is governed by the code of conduct.
The shape of the project¶
TOVIO is a Rust workspace with a deliberate boundary. The engine and its thin I/O wrappers are Rust; TypeScript lives only at the edges.
tovio-core--- the engine: object store, change model, BLAKE3 addressing, chunking, crypto, conflict and CRDT merge. It does no I/O --- no filesystem, no network, no clock, no config. Every such input is injected by the caller, which is what keeps the engine deterministic and testable.tovio-cli,tovio-forge,tovio-keystore--- the thin wrappers (terminal, network/storage, OS keychain) over the engine.tovio-proto--- the wire types and codecs shared by the CLI and the Forge.tovio-node-bindings--- the NAPI bridge that exposes the engine to JavaScript/TypeScript.packages/*--- the TypeScript edges (MCP server, VS Code extension, web UI, SDK). They call the engine only through the bindings; they never reimplement engine logic.
The core/edge split is an architectural boundary, not a style preference. A pull request that adds I/O
to tovio-core is wrong by construction --- push the I/O up into a wrapper instead.
From idea to merged change¶
The path is short: read the docs map → make a focused change → pass the gates locally → sign the CLA and sign off your commits → open a pull request citing the requirements and decisions it touches → maintainer review and green CI → merged. In a little more detail:
- Keep it focused. One logical change per pull request. A tight diff is easier to review and easier to revert.
- Pass the gates locally (next section) before you push --- they're the same ones CI runs.
- Sign the CLA and sign off your commits (below).
- Open the pull request with a clear description of what it changes and why.
- Get a review. Every pull request needs at least one maintainer review and green CI. Changes that touch crypto, the storage format, enforcement, or the audit chain get extra scrutiny.
The gates your change must pass¶
These are the same checks CI runs. Clear them locally first:
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo nextest run --workspace
cargo test -p tovio-core --test conformance # the versioned corpus
pnpm -r lint && pnpm -r test # if you touched the TS edges
On top of those, CI enforces a determinism gate, the crypto test suite, a fuzz-corpus smoke replay,
and three lints: no secrets in objects/, error-catalog completeness, and requirement coverage.
P0 failures block merge, unconditionally
Data integrity, determinism, crypto safety, and no-data-loss are P0 properties. A failure in any of them blocks merge with no exceptions. And if you're fixing a P0 bug, the regression test that fails without your fix must land before the fix --- linked to the requirement it covers.
Conventions a reviewer will hold you to¶
tovio-corestays I/O-free. No filesystem, network, environment, terminal, or ambient clock --- inject everything.- Format and lint are gates, not suggestions.
cargo fmtandcargo clippy -D warningsboth block CI. - Every new user-visible error gets a catalog entry. Errors carry a stable
TVO-AREA-NNNcode and render in three parts --- what happened, why, what to do next. A CI lint fails the build on any constructed error without a catalog entry. - Secrets are zeroized and never leak. Key material is wrapped in a zeroizing type and must never
reach
objects/, the wire, logs, or the op-log. A lint enforces it.
Sign the CLA, then sign off every commit¶
TOVIO uses a Contributor License Agreement, not a bare DCO. Per-component licensing is why: the project ships a commercial Forge alongside the Apache-2.0 engine, which requires TOVIO to hold the rights to sublicense and relicense contributions. The CLA does not take your rights away --- you keep the copyright in your contribution.
First-time contributors sign once, and the ceremony is in-repo (no third-party service): add yourself to
the versioned roster docs/cla/signatures.json in the same pull request as your first contribution,
quoting the acceptance sentence from docs/cla/CLA.md §5 in that commit's message. A merge-blocking CI
gate fails any pull request containing a commit whose author is not on the roster, and validates the
roster itself on every run. Specification and conformance-corpus contributions are covered by the same
CLA; for employer-owned work, contact the maintainers about a corporate CLA before submitting.
On top of the CLA, sign off every commit with a real name and email matching your author identity:
That appends a Signed-off-by: line. If you forget, git commit --amend -s (or git rebase --signoff)
fixes it.
The CLI stays small --- on purpose¶
Git ships around 137 top-level commands; TOVIO deliberately won't repeat that. The rule is simple:
If you add a top-level command, you must remove or merge one --- and every command must pass the "do developers actually ask for this?" test before it ships.
New functionality should usually become a subcommand, a flag, or an entry in a progressive-disclosure
tier --- not another top-level verb. Destructive commands require an explicit, spelled-out confirmation,
never a bare --yes. Adding or removing a top-level command is a significant decision; expect to
justify it.
How decisions get made¶
TOVIO is currently a BDFL project --- a single project lead holds final say while the architecture is being laid down. "Benevolent" is load-bearing: decisions are made by consensus where it exists.
This model is a starting point, not the destination. As the contributor base grows, governance broadens along a deliberate, publicly-announced path: trusted contributors become maintainers over specific areas, then a steering group takes on cross-cutting decisions, and --- if adoption warrants --- governance may move to a neutral foundation.
Reporting bugs vs. reporting vulnerabilities¶
This distinction matters more here than in most projects, because the permission system is security-critical.
- A normal bug, feature, or question → post it on the feedback portal at https://tovio.dev/feedback (see feedback, roadmap and updates).
- Anything that could expose protected content, leak a secret, forge a signature, or bypass an
enforcement stage → a vulnerability. Do not open a public issue. Follow the coordinated-
disclosure process in
SECURITY.md. The crypto and permission system is the highest-severity surface in the project --- please treat it accordingly.
Data boundaries while contributing¶
The current CLI has no product-analytics uploader. That does not make every contribution workflow local:
the Git host, CI provider, package registries, issue tracker, and any Forge or remote you explicitly invoke
receive the data required by those operations under their own configuration and policies. Keep protected
content, keys, credentials, customer data, and private-repository details out of public issues, test fixtures,
logs, and build artifacts. Follow SECURITY.md for a vulnerability or potential disclosure.
Welcome aboard --- and thank you for helping build trustworthy developer infrastructure.
Last reviewed September 9, 2026
Suggest an improvement to this page Not for security reports — see disclosure