Thanks for your interest in contributing. This document explains how to set up the repo, propose changes, and land PRs safely.
- Code of Conduct
- What you can contribute
- Repo overview
- Development prerequisites
- Local setup
- Common workflows
- Making a change
- Commit and PR conventions
- Testing
- Security issues
- Releases
- Project governance
- License
This project is governed by the Code of Conduct in CODE_OF_CONDUCT.md. By participating, you agree to abide by it.
We accept contributions across the whole system:
- Core: canonical IR, determinism, hashing, proofs
- Plugins: new input types, better inference, improved normalization
- Store: persistence, object layouts, caching, verification
- API: HTTP endpoints, auth/rate limiting, OpenAPI docs
- CLI: UX, output formatting, additional commands and recipes
- Registry program: Anchor program improvements and audits
- SDKs: TS/Python client improvements and docs
- Console + Interface: UI, DX, and the assistant retrieval layer
- Docs: architecture, threat model, determinism contract, examples
If you are unsure where a feature belongs, open a discussion or a “question” issue.
Top-level layout:
crates/— Rust workspace crates:signia-core,signia-plugins,signia-store,signia-api,signia-cli,signia-solana-client
programs/— Solana programs (Anchor)sdk/— TypeScript + Python SDKsconsole/— Next.js console + the “Interface” serviceschemas/— versioned JSON schemas (schema/manifest/proof)docs/— specifications, determinism contract, security docsexamples/— end-to-end runnable examplestests/— integration and e2e testsscripts/— bootstrap/build/lint/test helpersinfra/— Docker/K8s/Terraform deployment scaffolding
- Rust (stable) +
cargo - Node.js 20+
- pnpm 9+
- Git
- Docker + Docker Compose
- Solana CLI (for devnet/localnet publishing)
- Anchor (for program development and tests)
git clone <YOUR_FORK_URL>
cd signia./scripts/bootstrap.shThis script is designed to:
- install or validate Rust toolchain + components (fmt/clippy)
- ensure Node and pnpm are present
- install JS dependencies in
console/andsdk/ts/where relevant
./scripts/build_all.sh./scripts/test_all.shIf you prefer Make:
make bootstrap
make build
make test./scripts/lint_all.shRust:
cargo fmt --allTypeScript:
pnpm -r formatcargo run -p signia-apiDefaults to http://localhost:8080.
cd console/web
pnpm devConsole defaults to http://localhost:3000.
cd console/interface
pnpm devInterface defaults to http://localhost:8090.
docker compose up -d --buildUse a descriptive branch name:
feat/<short-description>fix/<short-description>docs/<short-description>chore/<short-description>
Example:
git checkout -b feat/new-plugin-openrpcPrefer small PRs with a single theme. Large changes should be split or preceded by a design discussion.
- Rust crates: unit tests + integration tests where needed
- API: request/response tests where possible
- Console/Interface: smoke tests and basic coverage if feasible
If you change schemas, determinism behavior, CLI commands, or API surfaces, update:
docs/schemas/docs/api/openapi.yaml
We recommend a conventional style:
feat: ...fix: ...docs: ...chore: ...refactor: ...test: ...
Examples:
feat: add dataset schema inference for JSONLfix: stabilize canonical JSON ordering for floatsdocs: expand threat model for plugin sandbox
PRs should include:
- what changed and why
- how to test
- impact on compatibility
- links to issues/discussions
If relevant, include:
- screenshots (console changes)
- schema diffs or examples
- benchmark numbers (determinism/hashing performance)
Run workspace tests:
cargo test --workspaceRun a single crate:
cargo test -p signia-coreFrom repo root:
cargo test --test api_compile_flowFrom repo root:
pnpm -r testSome tests are gated by env vars (Docker/devnet). See tests/README (if present) and the test files in tests/e2e/.
Do not file public issues for security-sensitive findings.
Follow SECURITY.md.
Releases are cut by maintainers using the release workflow.
General process:
- Update
VERSIONandCHANGELOG.md - Tag a release
vX.Y.Z - GitHub Actions builds artifacts and publishes checksums
- On-chain program deployments (if any) are coordinated separately
See GOVERNANCE.md.
By contributing, you agree that your contributions will be licensed under the project license (Apache-2.0). See LICENSE.