Thanks for your interest in contributing to Egressor! This document explains how to get started.
- Go 1.24+
- Node.js 22+
- Xcode Command Line Tools (macOS, for desktop UI builds)
git clone https://github.com/ehsaniara/egressor.git
cd egressor
# Build the frontend
cd internal/ui/frontend && npm install && npm run build && cd ../../..
# Build the binary (macOS with desktop UI)
CGO_LDFLAGS="-framework UniformTypeIdentifiers" go build -tags production -o egressor ./cmd/egressor
# Build headless only (any platform, no CGO)
go build -o egressor ./cmd/egressorgo test ./internal/...Run go vet before submitting:
go vet ./...- Search existing issues first to avoid duplicates
- Use the Bug Report issue template
- Include your OS, Go version, and steps to reproduce
- Open a Feature Request issue
- Explain the use case and why it would benefit Egressor users
- Fork the repository
- Create a feature branch from
main:git checkout -b feature/my-change
- Make your changes
- Add or update tests for any new functionality
- Ensure all tests pass:
go test ./internal/... - Ensure
go vet ./...reports no issues - Commit with a clear message describing what and why
- Push to your fork and open a pull request against
main
- Keep PRs focused on a single change
- Include a clear description of what the PR does and why
- Add tests for new functionality
- Update documentation if behavior changes
- Make sure CI passes before requesting review
cmd/egressor/ Entry point
internal/
proxy/ TCP/HTTPS interception
policy/ Policy engine (scope, patterns, tags, keywords)
audit/ Session logging and storage
ca/ CA certificate generation
extract/ File reference detection
config/ YAML config loading
tray/ macOS system tray
ui/ Wails desktop UI + React frontend
- Follow standard Go conventions (
gofmt,go vet) - Keep packages focused and well-scoped
- Use
slogfor structured logging - Write table-driven tests where appropriate
- Handle errors explicitly with context
By contributing, you agree that your contributions will be licensed under the MIT License.