Thank you for considering a contribution. This document explains how to get started.
- Bug reports — open an issue describing the problem, steps to reproduce, and your OS/Go version
- Feature requests — open an issue describing the use case before writing any code
- Code contributions — see the workflow below
- Documentation — fixing typos, clarifying examples, improving the README
Requirements: Go 1.22+, WSL or Linux/macOS recommended (Windows has known network test issues).
git clone https://github.com/tofuwu-dev/proxychecker
cd proxychecker
go mod tidy
make testcmd/proxychecker/ — CLI entrypoint (Cobra)
internal/
proxy/ — proxy struct + input parser
checks/ — connectivity, anonymity, geo checks
checker/ — concurrent worker pool
output/ — table, JSON, CSV formatters
progress/ — progress bar
pkg/
httputil/ — HTTP client builder (HTTP + SOCKS5)
testdata/ — sample proxy lists for testing
- Fork the repository and create a branch from
main - Branch naming:
feat/your-featureorfix/your-bug - Write tests for any new behaviour
- Make sure all checks pass before opening a PR:
make test # all unit tests
make vet # static analysis
gofmt -l . # formatting check (should print nothing)- Open a pull request with a clear description of what changed and why
- Follow standard Go conventions — run
gofmtbefore committing - Exported symbols must have godoc comments starting with the symbol name
- Internal helpers should have a single-line comment explaining why, not what
- Keep functions focused — if a function needs more than one paragraph to explain, consider splitting it
- Table-driven tests are preferred for testing multiple input cases
Use the conventional commit format:
feat: add SOCKS4 proxy support
fix: handle IPv6 addresses in parser
docs: improve README install instructions
test: add edge cases for empty proxy list
refactor: simplify anonymity header detection
chore: update dependencies
The check system is designed to be extended. To add a new check (e.g. SSL certificate validation):
- Create
internal/checks/yourcheck.gowith aCheckYourThing(p px.Proxy, timeout time.Duration) YourResultfunction - Add
YourResultfields tointernal/checker/result.go - Add a
CheckYourThing boolflag toWorkerConfigininternal/checker/worker.go - Call it in
checkWithRetryafter the alive check, same pattern as anonymity and geo - Wire the flag in
cmd/proxychecker/main.go - Display it in
internal/output/table.go
Do not open a public issue for security vulnerabilities. Email the maintainer directly instead.
By contributing, you agree that your contributions will be licensed under the same MIT license as this project.