The following is a set of guidelines for contributing to nginx project. We really appreciate that you are considering contributing!
To ask a question, open an issue on GitHub with the label question
.
To report a bug, open an issue on GitHub with the label bug
using the
available bug report issue template. Before reporting a bug, make sure the
issue has not already been reported.
To suggest a feature or enhancement, open an issue on GitHub with the label
feature
or enhancement
using the available feature request issue template.
Please ensure the feature or enhancement has not already been suggested.
If you want to engage in a conversation with the community and maintainers, we encourage you to use GitHub Discussions.
Follow this plan to contribute a change to NGINX source code:
Refer to NGINX Development Guide for questions about NGINX programming.
Changes should be formatted according to the code style used by NGINX; sometimes, there is no clear rule, in which case examine how existing NGINX sources are formatted and mimic this style; changes will more likely be accepted if style corresponds to the surrounding code
Keep a clean, concise and meaningful commit history on your branch, rebasing locally and breaking changes logically into commits before submitting a PR
Each commit message should have a single-line subject line followed by verbose description after an empty line
Limit the subject line to 67 characters, and the rest of the commit message to 76 characters
Use subject line prefixes for commits that affect a specific portion of the code; examples include "Upstream:", "QUIC:", or "Core:"; see the commit history to get an idea of the prefixes used
Reference issues in the the subject line; if the commit fixes an issue, name it accordingly
The proposed changes should work properly on a wide range of supported platforms
Try to make it clear why the suggested change is needed, and provide a use case, if possible
Passing your changes through the test suite is a good way to ensure that they do not cause a regression; the repository with tests can be cloned with the following command:
git clone https://github.com/nginx/nginx-tests.git
To ensure a balance between work carried out by the NGINX engineering team while encouraging community involvement on this project, we use the following issue lifecycle:
A new issue is created by a community member
An owner on the NGINX engineering team is assigned to the issue; this owner shepherds the issue through the subsequent stages in the issue lifecycle
The owner assigns one or more labels to the issue
The owner, in collaboration with the wider team (product management and engineering), determines what milestone to attach to an issue; generally, milestones correspond to product releases