Contributing to FrameTrellis
Thank you for helping! Bug reports, documentation, tests, translations and code are all welcome. By participating you agree to follow the Code of Conduct.
Reporting bugs and requesting features
- Search existing issues first.
- Use the issue templates. For bugs, include Help → About → Copy diagnostics, the steps to reproduce, and what you expected. Never attach private footage; describe the file instead (container, codecs, resolution — FrameTrellis' media tooltip shows these).
- Security problems: do not open a public issue; see SECURITY.md.
Development setup
Follow docs/development/building.md. The quickest loop on Linux:
cmake --preset linux-debug
cmake --build --preset linux-debug
ctest --preset linux-debug
Making changes
- Fork the repository and create a branch from the default branch.
- Keep each pull request focused on one change. Large changes: open an issue first to discuss the design.
- Follow the existing structure (see docs/architecture/overview.md):
domain logic in
core/timeline/project/editing(no UI, no MLT), MLT code inengine/media/playback/rendering, QML and view models inui. - Add or update tests. Bug fixes should come with a test that fails without the fix. Do not
commit media files; generate fixtures in tests (see
tests/support/media_fixtures.h). - Update documentation (user guide, roadmap, release notes in
docs/releases/unreleased.md). - Make sure these pass locally:
git ls-files '*.cpp' '*.h' | xargs clang-format --dry-run --Werror
ctest --preset linux-debug
Code style
- C++20, formatted with the repository's
.clang-format;clang-tidymust be clean. - Prefer value types and RAII; use
std::unique_ptrfor ownership and Qt parent ownership for QObjects. No rawnewwithout an owner, no global mutable state. - Report failures with
ft::Result/ft::Statusand a user-facing message; never swallow errors. - Time on the timeline is integer frames (
ft::FrameCount); useRational/FrameRatefor conversions, never floating point for clip positions. - Every edit to a project goes through an undoable command.
- User-visible text is written in plain, friendly English and wrapped in
qsTr()in QML. - New files start with
// SPDX-License-Identifier: GPL-3.0-or-laterand a copyright line.
Commit messages
Use Conventional Commits style with a clear scope:
feat(timeline): support ripple trimming
fix(export): report encoder initialisation failures
test(project): cover documents saved by a newer version
docs: explain proxy media
Write the body to explain why. Keep commits small and logical; each commit should build.
Licensing of contributions
FrameTrellis is GPL-3.0-or-later. By submitting a contribution you agree that it is licensed under the same terms. You keep your copyright; there is no CLA. Only submit work you have the right to contribute, and do not copy code, artwork or text from other projects unless their license is compatible and the origin is noted.
This page is generated from CONTRIBUTING.md in the repository. Found a mistake? Open an issue.