Thank you for your interest in contributing to Traktor! This guide will help you get started.
See the README for build instructions on macOS, Windows, and Linux.
Tests are built automatically with the main project (BUILD_TESTING=ON by default):
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc) # Linux
cmake --build build -j$(sysctl -n hw.ncpu) # macOS
cd build && ctest --output-on-failureOn Windows with MSVC:
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
cmake --build build
cd build && ctest --output-on-failureOn headless Linux (CI), set QT_QPA_PLATFORM=offscreen because tests use QApplication.
- Fork the repository
- Create a feature branch from
master - Make your changes
- Ensure tests pass
- Open a pull request
This project uses Conventional Commits. Your PR title must follow this format:
type(optional scope): description
Examples:
feat: add bzip2 progress reportingfix: handle empty encrypted filesdocs: update build instructions for Qt 6
Allowed types: feat, fix, chore, docs, test, refactor, build, ci
This project uses clang-format to enforce a consistent code style. The configuration is in .clang-format at the repo root.
Install the pre-commit framework:
pip install pre-commit
pre-commit installThis automatically formats your code on every git commit. If formatting changes are needed, the commit is aborted and the files are reformatted. Stage the reformatted files and commit again.
find src tests \( -name '*.cpp' -o -name '*.h' \) | xargs clang-format -iCI will reject PRs with style violations regardless of which method you use.
All new functionality should include tests. Tests use the Qt Test framework.
Test files live in tests/ and follow the naming convention tst_<module>.cpp.
- Use conventional commit format for your PR title
- Fill out the PR template checklist
- Ensure CI passes on all platforms (Linux, macOS, Windows)
- Link related issues using
Fixes #123syntax
Use the Bug Report issue template.
Use the Feature Request issue template.
Open a discussion in GitHub Discussions.