Thanks for your interest in contributing! This document covers the development setup and guidelines for contributing to dotvault.
- Rust (stable) — install via rustup
- Node.js >= 18 — install via nvm or nodejs.org
- Tauri system dependencies:
- macOS:
xcode-select --install - Ubuntu/Debian:
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev - Fedora:
sudo dnf install webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel openssl-devel - Windows: Microsoft C++ Build Tools + WebView2
- macOS:
# Fork and clone the repo
git clone https://github.com/YOUR_USERNAME/dotvault.git
cd dotvault
# Install frontend dependencies
npm install
# Start development
npm run tauri devThis launches both the Vite dev server (frontend hot reload) and the Rust backend. Changes to React code will hot-reload; changes to Rust code will trigger a recompile.
# Rust tests (parser, tier detection, etc.)
cd src-tauri && cargo test
# Type-check the frontend
npm run buildThe app has two halves:
Rust backend (src-tauri/src/) handles filesystem scanning, .env parsing, encryption/decryption, SQLite storage, and file watching. All business logic lives here.
React frontend (src/) is a thin UI layer that calls Rust commands via Tauri's invoke() bridge. It handles routing, state, and rendering.
The src/lib/tauri.ts file is the single point of contact between frontend and backend — it contains typed wrappers for every Tauri command.
Open an issue with:
- Steps to reproduce
- Expected vs. actual behavior
- OS and version
- Relevant error messages or logs
Open an issue tagged enhancement describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
- Fork the repo and create a branch from
main - Make your changes
- Add or update tests if applicable
- Run
cargo testandnpm run buildto verify everything compiles - Write a clear PR description explaining what changed and why
- Submit the PR
- Rust: Follow standard Rust conventions. Run
cargo fmtbefore committing. Runcargo clippyand address warnings. - TypeScript/React: Use the existing patterns in the codebase. Functional components with hooks, named exports.
- CSS: Use Tailwind utility classes. Custom design tokens are defined in
src/index.cssvia@theme. - Commits: Write clear, concise commit messages. Use imperative mood ("Add feature" not "Added feature").
- Windows and Linux testing
- Accessibility improvements
- Internationalization (i18n)
- Additional .env format edge cases
- Performance optimization for large codebases (10,000+ projects)
- CI/CD pipeline setup
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to uphold a welcoming, inclusive environment.
By contributing, you agree that your contributions will be licensed under the MIT License.