Thank you for your interest in contributing to DSPanel! This document provides guidelines and information for contributors.
- Use the GitHub Issues page
- Check existing issues before creating a new one
- Use the provided issue templates (bug report, feature request)
- Include as much detail as possible: steps to reproduce, expected behavior, screenshots
- Open a feature request issue
- Describe the use case and expected behavior
- Reference the PRD if the feature aligns with existing plans
- Fork the repository
- Create a branch from
main:feat/<feature-name>orfix/<bug-name> - Develop following the coding standards below
- Test your changes
- Submit a Pull Request targeting
main
- Rust (stable toolchain) - install via rustup
- Node.js 20+
- pnpm (
npm install -g pnpm) - Platform-specific Tauri dependencies:
- Linux:
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libayatana-appindicator3-dev librsvg2-dev - macOS: Xcode Command Line Tools (
xcode-select --install) - Windows: Microsoft Visual Studio C++ Build Tools, WebView2
- Linux:
# Install frontend dependencies
pnpm install
# Run in development mode (hot-reload)
cargo tauri dev
# Run Rust tests
cargo test
# Run frontend tests
pnpm test
# Check Rust formatting
cargo fmt --check
# Run Rust linter
cargo clippy
# Run frontend linter
pnpm lint
# Build release binary
cargo tauri build- Edition: Rust 2021
- Formatting: Run
cargo fmtbefore committing - Linting:
cargo clippymust pass with no warnings - Error handling: Use
thiserrorfor library errors,anyhowfor application errors - Naming: snake_case for functions/variables, PascalCase for types, SCREAMING_SNAKE_CASE for constants
- Style: Follow ESLint + Prettier rules (configured in the project)
- Components: Functional components with hooks
- State management: React state + Tauri IPC commands
- Naming: camelCase for variables/functions, PascalCase for components and types
- All AD operations go through the Rust backend via Tauri commands - never call LDAP directly from the frontend
- Every write operation must check permissions before execution
- Every write operation must create a snapshot for rollback
- Every write operation must be logged for audit
- Keep the frontend responsive - use async Tauri commands for all I/O
Follow Conventional Commits:
<type>(<scope>): <description>
Types: feat, fix, docs, refactor, test, ci, chore
Examples:
feat(lookup): add user account search with healthcheck badgefix(groups): handle circular group nesting detectiondocs(architecture): update source tree after refactor
- Rust: Place unit tests in
#[cfg(test)] mod testsblocks within each module; integration tests go insrc-tauri/tests/ - Frontend: Place tests alongside components as
*.test.tsxfiles; use Vitest + React Testing Library - Follow AAA pattern (Arrange, Act, Assert)
- Target 90%+ coverage on core services
- Ensure all tests pass
- Update documentation if behavior changes
- Update
CHANGELOG.mdunder[Unreleased]if applicable - Request a review
- Squash commits if needed for a clean history
Be respectful and constructive. We are all here to build a useful tool for the IT community.
Open a Discussion on GitHub.