Thank you for your interest in contributing to Den! This guide will help you get started.
- Go 1.23+
- Docker running locally
- golangci-lint
git clone https://github.com/us/den
cd den
go build -o den ./cmd/den# Unit tests
go test ./internal/... -short -v
# With race detector
go test ./internal/... -race -count=1 -v
# Integration tests (requires Docker)
go test ./tests/integration/... -v./den serve
# Or with custom config
./den serve --config den.yaml- Fork the repository and create a feature branch from
main - Branch naming:
feat/description,fix/description,refactor/description - Write tests for new functionality
- Ensure all tests pass:
go test ./internal/... -race - Run the linter:
golangci-lint run - Commit using Conventional Commits:
feat:new featuresfix:bug fixesrefactor:code restructuringdocs:documentationtest:testsci:CI/CD changesperf:performance improvements
- Open a PR against
mainwith a clear description
- Follow standard Go conventions (
gofmt,go vet) - Use
slogfor structured logging - Use
context.Contextas the first parameter in functions that do I/O - Handle errors explicitly — do not ignore them
- Write table-driven tests where appropriate
cmd/den/ — CLI entry point and commands
internal/
api/ — HTTP handlers, middleware, WebSocket
config/ — Configuration loading and validation
engine/ — Core sandbox lifecycle management
mcp/ — Model Context Protocol server
runtime/docker/ — Docker runtime implementation
storage/ — Volume, tmpfs, and S3 storage
store/ — BoltDB persistence
pathutil/ — Path validation utilities
pkg/client/ — Go SDK (public API)
sdk/
typescript/ — TypeScript SDK
python/ — Python SDK
- Use GitHub Issues for bug reports and feature requests
- Include Den version, OS, Docker version, and reproduction steps
- For security vulnerabilities, see SECURITY.md
By contributing, you agree that your contributions will be licensed under the AGPL-3.0 License.