Thanks for helping improve D2d! This guide keeps contribution steps short and consistent.
git clone https://github.com/inowio/D2d.git
cd D2d
npm install
npm run tauri devPrerequisites: Node.js 20.19+ (or 22.12+), Rust stable toolchain, Git, and a code editor (VS Code with the Tauri, rust-analyzer, ESLint, and Prettier extensions is recommended). See the README for the full setup.
- Fork the repo and branch off
mainusingfeature/<topic>orfix/<topic>. - Follow Conventional Commits
(
feat:,fix:,docs:,test:,chore:…). - Keep pull requests focused, include tests, and add screenshots for UI changes.
- Open the PR against
main, reference any related issues, and await review.
- React + TypeScript only; prefer the
export default function Component()style used acrosssrc/. - Keep conversion logic pure and dependency-free in
src/utils/conversions.tsso it stays easy to test. - Throw explicit, human-readable
Errormessages for invalid input — the UI surfaces them directly to the user. - Rust changes in
src-tauri/must passcargo fmt; most contributions are frontend-only. - Update docs or in-app explanations whenever behavior changes.
The conversion catalog is designed to grow. To add one:
- Define the option. Add a
ConversionOptionentry toconversionOptionsinsrc/utils/conversions.tswith a uniqueid, atitle, adescription, and thefrom/toformat keys. - Implement the function. Write the conversion in the same file and add
a matching
caseto theconvert()switch so it is dispatched correctly. - Add an explanation (encouraged). Add a matching entry to
conversionExplanationsinsrc/utils/conversionExplanations.tsso the converter page renders the step-by-step guide and example table. - Cover it with tests. Add cases to
src/utils/conversions.test.ts, including edge cases and invalid input. - Register a new format, if needed. If your
from/tointroduces a format not already listed, add it to thegroupOrderandgroupLabelsmaps insrc/pages/Home.tsxandsrc/components/Sidebar.tsxso it appears in the catalog and sidebar.
npm run build # Type-check + production build
npm run test # Unit tests (Vitest)
cargo fmt # Rust formatting (only if you touched src-tauri/)Please add or update tests alongside new features and bug fixes. See TESTING.md for conventions.
Maintainers cut releases with npm run release -- X.Y.Z, which bumps every
version field and dates the changelog, followed by committing and pushing the
vX.Y.Z tag. Pushing the tag triggers the GitHub Actions workflow that
builds the desktop installers and publishes a draft release. The full
runbook — updater keypair setup, CI secrets, the release loop, pre-releases,
and failure recovery — is in docs/RELEASING.md.
- Bug reports — include OS, app version, Node/Rust versions, reproduction steps, expected vs. actual results, and logs or screenshots if possible.
- Feature ideas — describe the use case, the desired outcome, and any alternatives you considered. New conversion requests are very welcome.
Be respectful, inclusive, and helpful. Use GitHub Issues for bugs and feature requests, and Discussions for questions or ideas.
Thank you for contributing! 🚀