Prerequisites
- Docker (for running services locally)
- Git
- macOS or Linux
Installation
Install Nix with Determinate Systems installer
The Determinate Systems installer provides a production-ready Nix setup with sensible defaults.
Install direnv and nix-direnv
These tools automatically activate the development environment when you enter the project directory.
Configure direnv shell hook
Add the following to your shell configuration file:Then reload your shell:
Activate the development environment
Allow direnv to load the environment:
The first time you run this, devenv will download and install all required tools including Go 1.26, Node.js 24, kubectl, Tilt, buf, and more. This may take several minutes.
Included Tools
Once the devenv shell is activated, you’ll have access to the following tools:Core Development
| Tool | Version | Purpose |
|---|---|---|
go | 1.26 | Go compiler and toolchain |
nodejs | 24 | Node.js runtime for frontend and Node.js services |
buf | Latest | Protocol Buffers toolchain |
git | Latest | Version control |
Kubernetes & Cloud Native
| Tool | Version | Purpose |
|---|---|---|
kind | Latest | Local Kubernetes clusters |
kubectl | Latest | Kubernetes CLI |
helm | Latest | Kubernetes package manager |
tilt | Latest | Local Kubernetes development environment |
Debugging & Utilities
| Tool | Version | Purpose |
|---|---|---|
grpcurl | Latest | gRPC debugging CLI |
protobuf | Latest | Protocol Buffers compiler |
watchexec | Latest | File watching utility |
skopeo | Latest | Container image operations |
Code Quality
| Tool | Version | Purpose |
|---|---|---|
golangci-lint | Latest | Go linter (installed on first use) |
goimports | Latest | Go import formatter (installed on first use) |
treefmt | Latest | Multi-language formatter |
Tools like
golangci-lint and goimports are automatically installed to .devenv/go-bin/ when you first enter the shell. This ensures they’re built with the same Go version as your project.Custom Commands
devenv provides custom scripts for common tasks:Code Quality
Code Generation
Kubernetes Development
Debugging
Service Scaffolding
Pre-commit Hooks
devenv automatically configures Git pre-commit hooks that run on every commit:| Hook | Description |
|---|---|
| treefmt | Formats Nix, Go, and TypeScript files |
| golangci-lint | Runs Go linter on Go files |
| goimports | Organizes Go imports |
| biome | Runs Biome linter on TypeScript/TSX files |
| go test | Runs Go unit tests |
Environment Variables
The development environment uses the following environment variable files:Root .env
Used by Docker Compose and shared services:
Frontend .env
Frontend-specific configuration in frontend/.env:
All environment variables prefixed with
VITE_ are exposed to the frontend application at build time.Troubleshooting
Shell activation fails
Ifdirenv allow fails to activate the environment:
Tool not found after activation
Some tools are installed lazily on first use. Try running the tool directly:Pre-commit hooks causing issues
You can bypass hooks temporarily (not recommended for normal development):.pre-commit-config.yaml.
Next Steps
Docker Compose
Run services with Docker Compose
Kubernetes + Tilt
Set up local Kubernetes development
Frontend Development
Start frontend development