Thank you for your interest in contributing to Cinnamon Terminal!
First: if you're unsure about anything, just ask — we're friendly.
- Code of Conduct
- Where to Start
- Branch Strategy
- Development Workflow
- Commit Message Convention
- Coding Standards
- Code Review Process
- Testing
- Documentation
- Reporting Bugs
- Feature Requests
This project follows the Contributor Covenant. By participating, you are expected to uphold this code.
- Issues: Look for issues labeled
good first issueorhelp wanted - Discussions: Ask questions in the GitLab issues
- Documentation: Read the docs in
docs/
master ────────*────────*──────*─────────── ← stable (production)
\ / |
unstable ────*───*────*────*──*──────────── ← upstream merges + experiments
\ / \ /
feat/ fix/ docs/ ← short-lived feature branches
| Branch Pattern | Purpose | Source | Merges Into |
|---|---|---|---|
master |
Stable, production-ready | — | — |
unstable |
Upstream merges + X11 port | master |
master |
release/* |
Release hardening | master |
master (after hardening) |
feat/* |
New features | unstable |
unstable |
fix/* |
Bug fixes | unstable |
unstable |
docs/* |
Documentation | master |
master |
ci/* |
CI/CD changes | master |
master |
- Never commit directly to
master— always use merge requests - Feature branches should be short-lived (< 1 week)
- Squash merge when merging to
master unstableaccepts upstream merges + experimental work- Security fixes can bypass
unstableand go directly tomaster
- Fork the repository (or create a branch if you have access)
- Create a feature branch from the appropriate base:
git checkout unstable git pull origin unstable git checkout -b feat/my-feature
- Make your changes following the coding standards
- Write or update tests
- Commit your changes following the commit convention
- Push your branch and create a merge request
- Address review feedback
- Merge after approval
# Format your code
clang-format -i src/*.c src/*.h
# Run linter
clang-tidy src/*.c src/*.h -- -Ibuild/
# Build
meson setup build --prefix=/usr
meson compile -C build
# Run tests
meson test -C build
# Check for sanitizer issues
meson setup build-asan -Db_sanitize=address,undefined
meson compile -C build-asan
meson test -C build-asanThis project follows the Conventional Commits 1.0.0 specification.
<type>(<scope>)!: <description>
[optional body]
[optional footer(s)]
| Type | SemVer | When to Use |
|---|---|---|
feat |
MINOR | A new feature |
fix |
PATCH | A bug fix |
build |
— | Build system (meson, etc.) |
ci |
— | CI/CD configuration |
docs |
— | Documentation only |
perf |
— | Performance improvement |
refactor |
— | Code restructuring |
style |
— | Formatting (no logic change) |
test |
— | Adding/fixing tests |
revert |
— | Reverting a change |
chore |
— | Maintenance, tooling |
The scope should be a noun describing the code area:
feat(preferences) — Preferences dialog
fix(vte) — VTE integration
refactor(meson) — Build system
docs(readme) — README changes
ci(gitlab) — GitLab CI changes
Signal breaking changes with ! before the colon:
feat(api)!: remove deprecated TerminalScreen API
Or in the footer:
fix: fix memory leak in profile handling
BREAKING CHANGE: Profile storage format has changed.
feat(tabs): add middle-click to close tab
fix(vte): handle null pointer in resize callback
refactor(meson): split build config into subdirectory
docs(readme): add build instructions for NixOS
ci(gitlab): add nightly upstream merge pipeline
test(profiles): add unit tests for profile serialization
All commits must include a Signed-off-by line to certify that you have the right to submit the code under the project's license:
feat(terminal): add custom background opacity
Implement configurable background opacity in terminal preferences.
Signed-off-by: Your Name <your.email@example.com>
This certifies the Developer Certificate of Origin (DCO).
- C for core terminal functionality
- C++ where C++ features are beneficial
- Follow the existing code style in the project
- We use
clang-formatwith the project's.clang-formatconfig - Run
clang-format -i src/*.c src/*.h src/*.cc src/*.cppbefore committing - Line length: 100 characters max
- Indentation: 4 spaces (no tabs)
clang-tidyis configured in.clang-tidy- Run
clang-tidy src/*.c -- -Ibuild/before submitting - Warnings from bugprone and clang-analyzer checks are treated as errors
| Element | Convention | Example |
|---|---|---|
| Functions | camelCase | terminalWindowNew() |
| Variables | camelCase | activeProfile |
| Types/Classes | PascalCase | TerminalWindow |
| Constants | UPPER_CASE | MAX_TAB_COUNT |
| Enums | UPPER_CASE | TERMINAL_EXIT_SUCCESS |
- Author submits merge request
- CI pipeline runs automatically (must pass)
- At least 1 maintainer reviews and approves
- Author addresses feedback
- Maintainer merges (squash merge to
master) - Branch is deleted after merge
- Code follows project style (clang-format)
- No new clang-tidy warnings
- Tests pass
- ASan/UBSan clean
- Commit messages follow Conventional Commits
- Documentation updated if needed
- Changes are covered by tests
- No security concerns
- Unit tests are run with
meson test -C build - New features should include tests
- Bug fixes should include a regression test
- Sanitizer builds (ASan + UBSan) must pass
- Test on both X11 and Wayland when possible
- User-facing changes should update the README
- API changes should update the relevant docs in
docs/ - Commit messages are used to generate the CHANGELOG
Use the Bug Report template:
- Search existing issues first
- Use a clear, descriptive title
- Include exact steps to reproduce
- Include your environment details (distro, version, display server)
- Include terminal output if relevant
Security vulnerabilities: Do NOT file a public issue. See SECURITY.md.
Use the Feature Request template:
- Explain the problem you're trying to solve
- Describe the solution you'd like
- Consider alternative approaches
- Include mockups or examples if helpful
By contributing, you agree that your contributions will be licensed under the GNU General Public License v3.0 or later.