Contributing to Veil
May 11, 2026 · View on GitHub
Thanks for considering a contribution. Veil is small and pre-1.0; the scope is intentionally tight (keep secrets out of AI coding agents), so before sinking time into a large change, open an issue to discuss.
Build and test
make build # binary at bin/veil
make test # unit + integration tests
make test-race # tests with the race detector
make lint # golangci-lint
make vet # go vet
Tests use a swappable keystore controlled by VEIL_TEST_KEYSTORE=mem (set automatically by make test). The keychain on macOS and libsecret on Linux are exercised by make test-race builds.
Commit style
Commits use Conventional Commits — see git log for the prevailing pattern. feat(scope):, fix(scope):, test(scope):, docs(scope):, chore(scope):.
Filing issues
- Bugs: use the bug template. Include
veil --version, OS + version, the exact command, and a redacted log snippet if relevant. - Features: use the feature template. Lead with the problem, not the implementation.
- Security vulnerabilities: do not open a public issue. See SECURITY.md — use GitHub's private vulnerability reporting.
Pull requests
- Branch off
main. One logical change per PR. - Add or update tests for behavior changes. New providers (placeholder patterns) need at least one positive and one negative match test.
- The CI matrix runs on macOS and Ubuntu. Don't ignore failures on either.
- Be patient with review — this is a side project.
License
By contributing, you agree that your contributions are licensed under the project's MIT License. No CLA.
Where things live
The README has a project-structure map. In short: CLI entrypoint in cmd/veil/, command definitions in internal/cli/, the proxy in internal/proxy/, keychain abstraction in internal/vault/, and audit logging in internal/audit/. Each internal/<pkg>/ has its own tests next to the code.