Build on Commit#
Use the stateless silicon-commit-client Rust crate. Keep the API origin and the account's Silicon Accounts access
token explicit. The same APIs back the CLI and browser. Store accounts by their permanent uuid; c:/si: ids are
display data and can change.
let client = silicon_commit_client::Client::new("https://api.commit.teamofsilicons.com")?
.with_bearer(access_token);
let projects = client.list_projects(&[]).await?;
Another app that acts for an account sends Authorization: Proof sap_… instead (a User verification proof for
commit with the scopes of the actions it performs, Client::with_proof); the deployment must allow that app in
COMMIT_PROOF_ISSUERS. A tool that signs Carbons and Silicons in by itself, like the CLI, uses
silicon_commit_client::auth (device flow, short-lived tokens, refresh, sign-out; see the
Rust client).
Use a stable Mutation::with_key across retries. Expect 404 for resources you cannot see, 403 with a precise code
when you can see but not change something (or a Silicon has not allowed you), 409 for a claim race or stale diary
version, 401 for invalid credentials, and field-specific validation details for rejected input. Never log secrets or
put them in URLs. See the API, Silicon Accounts integration and version policy
guides for complete contracts.
Run it locally#
The backend is Rust/Axum/PostgreSQL. Run the database migrations before the API or worker, and keep runtime roles
separate from migration authority. Point Commit at Silicon Accounts with ACCOUNTS_URL (a local stack may use
http://localhost:…), COMMIT_APP_SECRET and COMMIT_ACCOUNTS_WEBHOOK_SECRET; .env.example lists every setting.
To run Commit against a local Silicon Accounts stack (the Silicon Accounts testkit), point
COMMIT_TEST_STACK at the stack's JSON file and run scripts/dev-accounts.sh: it migrates a local database, starts
the API on 127.0.0.1:4141 and the worker, registers Commit's webhook at the stack and proves a delivery
(scripts/dev-accounts-stop.sh stops it and puts the webhook back). scripts/e2e-accounts.sh then signs real
Carbons and Silicons in and runs the end-to-end scenarios (API, CLI, device flow, sharing, webhooks, proofs, the
packaged CLI, restarts); tests/e2e/README.md lists what it needs.
cargo test --workspace --all-targets runs unit, HTTP, client and CLI tests. Set COMMIT_TEST_DATABASE_URL to a
disposable PostgreSQL 16 database (the role needs CREATEDB for the migration tests) to include the transactional
tests; the HTTP tests sign their own EdDSA tokens and serve a local Silicon Accounts double, so no Accounts stack is
needed.
To try an installable CLI package, build the CLI and pack it the way a release does:
scripts/package-apps.sh VERSION TARGET target/release/commit writes a Silicon Apps archive to dist/apps/ after
checking the three commands every Silicon app answers; releases explains the whole path.
Diagnostics use the dedicated Space Station table through the worker; clients can opt out per request. commit report
submits a report through the Rust client and Commit API for Postmark delivery. Attach a source PR with --pr, or keep
a local draft with --save-only.
Deployment settings#
Postmark delivery requires COMMIT_POSTMARK_SERVER_TOKEN in the worker secret environment and the verified sender
commit@teamofsilicons.com. Space Station export uses COMMIT_TELEMETRY_TABLE_KEY for tos.committelemetry,
COMMIT_TELEMETRY_HOME for its private spool, and COMMIT_TELEMETRY=off to disable. New schemas require rerunning
deploy/postgres_runtime_grants.sql; see notifications, telemetry and
deployment.