aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-07-14 09:15:25 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-07-14 12:04:36 +0300
commitfe2c2eec29492b169a834e066deac84ea3bfe013 (patch)
treed131ae6b16f15bdcdbef7f0d867fb633bf06cf1a
parent746a7e81b79f8b663e0ab393ab2f192340da38e2 (diff)
downloadniri-fe2c2eec29492b169a834e066deac84ea3bfe013.tar.gz
niri-fe2c2eec29492b169a834e066deac84ea3bfe013.tar.bz2
niri-fe2c2eec29492b169a834e066deac84ea3bfe013.zip
Add CONTRIBUTING.md
-rw-r--r--CONTRIBUTING.md95
1 files changed, 95 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..64eea3d8
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,95 @@
+# Contributing to niri
+
+Thanks for your interest in niri!
+The project has grown quite a bit, and we could use all help that we can.
+
+Make sure to join our Matrix chat if you have any questions or want to discuss anything: https://matrix.to/#/#niri:matrix.org
+
+## Issues and discussions
+
+This is a good way to help many new and existing users without programming knowledge.
+
+- Answer and help people in GitHub issues and discussions.
+- Check and point out duplicate issues.
+- Check for issues that are likely application bugs (and not niri bugs).
+ - Ask or try to reproduce on another non-Smithay-based compositor (sway, KDE/KWin, GNOME/Mutter). If the issue reproduces, it's likely an application bug.
+ - Ask or try to reproduce on another *Smithay-based* compositor ([cosmic-comp], [anvil]). If the issue reproduces only on Smithay compositors, it may be a Smithay bug.
+ - Make sure you're testing the Wayland version of the app on all compositors. Apps may silently use X11 when an X11 `$DISPLAY` is available.
+ - Problems with X11 apps should be reported to [xwayland-satellite]. When testing xwayland-satellite on different compositors, make sure you use xwayland-satellite's `$DISPLAY` (rather than another compositor's built-in Xwayland `$DISPLAY`).
+ - After testing, mention where you could and couldn't reproduce, as well as the exact steps to reproduce if the issue is missing them.
+- Try to reproduce the issue on your own system and write if you could or couldn't reproduce it.
+- Upvote issues with a thumbs up reaction as you like.
+- Ideas and feature requests from new users should go to Discussions.
+
+If your issue is a duplicate, or not a niri issue (application bug, hardware problem, configuration problem), then please close it.
+
+## Reviewing and testing pull requests
+
+With the growing popularity, the volume of pull requests is honestly more than I can manage myself in my free time.
+I would really appreciate help with testing and reviewing them.
+
+### Testing
+
+Pick a pull request you like, then build it and give it a go.
+The [Developing niri wiki page](https://github.com/YaLTeR/niri/wiki/Developing-niri) has guidance on running niri test builds.
+
+Be really thorough with your testing.
+We're striving for polished features in niri, so point out any issues and bugs, even small ones like animation jank.
+
+- Think of weird edge cases or unexpected interactions and try them to see that they work reasonably.
+- Try to break the feature and check that it behaves well.
+- Where applicable, try different input devices: keyboard, mouse, trackpad, tablet, touchscreen.
+- Watch out for any new performance drops.
+
+For bug fixes, first make sure you can reproduce the bug, then do the same steps in the PR test build, and verify that the bug is fixed.
+Be similarly thorough: test any similar or related edge cases to verify that the fix doesn't introduce any new problems.
+
+Write your findings in the pull request: any issues you found, or if everything worked well.
+Re-test after the author updates the code to see that your issues were fixed.
+
+Don't hesitate to test even if someone else already did; very frequently different people will stumble upon different problems.
+
+### Reviewing
+
+Reviewing pull requests is something I need the most help with since there are a lot of them, and it's quite time-consuming.
+Anyone with code accepted into niri is welcome, but this is not a requirement; even if you aren't familiar with Rust you may find some logic problems.
+
+Pick a pull request, then review its code.
+
+- Check that everything looks good, check various conditions for edge cases.
+- See if there are any scenarios the author forgot to handle.
+- Check that the code fits well into the rest of niri, follows its design and code style.
+ - I understand this is vague. The idea is: look at the surrounding code and at similar modules (e.g. when implementing a new protocol, check other protocol implementations), and try to follow the style and structure.
+- Check for unrelated changes that may be better split into their own pull request.
+- Check that the wiki had been updated if necessary (for example, new config options were documented with examples, and have a correct Since annotation).
+
+Point out everything you find as review comments (don't forget to submit the review).
+Be constructive and respectful; some people may be new to programming and Rust.
+As the author addresses the comments and issues, check the code again to see that the problems were fixed.
+If everything looks good, say that, so I know someone has reviewed the PR.
+
+As with testing, don't hesitate to look through and comment even if someone else already had.
+Extra pairs of eyes catch more problems.
+
+## Writing pull requests
+
+When creating pull requests, please keep the following in mind.
+
+- Make sure new features align with niri's design directions. Ideally, there should be an existing issue or discussion where we settled on that solution.
+- Keep pull requests focused on a single feature or bug fix with no unrelated changes.
+- Try to split your changes into small, self-contained commits. Every commit should build and pass tests. This makes it much easier to review your PR, and bisect for regressions in the future.
+ - When addressing PR comments, try to squash the changes straight into the relevant commits.
+ - In some cases when the requested changes are big/unclear, you can leave them as separate commits on top, but please squash and otherwise clean up the history when the changes are finalized.
+ - To update the main branch, please rebase instead of merging. Try to force-push the main update rebase separately from other changes, this way it's easy to skip during review since it's usually not interesting.
+ - When working on bigger features, I usually start with a big messy commit, then gradually split out smaller self-contained changes from it as the code gets into shape.
+ - [git-rebase.io](https://git-rebase.io/) is a helpful guide for splitting commits and cleaning up history in git.
+- When you address a review comment, mark it as resolved.
+- Remember to [run tests](https://github.com/YaLTeR/niri/wiki/Developing-niri#tests) and format the code with `cargo +nightly fmt --all`.
+- For new layout actions, remember to add them to the randomized tests. For weird Wayland handling, adding client-server tests in `src/tests/` could be very useful.
+- Remember to document new config options on the wiki.
+- When opening a pull request, ensure "Allow edits from maintainers" is enabled, so I can make final tweaks before merging.
+
+
+[cosmic-comp]: https://github.com/pop-os/cosmic-comp
+[anvil]: https://github.com/Smithay/smithay/tree/master/anvil
+[xwayland-satellite]: https://github.com/Supreeeme/xwayland-satellite