Thank you for helping improve Dagu! We welcome contributions from everyone.
You do not need to understand the whole repository before making a useful first change.
First 15 Minutes
- Fork the repository and clone it locally.
- Pick a small issue, then comment on it to claim the work. Use the Discord server if you have questions or get stuck for 20 minutes; that is expected.
- Choose the track closest to your change:
| Track | Start with | First check |
|---|---|---|
| Docs / examples | A Markdown file or examples/ | No build is required; validate a changed DAG with dagu validate if you have the binary available |
| UI | ui/ | Start the backend with make run-server, then run cd ui && pnpm install && pnpm dev |
| One executor | internal/runtime/builtin/<name> | make test TEST_TARGET=./internal/runtime/builtin/<name> |
| API / CLI | internal/service/frontend/api/v1 or internal/cmd | make test TEST_TARGET=./internal/service/frontend/api/v1 or the matching package |
For a first PR, change only the files needed for the issue. You do not need to learn every package or run the full test suite before opening a focused PR.
How to Contribute
We welcome contributions of all kinds, including:
- Help other users by answering questions and providing support
- Suggest new features or improvements
- Improve documentation and examples, or provide use cases
- Refactor code for better readability and maintainability
- Fix bugs or add missing tests
- Add new features based on issue discussions
- Review and provide feedback on PRs
Development
Prerequisites depend on your track:
- Go 1.27 or newer for Go and backend changes (install Go).
- Node.js 18.18 or newer and pnpm for UI changes.
- Docs-only changes do not require the Go toolchain.
Building frontend assets:
make uiBuilding binary:
make binRunning Tests
Run the smallest relevant check first. For a Go package, pass its path through TEST_TARGET:
make test TEST_TARGET=./path/to/changed/packageFor UI changes:
cd ui
pnpm testDocs-only and example-only changes do not need Go tests. If an example changes a DAG, validate it with the dagu binary when available. CI and maintainers run the full suite; you do not need to run it before opening a focused first PR.
For the full local Go check:
make lint
make testRunning test with coverage:
make test-coverageFrontend
Starting the backend server on port 8080:
make run-serverStarting the development server:
cd ui
pnpm install
pnpm devOpen http://localhost:8081 to view the hot-reloading frontend.
Code Standards
- Write unit tests for any new functionality
- Aim for good test coverage on new code
- Test error conditions and edge cases
Pull Requests
Before submitting:
- [ ] The smallest relevant test or validation command passes
- [ ]
make lintpasses for Go changes when practical - [ ] New code includes tests when behavior changes
- Documentation updated if applicable
- Commit messages following the Go Commit Message Guidelines
Review Process
- All PRs are reviewed by maintainers.
- Community members are encouraged to review and provide feedback.
Issues
Bug Reports
When reporting bugs, please include:
- Operating system and version
- Steps to reproduce the issue (example DAG yaml is very helpful)
- Expected behavior
- Actual behavior
- Relevant logs or error messages
Feature Requests
When requesting features, please describe:
- Clearly describe the feature and its use case
- Explain why it would be valuable
- Consider backward compatibility
- Provide examples if possible
License
By contributing to Dagu, you agree that your contributions will be licensed under the GNU General Public License v3.0.

