Thanks for your interest in contributing! modkit is in early development, so the best way to help is to coordinate with maintainers before large changes.
- Go 1.25.x (CI pinned to 1.25.7)
- Docker (for running the example app)
- Make
See the Stability and Compatibility Policy for toolchain and upgrade expectations.
git clone https://github.com/go-modkit/modkit.git
cd modkit
go test ./...cd examples/hello-mysql
make runThen test:
curl http://localhost:8080/health
curl http://localhost:8080/usersAfter cloning, ensure $GOPATH/bin is in your PATH:
# Add to your shell profile (.bashrc, .zshrc, etc.)
export PATH="$(go env GOPATH)/bin:$PATH"Then run once to enable commit message validation:
make setup-hooksThis installs git hooks that validate commit messages follow Conventional Commits format:
<type>(<scope>): <short summary>
Examples:
feat: add user authenticationfix(http): handle connection timeoutdocs: update installation guide
Valid types: feat, fix, docs, test, chore, refactor, perf, ci
Note: Commit message headers must be <=80 characters.
make fmtRuns gofmt and goimports.
make lintRuns golangci-lint. See .golangci.yml for configuration.
make vulnRuns govulncheck.
make testThese are the same checks used by the CI cli-smoke job:
make cli-smoke-build
make cli-smoke-scaffoldmake toolsmake tools installs tool versions pinned by the repository.
- Check existing issues to avoid duplicating work
- For large changes, open an issue first to discuss the approach
- Read the Architecture Guide to understand the codebase
- Fork the repository
- Update
mainand create a feature worktree branch:git fetch origin && git switch main && git pull --ff-only origin maingit worktree add .worktrees/my-feature -b feat/my-feature main- Work from
.worktrees/my-feature(do not commit onmain)
- Make your changes with tests
- Run
make fmt && make lint && make vuln && make test && make test-coverage- Also run CLI gate:
make cli-smoke-build && make cli-smoke-scaffold
- Also run CLI gate:
- Commit with a conventional prefix (
feat:,fix:,docs:,chore:) - Open a pull request with a clear description
feat:— New featurefix:— Bug fixdocs:— Documentation onlytest:— Test changeschore:— Build, CI, or tooling changesrefactor:— Code change that doesn't fix a bug or add a feature
- Follow Go formatting (
gofmt) - Keep exported API minimal
- Prefer explicit errors over panics
- Write tests for new functionality
This project follows the Code of Conduct.
New to modkit? Look for issues labeled good first issue for beginner-friendly tasks:
- Documentation improvements
- Test coverage
- Example app enhancements
- Bug fixes with clear reproduction steps
Open an issue or start a discussion. We're happy to help!
Maintainer triage targets, labeling flow, and adoption KPI cadence are documented in Maintainer Operations.
Releases are automated using Release Please.
When changes are merged to main, Release Please updates or creates a release PR based on commit messages. Merging that release PR creates the version tag and GitHub Release:
| Commit Type | Release Action | Example |
|---|---|---|
feat: |
Minor version bump (0.1.0 -> 0.2.0) | New API method |
fix: |
Patch version bump (0.1.0 -> 0.1.1) | Bug fix |
feat!: or BREAKING CHANGE |
v0.x: minor bump; v1+: major bump | Breaking API change |
docs:, chore:, refactor:, test:, ci: |
No release | Documentation, tooling |
modkit follows Semantic Versioning:
- v0.x.x (current): API is evolving. Breaking changes (
feat!:) bump the minor version (0.1.0 → 0.2.0) due toallow-initial-development-versionssetting - v1.0.0 (future): Stable API with backward compatibility guarantees. Breaking changes will bump major version (1.0.0 → 2.0.0)
- v2+: Major versions for breaking changes (requires
/v2import path)
go get github.com/go-modkit/modkit@v0.1.0
go get github.com/go-modkit/modkit@latest