Thanks for your interest in contributing to Mojo Voice! This document provides guidelines and instructions for contributing.
- Rust 1.85 or later
- For CUDA builds: NVIDIA CUDA Toolkit
- For macOS Metal builds: Xcode Command Line Tools
git clone https://github.com/itsdevcoffee/mojovoice.git
cd mojovoice
# Build (choose one)
just build # CPU only
just build-cuda # NVIDIA GPU (Linux)
cargo build --release --features metal # macOS
# Run tests
cargo test
# Run lints
cargo clippy
cargo fmt --check- Check existing issues to avoid duplicates
- Use the bug report template if available
- Include:
- OS and version (e.g., Fedora 42, macOS 15)
- Mojo Voice version (
mojovoice --version) - Steps to reproduce
- Expected vs actual behavior
- Relevant logs (
mojovoice daemon logs)
- Check the roadmap to see if it's planned
- Open a discussion for larger ideas
- For smaller features, open an issue with the "enhancement" label
- Fork the repository
- Create a branch from
main:git checkout -b feature/your-feature-name
- Make your changes following the code style below
- Test your changes:
cargo test cargo clippy cargo fmt --check - Commit with a clear message:
git commit -m "feat: add support for X" - Push and open a Pull Request
- Follow standard Rust conventions
- Run
cargo fmtbefore committing - Run
cargo clippyand address warnings - Add tests for new functionality
- Document public APIs with doc comments
We use Conventional Commits:
feat:— New featurefix:— Bug fixdocs:— Documentation onlyrefactor:— Code change that neither fixes a bug nor adds a featuretest:— Adding or updating testschore:— Maintenance tasks (deps, CI, etc.)
Examples:
feat: add support for Polybar integration
fix: resolve audio device enumeration on PipeWire
docs: update README with new CLI commands
refactor: simplify daemon startup logic
- Use TypeScript for all new code
- Follow existing component patterns
- Use Tailwind CSS for styling
- Keep components focused and small
mojovoice/
├── src/ # Rust CLI and daemon
│ ├── main.rs # CLI entry point
│ ├── daemon/ # Daemon implementation
│ ├── transcribe/ # Whisper transcription
│ └── model/ # Model management
├── ui/ # Tauri desktop app
│ ├── src/ # React frontend
│ └── src-tauri/ # Tauri backend
├── integrations/ # Status bar integrations
│ └── waybar/
├── docs/ # Documentation
└── lib/ # FFI libraries
# All tests
cargo test
# Specific test
cargo test test_name
# With output
cargo test -- --nocapture# Start daemon
mojovoice daemon up
# Test transcription
mojovoice start
# Speak something
mojovoice stop
# Check logs
mojovoice daemon logs -f- Open an issue for bugs
- Start a discussion for questions
- Check existing docs in the
docs/directory
By contributing, you agree that your contributions will be licensed under the MIT License.