CONTRIBUTING.md:3, Caddy wouldn’t be nearly as excellent without your involvement!
Getting Started
Join the Community
FromCONTRIBUTING.md:6:
- Caddy Community Forum - Discussion, questions, and support
- GitHub Issues - Bug reports and feature requests only
- Twitter/X: @caddyserver
Use the forum for questions and discussions. Issues are for actionable development items.
Ways to Contribute
Contributing Code
FromCONTRIBUTING.md:24, to contribute code:
Propose your change first
From
CONTRIBUTING.md:32:Open an issue to propose your change first. This helps:- Avoid confusion and wasted effort
- Coordinate what everyone is working on
- Ensure changes align with project goals
- Discuss the best implementation approach
Create pull request
Create a pull request to merge your changes into
caddyserver/caddy @ master.Writing a Caddy Module
FromCONTRIBUTING.md:84:
Caddy modules are Go libraries that extend Caddy’s functionality. Anyone can write one!
- Learn: Module Development Guide
- Tutorial: Plugin Tutorial
- Discuss: Share your module on the forums
Third-party modules are not tracked in the Caddy issue tracker.
Getting Help Using Caddy
FromCONTRIBUTING.md:90:
Ask on the forum! More people can help you there than just the Caddy developers.
Reporting Bugs
FromCONTRIBUTING.md:97:
Search existing issues
Search the issues to see if it’s already reported.
Open a new issue
If not found, open a new issue.
CONTRIBUTING.md:102:
Please simplify the issue as much as possible. The burden is on you to make it easily reproducible.
Recommended reading: How to Report Bugs Effectively
Bug Reporting Expectations
FromCONTRIBUTING.md:110, maintainers need:
-
Agreement that it’s a bug (reporter’s responsibility)
- Must be unintentional, undesired, or surprising behavior
- Must violate documentation or specs
-
Ability to understand what’s happening (mostly reporter’s responsibility)
- Provide reproducible steps, OR
- Be prepared to test possible solutions
-
A solution (mostly maintainer’s responsibility)
- May be a documentation change
- Security and correctness take priority
CONTRIBUTING.md:126:
At minimum, the reporter must:
- Convince the reader it’s a bug in Caddy (if not obvious)
- Reduce to minimum steps required to reproduce
Suggesting Features
FromCONTRIBUTING.md:136:
- Search existing requests first
- If new, open an issue requesting the feature
- Describe thoroughly so we know how to implement it
Not all features are a good fit for Caddy core. Many make excellent modules!
Improving Documentation
FromCONTRIBUTING.md:143:
Documentation lives at caddyserver.com/docs.
Source: github.com/caddyserver/website
Submit issues there describing changes to make.
Code Contribution Standards
FromCONTRIBUTING.md:30, we hold contributions to a high standard for quality :bowtie:
Expected Practices
Keep pull requests small
From
CONTRIBUTING.md:34:Smaller PRs are more likely to be merged because they’re easier to review!We might ask you to break up large PRs.Keep related commits together
From
CONTRIBUTING.md:36:Keep multiple related commits in the same PR if they rely on each other.Write tests
From
CONTRIBUTING.md:38:Good, automated tests are very valuable! They:- Ensure your change works
- Prevent future changes from breaking yours
- Must pass CI checks
Include benchmarks for optimizations
From
CONTRIBUTING.md:40:Optimizations should be proven with benchmarks and profiling.Squash insignificant commits
From
CONTRIBUTING.md:42:Every commit should be significant. Use:- Interactive rebase, OR
git reset --soft <diverging-commit>thengit commit -s
Code Certification
FromCONTRIBUTING.md:50, you certify that you:
- Wrote and comprehend the code you submit
- Comply with the CLA
- Have rights to contribute the code
CONTRIBUTING.md:56:
Current language models may produce code that looks correct but fails in subtle ways. You are responsible for the code you submit.
Pull Request Lifecycle
FromCONTRIBUTING.md:48:
Pull requests may still get closed. Reasons:
- Not a priority
- Only useful to you, not generally helpful
- Wrong thing or wrong time
- Doesn’t align with project goals
Code Review Process
FromCONTRIBUTING.md:28:
Don’t be surprised if we ask for revisions. Please don’t take it personally. :blue_heart:
If your change is on the right track, we can guide you to make it mergeable.
For Collaborators
FromCONTRIBUTING.md:152, collaborators should:
- Review thoroughly but kindly
-
Ask:
- Can it be more elegant?
- Is it a maintenance burden?
- What assumptions does it make?
- Is it well-tested?
- Is it a good fit?
- Does it fix the root problem?
- Any new dependencies? (Avoid!)
- Answer issues and help debug
- Wait for approvals before merging (1-2 other collaborators)
- Prefer squashed commits over messy merges
- Don’t accept dependencies lightly
-
Be extra careful in
caddyhttpandcaddytlspackages - Verify tests actually test what they claim
Making a Pull Request
FromCONTRIBUTING.md:63:
Fork the repo
Fork caddyserver/caddy on GitHub.
Commit changes
Create PR
Create a pull request from your fork to
caddyserver/caddy @ master.Becoming a Collaborator
FromCONTRIBUTING.md:60:
We often grant collaborator status to contributors who author one or more significant, high-quality PRs that are merged.
Project Values
FromCONTRIBUTING.md:184:
- A person is always more important than code. Be kind, patient, and considerate.
- The ends justify the means, if the means are good. Don’t cut corners.
Security Policy
FromCONTRIBUTING.md:191:
If you think you’ve found a security vulnerability, see our Security Policy.
Support and Sponsorship
FromREADME.md:203:
- Companies: Secure a support contract through Ardan Labs
- Sponsorship: Consider sponsoring the project
- Individuals: Exchange help for free on the forum
Recommended Reading
FromCONTRIBUTING.md:175:
- CodeReviewComments - Go code review guidelines
- Good commit messages - By Linus Torvalds
- Best Practices for Maintainers
- Shrinking Code Review
Next Steps
Module Development
Create your own Caddy module
Testing Guide
Learn how to test your contributions
Building from Source
Set up your development environment
Caddy Community
Join the discussion forum