Thank you for your interest in contributing to BatcherBird! This document provides guidelines for contributing to the project.
- macOS 10.15+ (Catalina or later)
- Rust 1.77+ - Install via rustup
- Node.js 20+ - Install via Homebrew or nvm
- Tauri CLI -
cargo install tauri-cli --version "^2.0"
For testing:
- A MIDI device (synthesizer, keyboard, etc.)
- An audio interface
# Clone the repository
git clone https://github.com/ddri/batcherbird.git
cd batcherbird
# Install frontend dependencies
cd crates/batcherbird-gui
npm install
# Start development server
npm run devThis starts both the Tauri backend and Vite frontend with hot reload.
batcherbird/
├── crates/
│ ├── batcherbird-core/ # Rust audio processing library
│ ├── batcherbird-cli/ # Command-line interface (minimal)
│ └── batcherbird-gui/ # Tauri desktop application
│ ├── src/ # React TypeScript frontend
│ └── src-tauri/ # Tauri Rust backend
├── docs/ # Documentation and plans
└── .github/workflows/ # CI/CD configuration
Before opening a bug report:
- Check existing issues first
- Try the latest version
When reporting, include:
- macOS version
- Audio interface model
- MIDI device model
- Steps to reproduce
- Expected vs actual behavior
- Any error messages or console output
Open an issue with:
- Clear description of the feature
- Use case and why it would be valuable
- Any implementation ideas (optional)
- Fork the repository
- Create a branch from
main:git checkout -b feature/your-feature-name
- Make your changes
- Test your changes:
# Rust tests cargo test --workspace # TypeScript check cd crates/batcherbird-gui && npx tsc --noEmit # Build check npm run build
- Commit with clear messages:
git commit -m "feat: add new feature description" - Push and open a Pull Request
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
Examples:
feat: add velocity curve presets for common synthesizers
fix: resolve MIDI note-off timing issue with DW6000
docs: update README with troubleshooting section
- Follow standard Rust conventions
- Run
cargo clippybefore committing - Keep audio callback code minimal (no allocations)
- Use
eprintln!only for error logging in audio callbacks
- Use TypeScript strict mode (no
anytypes) - Prefer functional components with hooks
- Keep components focused and small
- Use the existing UI components from
src/components/ui/
- Hardware Testing - Test with different synthesizers and report compatibility
- Bug Reports - Detailed reports with reproduction steps
- Linux Support - ALSA/JACK audio backend implementation
- Windows Support - WASAPI audio backend implementation
- Documentation - Tutorials, examples, setup guides
- UI/UX Improvements - Design enhancements
- Localization - Translations for other languages
- Open a Discussion for questions
- Open an Issue for bugs or feature requests
By contributing to BatcherBird, you agree that your contributions will be licensed under the AGPL-3.0 License.
Thank you for helping make hardware sampling accessible to everyone!