Ways to Contribute
You can contribute to listmonk in several ways:- Report Bugs - Help identify and document issues
- Suggest Features - Propose enhancements that benefit the community
- Improve Documentation - Submit corrections and improvements
- Translate - Add or update language translations
- Submit Code - Contribute bug fixes and new features via pull requests
Before You Start
listmonk is free and open source software maintained by volunteers who share it with the world for free. Please be respectful of maintainers’ time and expertise.
Code of Conduct
When participating in the listmonk community:- Be respectful - Use friendly, professional language
- Be patient - Maintainers owe you nothing; they contribute their time voluntarily
- Do your research - Search existing issues and documentation before asking
- Be collaborative - Focus on constructive discussions
- Don’t demand - Feature requests are suggestions, not requirements
- Avoid nitpicking - Stay focused on meaningful improvements
Reporting Bugs
Good bug reports are extremely helpful for improving listmonk.Search for existing issues
Before creating a new bug report, search the GitHub issues to avoid duplicates.
Use the bug report template
When creating a bug report:
- Use the bug reporting issue template
- Provide a clear, concise description
- Include steps to reproduce the bug
- Describe expected vs actual behavior
- Include version information, environment details, and logs
- Add screenshots if applicable
Bug Report Checklist
- Searched existing issues for duplicates
- Clear description of the problem
- Step-by-step reproduction instructions
- Expected behavior documented
- Actual behavior documented
- listmonk version and environment details
- Relevant logs or error messages
- Screenshots (if applicable)
Suggesting Features
Feature suggestions help shape listmonk’s future, but they must align with the project’s scope and goals.Check for existing requests
Search existing issues to ensure your idea hasn’t already been suggested.
Clearly explain the feature
When requesting a feature:
- Explain why it’s needed (not just what)
- Describe the problem it solves
- Explain how it benefits many users (not just you)
- Consider how it fits listmonk’s scope and philosophy
- Provide technical details if possible
- Suggest implementation approaches
It is your responsibility as the requester to clearly explain and justify why a change is warranted. Maintainers may close unclear feature requests that lack sufficient detail.
Improving Documentation
Documentation improvements are always welcome!Documentation Repository
The documentation website is available at listmonk.app/docs. You can submit corrections and improvements to the docs repository.Types of Documentation Contributions
- Fix typos and grammatical errors
- Clarify existing explanations
- Add missing information
- Update outdated content
- Add examples and use cases
- Improve organization and navigation
Contributing Translations
listmonk is available in 34+ languages thanks to community contributions.How to Contribute Translations
- New language packs - Create a new language file based on
i18n/en.json - Update existing translations - Improve or complete existing language files
- Fix translation errors - Correct mistakes in existing translations
Translation Workflow
There is a UI tool available to make translations easier. See the i18n documentation for detailed instructions.Choose your approach
- Manual: Copy and edit JSON files
- Tool-assisted: Use the translation UI at listmonk.app/docs/i18n
Create your translation
Follow the Internationalization guide for:
- File structure and format
- Translation guidelines
- Testing procedures
Pull Requests
Submitting code contributions requires careful consideration and preparation.Understanding Pull Requests
Pull requests can be challenging for several reasons:- They must align with the project’s scope, goals, and technical standards
- Code quality, style, and conventions must match the project’s standards
- Performance, usability, and stability impacts must be understood
- Reviewing PRs often requires more time than creating them
Pull Request Guidelines
Send a proposal first
Before writing code, open an issue describing:
- What you aim to accomplish
- Why it makes sense for the project
- How you plan to implement it (with technical details)
- Any potential impacts or trade-offs
Keep PRs small and focused
- Send small PRs with well-defined scopes
- One feature or fix per PR
- Avoid bundling multiple unrelated changes
- Smaller PRs are easier to review and test
Follow code standards
Ensure your code follows listmonk’s conventions:Go Code:
- Follow Go standard formatting (
gofmt) - Write clear, idiomatic Go
- Include comments for exported functions
- Add tests where appropriate
- Follow ESLint configuration (
.eslintrc.js) - Use Vue.js best practices
- Match existing code style
- Test in the browser
Test thoroughly
Before submitting:
- Test your changes locally
- Verify builds succeed:
make dist - Run tests:
make test - Test in production-like conditions
- Document testing steps in the PR
Write clear PR descriptions
Your PR should include:
- Clear description of what changed
- Why the change was made
- How it was tested
- Any breaking changes or migrations needed
- Screenshots (for UI changes)
- Related issue numbers
PRs may change considerably with multiple commits before approval. Once approved, PRs with multiple commits will be squashed into a single commit during merging.
What Not to Do
- ❌ Skip the proposal step for significant changes
- ❌ Submit large, monolithic PRs
- ❌ Bundle multiple unrelated features
- ❌ Ignore code style and linting rules
- ❌ Submit untested code
- ❌ Be defensive about feedback
- ❌ Demand immediate review or merging
PR Checklist
- Opened an issue to discuss the change first
- PR addresses a single, well-defined problem
- Code follows project conventions and style
- Builds successfully (
make dist) - Tests pass (
make test) - Tested locally and documented testing approach
- PR description is clear and complete
- Commits are clean and well-organized
- No debugging code or commented-out code
- Documentation updated (if needed)
Code Style Guidelines
Backend (Go)
- Use
gofmtfor formatting - Follow Effective Go principles
- Keep functions focused and small
- Write meaningful comments for exported items
- Handle errors explicitly
- Use meaningful variable names
- Keep dependencies minimal
Frontend (Vue.js)
- Follow the ESLint configuration in
.eslintrc.js - Use Vue.js conventions and best practices
- Keep components focused and reusable
- Use Vuex for global state management
- Follow the AirBnB style guide (configured in ESLint)
- Use camelCase for JavaScript (backend expects snake_case)
General Guidelines
- Write self-documenting code
- Add comments for complex logic
- Keep files organized and focused
- Remove dead code and TODOs
- Avoid over-engineering
Testing Requirements
Backend Testing
Run Go tests before submitting:- Add unit tests for new functions
- Ensure existing tests pass
- Test edge cases and error conditions
Frontend Testing
Test UI changes:- Test in latest Chrome/Firefox/Safari
- Check responsive design on mobile
- Verify translations still work
- Test with keyboard navigation
- Check for console errors
Integration Testing
For significant changes:- Test the complete build:
make dist - Run in Docker to test packaging
- Test database migrations
- Test upgrade path from previous version
Documentation Updates
When submitting code changes, update documentation if:- You add new features or functionality
- You change existing behavior
- You add new configuration options
- You modify APIs or interfaces
- You change installation or setup procedures
Development Setup
Before contributing code, set up your development environment:- See the Developer Setup guide
- Fork the repository on GitHub
- Clone your fork locally
- Create a feature branch for your changes
- Make changes and test locally
- Push to your fork and create a pull request
Git Workflow
License
By contributing to listmonk, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).What This Means
- listmonk is free and open source software
- You can redistribute and modify it under AGPL-3.0 terms
- If you run a modified version as a network service, you must make your source code available
- Your contributions become part of the AGPL-3.0 licensed codebase
Read the full LICENSE for complete terms.
Copyright
By submitting a contribution:- You certify that you have the right to submit the contribution
- You agree to license your contribution under AGPL-3.0
- You understand your contribution will be publicly available
Getting Help
If you need help contributing:- Documentation: Check the official docs
- Existing Issues: Search GitHub issues
- Discussions: Join discussions on GitHub
- Code: Review existing code for examples
Recognition
Contributors are recognized in:- GitHub contributor graphs
- Release notes (for significant contributions)
- The project’s commit history
Summary
Contributing to listmonk is rewarding and helps thousands of users worldwide. Remember:- Be respectful - Maintainers are volunteers
- Do your research - Check docs and existing issues
- Propose first - Discuss significant changes before coding
- Stay focused - Small, focused PRs are better
- Test thoroughly - Verify your changes work
- Be patient - Reviews take time