Thanks for your interest in contributing! This guide covers how to get set up and submit changes.
| Requirement | Version |
|---|---|
| Rust | 1.80+ |
| Node.js | 20+ |
| pnpm | 9+ |
| cmake | any |
macOS: xcode-select --install && brew install cmake
Windows: Visual Studio Build Tools with C++ workload
Linux: sudo apt install libasound2-dev libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev cmake
git clone https://github.com/codewithtim/talkytexty.git
cd talkytexty
pnpm install
pnpm tauri devThe first build compiles whisper.cpp from source and takes several minutes. Subsequent builds are incremental.
- Create a branch from
main - Make your changes
- Run the quality gates before submitting
# Rust
cd src-tauri
cargo test
cargo clippy -- -D warnings
cargo fmt --check
# Frontend
cd ..
pnpm test
pnpm lint
pnpm format:check
npx tsc --noEmitOr run everything at once:
cd src-tauri && cargo test && cargo clippy -- -D warnings && cargo fmt --check && cd .. && \
pnpm test && pnpm lint && pnpm format:check && npx tsc --noEmit- Rust: Follow standard Rust conventions.
cargo fmtandcargo clippyare enforced. - TypeScript/React: Follow existing patterns in the codebase. ESLint and Prettier are configured.
- Keep changes focused — one concern per PR.
- Don't add comments, docstrings, or type annotations to code you didn't change.
src/ # React frontend (TypeScript, Tailwind CSS)
src-tauri/ # Rust backend (Tauri v2)
src/
lib.rs # App entry, tray, hotkey handler
audio/ # Microphone capture and resampling
transcription/ # Whisper engine and model registry
injection/ # Text injection (keyboard, clipboard)
preferences/ # User preferences persistence
commands/ # Tauri IPC command handlers
tests/ # Rust test suites (unit, contract, integration)
- Push your branch and open a pull request against
main - Describe what changed and why
- Ensure all quality gates pass
- Keep PRs small and reviewable when possible