Contributing
Thank you for your interest in contributing to Ghost! This guide will help you get started.
Code of Conduct
Section titled “Code of Conduct”Be respectful, constructive, and professional. We’re building privacy-first software — treat contributors with the same care we treat user data.
Getting Started
Section titled “Getting Started”Prerequisites
Section titled “Prerequisites”- Rust (latest stable)
- Bun >= 1.0
- Platform-specific Tauri v2 dependencies: see guide
- Ollama (optional — Ghost uses native AI by default)
# Clone the repogit clone https://github.com/ghostapp-ai/ghost.gitcd ghost
# Install frontend dependenciesbun install
# Run in development modebun run tauri dev
# Run Rust testscd src-tauri && cargo test
# Run Rust lintercd src-tauri && cargo clippy -- -D warnings
# Build frontendbun run buildDevelopment Workflow
Section titled “Development Workflow”1. Branch Naming
Section titled “1. Branch Naming”feature/search-barfeature/file-watcherfix/fts5-unicode-tokenizerrefactor/db-connection-pooldocs/update-roadmap2. Commit Messages
Section titled “2. Commit Messages”We use Conventional Commits:
<type>(<scope>): <description>Types: feat, fix, refactor, docs, test, chore, perf
Examples:
feat(search): implement hybrid FTS5 + vector search with RRF rankingfix(indexer): handle PDF files with encrypted content gracefullydocs(readme): update architecture diagram3. Before Submitting a PR
Section titled “3. Before Submitting a PR”- All Rust tests pass:
cd src-tauri && cargo test - No clippy warnings:
cd src-tauri && cargo clippy -- -D warnings - Frontend compiles:
bun run build - No
unwrap()in production code (only in tests) - Public functions have doc comments
- Updated
ROADMAP.mdif completing a milestone
4. PR Guidelines
Section titled “4. PR Guidelines”- Fill out the PR template completely.
- One logical change per PR — keep them focused.
- Link to relevant issues.
- Include screenshots for UI changes.
- Keep the privacy rules: NEVER add telemetry, analytics, or external network calls.
Architecture Overview
Section titled “Architecture Overview”Read CLAUDE.md for the complete architecture guide, conventions, and module structure.
Key rules:
- All heavy logic lives in Rust — frontend is a thin UI layer.
- Database access through connection pool — no connections held across await points.
- Use
thiserrorfor library errors,anyhowfor application errors. - Use
tracingfor logging — neverprintln!. - TypeScript strict mode — no
anytypes.
Areas for Contribution
Section titled “Areas for Contribution”Good First Issues
Section titled “Good First Issues”Look for issues labeled good first issue.
Current Priorities
Section titled “Current Priorities”Check ROADMAP.md for the current phase and what needs to be done.
Key Areas
Section titled “Key Areas”- Performance: Cold start optimization, search latency, memory usage
- Text Extraction: Better PDF/DOCX parsing, new format support
- Search Quality: Ranking improvements, snippet highlighting
- Cross-Platform: macOS/Linux-specific fixes
- Documentation: Code comments, guides, tutorials
Privacy Rules (Non-Negotiable)
Section titled “Privacy Rules (Non-Negotiable)”These rules CANNOT be violated in any contribution:
- NEVER add telemetry, analytics, or crash reporting.
- NEVER make external network calls (except localhost Ollama + one-time HuggingFace model download).
- NEVER include tracking pixels or third-party SDKs that phone home.
- All data processing MUST happen locally.
- If a feature requires cloud access, it MUST be opt-in and clearly documented.
PRs violating these rules will be rejected immediately.
License
Section titled “License”By contributing, you agree that your contributions will be licensed under the MIT License.