Contributing to chatter
July 8, 2026 ยท View on GitHub
Last modified: 2026-07-07 21:17 EDT
Development setup
A fresh clone needs:
-
Rust (pinned by
rust-toolchain.tomlto a specific stable release, not a floatingstable, so per-push CI is reproducible).rustupinstalls it automatically on firstcargoinvocation. -
mdBook + mdbook-mermaid + lychee for building and link-checking the docs (link-checking runs on the built HTML via lychee, not the mdbook-linkcheck2 renderer):
just book-install-tools -
Node.js 20+ for the desktop app (
apps/chatter-desktop).nvm use 20or whatever your version-manager equivalent is. -
SQLite dev headers for
talkbank-cache. macOS bundles them. Linux contributors installlibsqlite3-dev(Debian/Ubuntu) or the equivalent for their distro.
Standard build commands:
cargo build --workspace --all-targets --locked
cargo test --workspace --locked
just book
cd apps/chatter-desktop && npm install # desktop app dependencies
Avoid committing private or internal content (mandatory)
Do not commit secrets, credentials, personally-identifying information, or details of any private infrastructure. Before every commit, review your diff for:
- Real first names in non-citation contexts
- Internal or personal email addresses
- Machine/host names used in private infrastructure
- Internal absolute paths (
/Volumes/..., machine-specific~paths) - Operational detail tied to private infrastructure (deploy logs, scratch directories, run state)
Maintainers additionally run an automated identifier screen as a commit-time hook. A standalone, in-repo version of that screen is not yet packaged for external contributors; until it is, the manual review above is the contract.
Coding conventions
The repo's conventions are codified in each crate's CLAUDE.md and the
workspace-level [workspace.lints.clippy] table in Cargo.toml.
High-friction rules to know up front:
- No panics in long-lived logic.
unwrap_used,expect_used,panic,todo,unimplementedarewarnat the workspace level anddenyper-crate where the panic-site audit has completed (see the[lints.clippy]table in each crate'sCargo.toml). Usethiserror-based domain errors instead. - Types are the primary documentation. Newtype every stable
domain boundary; never raw
String/&str/boolat a seam. - Specs are the source of truth for CHAT format behavior. Edit
spec/constructs/orspec/errors/, then regenerate tests via the spec-tooling workflow.
CI
GitHub Actions runs cargo fmt --check, cargo build, cargo test --workspace, cargo clippy, mdbook build, and npm run compile on every push and PR. See .github/workflows/ci.yml.
Reporting issues
GitHub Issues: https://github.com/TalkBank/chatter/issues