Skip to content

Quick Start

Go from zero to production-like Kubernetes in under 5 minutes.

No DNS configuration. No certificate headaches. No port-forwarding gymnastics. Just a complete, working Kubernetes environment ready for development.


By the end of this guide, you’ll have:

  • Multi-node Kubernetes cluster running locally
  • PostgreSQL database accessible at postgres.dev.me
  • pgAdmin web UI at https://postgres-ui.dev.me (no certificate warnings!)
  • Local container registry at cr.dev.me
  • Your own app deployed and accessible via HTTPS

Total time: ~5 minutes (mostly waiting for downloads)

%% title: LoKO Setup Flow %%
graph TD
    Start["🚀 Start Here<br/>$ loko config generate"]
    Config["📝 Config Created<br/>loko.yaml with defaults"]
    Edit["✏️ Edit as Needed<br/>Add workloads, customize"]
    Command["⚡ One Command<br/>$ loko create"]

    subgraph Magic["✨ LoKO Sets Up Everything"]
        direction LR
        K8s["☸️ Kubernetes Cluster<br/>Multi-node Kind cluster"]
        DNS["🌐 DNS Resolution<br/>*.dev.me auto-resolves"]
        Certs["🔒 TLS Certificates<br/>Wildcard HTTPS certs"]
        Reg["📦 Container Registry<br/>Local OCI registry (Control Plane)"]
        Tunnel["🔌 TCP Tunnel<br/>Dynamic port routing via IngressRouteTCP"]
        Ports["🚪 Intelligent Routing<br/>HTTP/HTTPS auto-routed"]
    end

    Result["🎉 Everything Just Works!"]

    subgraph Examples["💡 What You Can Do"]
        direction LR
        Ex1["🗄️ Access Services<br/>psql -h postgres.dev.me<br/>redis.dev.me:6379"]
        Ex2["🌐 Deploy Web Apps<br/>https://myapp.dev.me"]
        Ex3["💻 Develop Your App<br/>Use databases, caches,<br/>messaging, etc."]
        Ex4["📦 Push Images/Charts<br/>docker push cr.dev.me/myapp<br/>helm push chart.tgz oci://cr.dev.me"]
    end

    Start -->|Generates| Config
    Config -->|Optional| Edit
    Edit -->|Run| Command
    Command -->|Automatic| K8s
    Command -->|Automatic| DNS
    Command -->|Automatic| Certs
    Command -->|Automatic| Reg
    Command -->|Automatic| Tunnel
    Command -->|Automatic| Ports

    K8s -.-> Result
    DNS -.-> Result
    Certs -.-> Result
    Reg -.-> Result
    Tunnel -.-> Result
    Ports -.-> Result

    Result --> Ex1
    Result --> Ex2
    Result --> Ex3
    Result --> Ex4

    classDef startStyle fill:#1e88e5,stroke:#1565c0,stroke-width:3px,color:#fff,font-weight:bold
    classDef configStyle fill:#8e24aa,stroke:#6a1b9a,stroke-width:3px,color:#fff,font-weight:bold
    classDef editStyle fill:#fb8c00,stroke:#e65100,stroke-width:3px,color:#fff
    classDef commandStyle fill:#e53935,stroke:#c62828,stroke-width:4px,color:#fff,font-weight:bold
    classDef magicStyle fill:#00897b,stroke:#00695c,stroke-width:2px,color:#fff
    classDef resultStyle fill:#43a047,stroke:#2e7d32,stroke-width:4px,color:#fff,font-weight:bold
    classDef exampleStyle fill:#546e7a,stroke:#37474f,stroke-width:2px,color:#fff

    class Start startStyle
    class Config configStyle
    class Edit editStyle
    class Command commandStyle
    class K8s,DNS,Certs,Reg,Tunnel,Ports magicStyle
    class Result resultStyle
    class Ex1,Ex2,Ex3,Ex4 exampleStyle

Verify you have everything installed:

Terminal window
loko check prerequisites

Missing something?Installation Guide


LoKO creates a smart default configuration for you:

Terminal window
loko config generate

What this does:

  • Auto-detects your local IP by default
  • Creates loko.yaml with sensible defaults
  • Sets up domain: dev.me (works out of the box)

Let’s add a database before creating the cluster:

Terminal window
loko workloads add postgres

This updates loko.yaml to include PostgreSQL with pgAdmin.

Edit if needed: Open loko.yaml and customize settings like storage size, passwords, or worker node count.


One command creates the entire environment:

Terminal window
loko env create

What happens automatically:

  1. 🌐 DNS resolution - dnsmasq configured for *.dev.me
  2. 🔒 TLS certificates - Wildcard cert generated and trusted
  3. ☸️ Kubernetes cluster - Multi-node Kind cluster created
  4. 📦 Container registry - Local OCI registry deployed
  5. 🔌 Intelligent routing - Traefik ingress + TCP routing configured
  6. 🗄️ PostgreSQL deployed - Database + pgAdmin running

First time? This takes ~3-5 minutes (downloading images). Subsequent runs are much faster.


Check cluster status:

Terminal window
loko status

Expected output:

╭─────────────────────────── Cluster Status ────────────────────────────╮
│ Cluster: dev-mac │
│ Provider: kind │
│ Status: ✓ Running │
╰───────────────────────────────────────────────────────────────────────╯
╭─────────────────────────── Node Status ───────────────────────────────╮
│ NAME ROLE STATUS AGE │
│ dev-mac-control-plane control-plane Ready 3m │
│ dev-mac-worker worker Ready 3m │
╰───────────────────────────────────────────────────────────────────────╯

List your workloads:

Terminal window
loko workloads list

Expected output:

╭─────────────────────────── Workloads ─────────────────────────────╮
│ NAME STATUS DNS PORTS │
│ postgres Running postgres.dev.me 5432 │
│ pgadmin Running postgres-ui.dev.me 443 │
╰───────────────────────────────────────────────────────────────────╯

Terminal window
psql -h postgres.dev.me -U postgres

That’s it. DNS resolves, port routing works, you’re connected.

Open your browser:

https://postgres-ui.dev.me

No certificate warnings - LoKO already generated the CA and attempted to install trust.

Get credentials:

Terminal window
loko secrets show

Output:

{
"postgres": {
"password": "auto-generated-secure-password"
},
"pgadmin": {
"email": "admin@dev.me",
"password": "another-auto-generated-password"
}
}

Let’s deploy a simple web app that uses PostgreSQL.

Terminal window
# Build your app
docker build -t cr.dev.me/myapp:latest .
# Push to local registry (no Docker Hub needed!)
docker push cr.dev.me/myapp:latest

Create deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: cr.dev.me/myapp:latest
env:
- name: DATABASE_URL
value: "postgres://postgres:PASSWORD@postgres.dev.me:5432/mydb"
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp
spec:
rules:
- host: myapp.dev.me
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp
port:
number: 8080

Deploy it:

Terminal window
kubectl apply -f deployment.yaml

Access your app:

https://myapp.dev.me

HTTPS worksDNS resolvesApp connects to PostgreSQLExactly like production


Here’s a typical development session:

Terminal window
# Morning: Start your cluster
loko env create
# Add a cache
loko workloads add redis
loko workloads deploy redis
# Build and test your app
docker build -t cr.dev.me/api:v2 .
docker push cr.dev.me/api:v2
kubectl set image deployment/myapp myapp=cr.dev.me/api:v2
# Check logs
kubectl logs -f deployment/myapp
# Connect to database for debugging
psql -h postgres.dev.me -U postgres
# Evening: Stop cluster (keeps all data)
loko env stop

Terminal window
loko env stop

Stops all containers but keeps persistent volumes.

Terminal window
loko env start

Restarts your cluster with all data intact.

Terminal window
loko env destroy

Deletes cluster but keeps loko.yaml and generated configs.

Terminal window
loko env clean

Removes everything: cluster, DNS, certificates, generated files.


LoKO has pre-configured workloads. Add what you need:

Terminal window
# Databases
loko workloads add mysql
loko workloads add mongodb
# Cache (Redis-compatible)
loko workloads add valkey
# Messaging
loko workloads add rabbitmq
loko workloads add nats
loko workloads add redpanda
# Storage (S3-compatible)
loko workloads add garage
# DevOps/GitOps
loko workloads add forgejo
loko workloads add argocd
loko workloads add flux-operator
# Collaboration
loko workloads add excalidraw
# DevTools
loko workloads add mock-smtp-sms
# Deploy all enabled workloads
loko workloads deploy --all

Each workload includes:

  • ✅ DNS configuration
  • ✅ Auto-generated passwords
  • ✅ Health checks
  • ✅ Web UI tools (where applicable)
  • ✅ TCP port routing

See all available workloads: Workload Catalog


What You WantCommand
Check if cluster is runningloko status
List all workloadsloko workloads list
Deploy a workloadloko workloads deploy <name>
View workload logsloko logs workload <name>
Get connection infoloko secrets show
Validate configurationloko config validate
Stop clusterloko env stop
Start clusterloko env start
Destroy clusterloko env destroy

Check DNS:

Terminal window
loko check dns

macOS: DNS should auto-configure via /etc/resolver/ Linux: LoKO supports systemd-resolved and NetworkManager-based setups

Fix:

Terminal window
loko dns recreate

macOS:

Terminal window
open -a Docker
# Wait for Docker Desktop to start

Linux:

Terminal window
sudo systemctl start docker

LoKO uses ports 80 and 443 (Traefik). DNS runs in-cluster via an auto-selected DNS port — no host port required.

Check what’s using HTTP/HTTPS ports:

Terminal window
lsof -i :80
lsof -i :443

Kill conflicting processes (e.g. Apache, Nginx) before running loko env create.


See Troubleshooting Guide or open an issue.


Coming from other tools? Here’s why LoKO feels magical:

  • Real Kubernetes - Test Helm charts, Ingress, NetworkPolicies
  • Multi-node clusters - Test pod scheduling and affinity
  • Production parity - Behaves like real K8s
  • Faster - No VM overhead (on Linux/Docker Desktop)
  • Multi-node - Minikube is single-node only
  • Better networking - Direct container access
  • DNS auto-configured - No /etc/hosts hacking
  • TLS included - No certificate warnings
  • Container registry - No Docker Hub needed
  • Workload catalog - Pre-configured services
  • TCP routing - Direct database access from host

LoKO uses Kind under the hood, but adds all the batteries you need.


Explore Workloads

Add databases, caches, messaging, storage, and more

Learn more →

Customize Configuration

Multi-node clusters, custom domains, advanced networking

Learn more →

Use the Registry

Push images, Helm charts, and OCI artifacts

Learn more →


Ready to dive deeper? Understand the architecture →