Contributing to OpenCrust
February 20, 2026 ยท View on GitHub
Thanks for your interest in contributing to OpenCrust!
Quick Start
# Clone the repo
git clone https://github.com/opencrust-org/opencrust.git
cd opencrust
# Build
cargo build
# Run tests
cargo test
# Run linter
cargo clippy
# Format code
cargo fmt
Documentation
To build the documentation locally:
# Install mdBook
cargo install mdbook
# Build the book
mdbook build docs
# Serve the book (auto-reload)
mdbook serve docs
# Generate rustdoc
cargo doc --no-deps
Finding Work
- Check the Issues page
- Issues labeled
good-first-issueare great starting points - Issues labeled
help-wantedare open for anyone to pick up - Comment on an issue before starting work to avoid duplicate effort
Current Priorities
| Priority | Issue | Description |
|---|---|---|
| P0 | #104 | Website: opencrust.org with alternatives pages |
| P0 | #105 | Discord community |
| P1 | #106 | Built-in starter skills |
| P1 | #107 | Scheduling hardening |
| P1 | #108 | Multi-agent routing and session orchestration |
| P1 | #80 | MCP: resources, prompts, HTTP transport |
| P1 | #74 | Security hardening |
| P2 | #72 | Comprehensive test suite and benchmarks |
| P2 | #73 | CI/CD: matrix builds, crates.io, Docker |
| P2 | #77 | Discord full spec: streaming, threads |
Pull Request Process
- Fork the repository
- Create a feature branch from
main - Make your changes
- Ensure all checks pass:
cargo check && cargo test && cargo clippy && cargo fmt --check - Submit a PR with a clear description of what changed and why
Code Guidelines
- Each crate has a focused responsibility. Keep boundaries clean.
- Prefer
Result<T, E>over panics. Useopencrust_common::Errorfor crate-level errors. - Write tests for new functionality. Place unit tests in the same file, integration tests in
tests/. - Keep functions short. If a function is doing too much, split it.
- Document public APIs with doc comments.
Crate Overview
| Crate | Purpose |
|---|---|
opencrust-cli | CLI binary, command parsing, daemon management, init wizard |
opencrust-gateway | WebSocket server, HTTP API, session management, channel bootstrap |
opencrust-config | Config file loading (YAML/TOML), hot-reload watcher, MCP config |
opencrust-channels | Channel trait + Discord, Telegram, Slack, WhatsApp, iMessage implementations |
opencrust-agents | LLM providers (Anthropic, OpenAI, Ollama), tools, MCP client, agent runtime |
opencrust-db | SQLite memory store, vector search (sqlite-vec) |
opencrust-plugins | WASM plugin loading and execution |
opencrust-media | Media format handling and conversion |
opencrust-security | Credential vault, allowlists, pairing codes, input validation |
opencrust-skills | SKILL.md parser, scanner, installer |
opencrust-common | Shared types, error enum, message model |
License
By contributing, you agree that your contributions will be licensed under the MIT License.