Thank you for your interest in contributing. This document explains how to get set up, run checks, and open a pull request.
- To run the app: macOS (cowardly is macOS-only at runtime).
- To build, test, and lint: either use the dev container (recommended on Linux/WSL or if you prefer a container) or install locally:
- Go 1.25.6+ — Install Go
- Optional for local checks: golangci-lint, prettier, yamllint (CI will run these on your PR if you don’t have them).
Option A — Dev container (macOS, Linux, WSL)
- Fork the repo on GitHub, clone your fork, then open it in VS Code or Cursor.
- Install the Dev Containers extension.
- Run “Reopen in Container” from the command palette. The container provides Go, make, Prettier, yamllint, and golangci-lint.
- In the container terminal, run
make buildandmake testto confirm everything works. (The TUI itself only runs on macOS; use the host if you need to test it.)
Option B — Local (macOS)
-
Fork the repository on GitHub, then clone your fork:
git clone https://github.com/YOUR_USERNAME/cowardly.git cd cowardly -
Build and run to confirm everything works:
make build make run
See README.md for usage and docs/SETUP.md for repo setup (Renovate, Gitleaks, etc.).
-
Create a branch for your change:
git checkout -b feat/my-feature
-
Make your edits. Some pointers:
- New presets — Add a YAML file under configs/presets/. No Go code needed. See docs/ADDING-PRESETS.md for the format.
- Project layout — docs/PROJECT-LAYOUT.md and docs/FEATURES.md describe the codebase. Ideas for improvements are in docs/FUTURE.md.
-
Run checks before opening a PR:
make test make lint make format-check make lint-yamlFix any failures so CI passes.
-
Commit and push to your fork, then open a pull request with a short description of the change.
| Command | Description |
|---|---|
make build |
Build binary to bin/cowardly |
make run |
Build and run the TUI |
make dev |
Clean, then build and run |
make test |
Run tests |
make lint |
Run golangci-lint |
make fmt |
Format Go code and tidy modules |
make format |
Format Markdown/YAML/JSON with Prettier |
make format-check |
Check formatting (CI) |
make lint-yaml |
Run yamllint on YAML files |
- Keep PRs focused; prefer smaller changes over large ones.
- For bugs or new features, opening an issue first is welcome (not required).
- CI runs on every push and PR: gitleaks, prettier (format check), yaml-lint. All must pass before merge.
- Maintainers will review and may request changes.
- README.md — Install, usage, presets
- docs/ADDING-PRESETS.md — How to add a preset
- docs/PRIVACY-GUIDES.md — Privacy Guides supplement
- docs/PROJECT-LAYOUT.md — Directory structure
- docs/FUTURE.md — Possible improvements
- .github/workflows/README.md — CI workflows