Thank you for your interest in contributing to Ech0.
To keep collaboration smooth, please read this document and follow the conventions below.
- Bug reports: use GitHub Issues.
- Feature discussion: prefer GitHub Discussions.
- Security vulnerabilities: do not file public issues; follow the private disclosure process in
SECURITY.md.
- Go
1.26.0+ - A working C toolchain (CGO is used, e.g. for SQLite)
Common commands (repository root):
make run
make dev
make check # full local verification before a PR (delegates to dev-lint)
make dev-lint # backend fmt/lint + web format/lint + i18n- Node.js
25.5.0+ - pnpm
10+
Common commands (web directory):
pnpm install
pnpm dev
pnpm build
pnpm lint- Fork this repository and create a feature branch (e.g.
feat/xxx,fix/xxx). - Keep changes focused: one PR should ideally address one kind of change.
- Before opening a PR, run
make check(ormake dev-lint) from the repository root (required; see “Pre-submission checks”). - Open a Pull Request with a clear description of context, approach, and verification.
Before opening a PR:
- Run
make check(ormake dev-lint) once from the repository root (backendgolangci-lintfmt/lint,webformat/lint, and i18n guardrails). This is mandatory; fix any reported issues before you submit. - Ensure the backend still builds (
go build ./...). - Ensure the frontend still builds (
pnpm buildfrom thewebdirectory). - Add or update tests when behavior changes (when applicable).
- Update documentation when changes affect users or deployment.
- Regenerate Swagger/OpenAPI when HTTP routes, request/response shapes, or
swagannotations change: from the repository root runswag init -g internal/server/server.go -o internal/swagger, then commit the updated files underinternal/swagger/.
Your PR description should include:
- Purpose (why the change is needed).
- What changed (main edits).
- How you verified (how to confirm it works).
- Impact (compatibility, migration, rollback notes if relevant).
For large changes, consider splitting into smaller, reviewable PRs.
Maintainers cutting a new release should follow the documented procedure in docs/dev/release-process.md. User-visible changes per release are tracked in CHANGELOG.md; add an entry under [Unreleased] whenever your PR introduces a change a self-hoster needs to know about.
- Match existing project style and layout; avoid introducing patterns that conflict with current conventions.
- Avoid unrelated refactors and large-scale formatting-only changes.
- Follow existing naming conventions (e.g. layered package aliases).
By contributing code to Ech0, you agree that your contributions are licensed under the project’s current open-source license (AGPL-3.0).