Thanks for your interest in contributing! Here's how to get started.
git clone https://github.com/CREVIOS/drift-rdp.git
cd drift-rdp
npm install
cargo tauri dev- Rust 1.77+
- Node.js 20+
- Tauri CLI (
cargo install tauri-cli) - macOS:
xcode-select --install - Linux:
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- Fork the repo and create a branch from
master - Name your branch descriptively:
feat/clipboard-sync,fix/scroll-direction,docs/architecture - Make your changes — keep PRs focused and small
- Test locally:
cargo check # Rust compilation cargo test # Rust tests npx tsc --noEmit # TypeScript types npx vitest run # Frontend tests cargo fmt --check # Rust formatting cargo clippy # Rust lints
- Open a PR against
master— fill out the template - CI must pass before merge (squash-merge only)
cargo fmtfor formattingcargo clippy -- -D warningsfor lints- Prefer
Result<T, E>overunwrap()/expect()in production paths - Use
log::info!/log::warn!/log::error!for observability - Document public APIs with
///doc comments
- Strict mode (
noEmitcheck must pass) - Use shadcn/ui components from
@/components/ui/ - Use
cn()from@/lib/utilsfor conditional classes - Hooks go in
src/hooks/, stores insrc/stores/
- Use Conventional Commits:
feat:,fix:,perf:,docs:,refactor:,test: - Keep messages concise — the PR description has the details
- All PRs are squash-merged
See ARCHITECTURE.md for system design and data flow diagrams.
Key principles:
- Actor-per-session — each RDP connection runs in its own tokio task
- SharedFrame — zero-copy double-buffer between session actor and GPU renderer
- Fallback paths — GPU rendering falls back to webview Canvas if wgpu unavailable
- No panics in production — use
Result<>for anything that can fail
- Open an issue for bugs or questions
- Start a discussion for ideas