4_path_localnet
make path_upOr start with local Helm charts (for Helm chart development)
make path_up_local_helmThe startup process will:
Validate your configuration files against the schema
Create a Kind Kubernetes cluster
Deploy PATH, GUARD, and WATCH using Helm
Start Tilt for orchestration and hot reloading
Verify the Setup
Once started, you'll see:
🌿 PATH Localnet started successfully.
🚀 Send relay requests to: http://localhost:3070/v1
🛠️ Development tools:
🔧 Open container shell: make localnet_exec
🔍 Launch k9s for debugging: make localnet_k9sTest with a simple request:
curl http://localhost:3070/healthzFor more example relay requests, see Example Relays.
Access Development Tools
Tilt UI: http://localhost:10350 - Monitor services, view logs, trigger rebuilds
Grafana: http://localhost:3003 - View metrics and dashboards
PATH API: http://localhost:3070 - Send relay requests
Why PATH Localnet?
The PATH Localnet development container exists to:
Minimize Host Dependencies: Only Docker is required on your machine — no need to install Tilt, Helm, Kind, kubectl, or other tools locally
Ensure Consistency: All developers work with the same tool versions and configurations
Enable Full Stack Development: Run PATH (API Gateway), GUARD (Envoy Gateway), and WATCH (Observability) together
Support Hot Reloading: Make code changes and see them reflected immediately without rebuilding containers
Simplify Onboarding: New developers can get started in minutes with a single command
Architecture
The PATH Localnet runs as a Docker container that internally manages a complete Kubernetes environment:
┌─────────────────────────────────────────────────────────────┐
│ Host Machine (Your Computer) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Docker Desktop / Docker Engine │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ path-localnet Container (Docker-in-Docker) │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────┐ │ │
│ │ │ Kind Kubernetes Cluster │ │ │
│ │ │ │ │ │
│ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │
│ │ │ │ PATH │ │ GUARD │ │ WATCH │ │ │ │
│ │ │ │ Pod │ │ (Envoy) │ │ (Grafana)│ │ │ │
│ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │
│ │ └────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────┐ │ │
│ │ │ Tilt (Orchestrator) │ │ │
│ │ └────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Exposed Ports: │
│ • 3070 → PATH API Gateway │
│ • 10350 → Tilt UI │
│ • 3003 → Grafana Dashboard │
└─────────────────────────────────────────────────────────────┘Components
PATH: The API Gateway that handles relay requests
GUARD: Envoy Gateway providing authentication, routing, and defense
WATCH: Observability stack with Grafana, Prometheus, and metrics collection
Tilt: Development orchestrator that manages hot reloading and service lifecycle
Kind: Kubernetes-in-Docker providing the cluster environment
Make Targets
The PATH Localnet provides several make targets for managing your development environment.
Core Commands
make path_up
Starts the PATH Localnet environment using remote Helm charts from the official repository.
make path_upThis is the recommended way to start for most development tasks. The container will:
Pull the latest ghcr.io/buildwithgrove/path-localnet-env image
Mount your local PATH repository for hot reloading
Use Helm charts from https://buildwithgrove.github.io/helm-charts/
make path_up_local_helm
Starts the PATH Localnet with local Helm charts, useful when developing Helm chart changes.
make path_up_local_helmYou'll be prompted for the path to your local helm-charts repository. The default is ../helm-charts.
make path_down
Stops and removes the PATH Localnet container.
make path_downThis cleanly shuts down all services by stopping the localnet Docker container.
Debugging Commands
make localnet_k9s
Launches k9s (https://k9scli.io/), a terminal-based Kubernetes UI, inside the container.
make localnet_k9sk9s provides an interactive way to:
Navigate Kubernetes resources
View and follow logs
Execute into pods
Edit resources
Monitor resource usage
k9s running inside the PATH localnet Docker container
make localnet_exec
Opens an interactive shell inside the running PATH Localnet container.
make localnet_execUseful for:
Running kubectl commands directly
Inspecting logs and configurations
Debugging networking issues
Managing the Kind cluster
Example session:
$ make localnet_exec
root@path-localnet:/app# kubectl get pods
NAME READY STATUS RESTARTS AGE
path-5f7b9c4d6f-abc12 1/1 Running 0 5m
envoy-gateway-xyz789 1/1 Running 0 5m
grafana-6d8f9c7b5-def45 1/1 Running 0 5m
root@path-localnet:/app# kubectl logs path-5f7b9c4d6f-abc12Container Environment
The PATH Localnet image includes all necessary development tools, meaning you can run PATH, GUARD, and WATCH locally without any additional dependencies.
Image: ghcr.io/buildwithgrove/path-localnet-env
File Mounts
The container mounts your local PATH repository at /app, enabling:
Hot reloading of Go code changes
Configuration file updates
Access to test data and scripts
Configuration Validation
On startup, the container validates your ./local/.config.yaml against the YAML schema in the PATH repo:
https://github.com/buildwithgrove/path/blob/main/config/config.schema.yaml
Development Workflow
Hot Reloading
Viewing Logs
Multiple ways to view logs:
Tilt UI (http://localhost:10350)
Real-time log streaming
Filtered by service
Search functionality
Inside the container:
make localnet_exec
kubectl logs -f deployment/pathUsing k9s:
make localnet_k9s
# Navigate to pod and press 'l'Was this helpful?
