Tilt — Multi-Service Development for Kubernetes
Kubernetes dev loop that watches source, rebuilds images, live-updates pods, and shows it all in one dashboard. The standard tool for the 50-microservice laptop problem.
What it is
Tilt is a development environment tool for Kubernetes that automates the inner dev loop for multi-service applications. It watches your source code, rebuilds container images, live-updates running pods, and displays logs and status for all services in a single dashboard. When you save a file, Tilt detects the change, rebuilds only what changed, and syncs it to the cluster in seconds.
Tilt targets teams running multiple microservices on Kubernetes who struggle with the slow rebuild-push-deploy cycle during local development. It solves what is commonly called the '50-microservice laptop problem.'
How it saves time or tokens
The traditional Kubernetes dev loop involves editing code, building a Docker image, pushing it to a registry, updating the deployment, and waiting for the pod to restart. This can take minutes per change. Tilt's live-update feature bypasses the full rebuild by syncing changed files directly into the running container, reducing the feedback loop to seconds. The unified dashboard eliminates the need to run kubectl logs in multiple terminals.
How to use
- Install Tilt:
brew install tilt-dev/tap/tilt
- Create a
Tiltfilein your project root:
# Tiltfile
docker_build('my-api', './api')
k8s_yaml('k8s/api-deployment.yaml')
k8s_resource('api', port_forwards=8080)
docker_build('my-frontend', './frontend')
k8s_yaml('k8s/frontend-deployment.yaml')
k8s_resource('frontend', port_forwards=3000)
- Run Tilt:
tilt up
Open the dashboard at http://localhost:10350 to see all services, logs, and build status.
Example
A Tiltfile with live-update for fast iteration:
docker_build(
'my-api',
'./api',
live_update=[
sync('./api/src', '/app/src'),
run('npm install', trigger='./api/package.json'),
]
)
k8s_yaml('k8s/api.yaml')
k8s_resource('api', port_forwards=8080)
With this config, editing a source file syncs it directly into the container without rebuilding the image.
Related on TokRepo
- AI Tools for DevOps — more Kubernetes and infrastructure development tools
- Automation Tools — build and deployment automation
Common pitfalls
- Live-update requires the container to support file syncing (e.g., a running process that watches for file changes); statically compiled binaries need a rebuild step
- Tilt's Tiltfile uses Starlark (a Python dialect), not standard Python; some Python features like imports are not available
- Running many services locally on Kubernetes requires significant CPU and memory; consider using k3d or minikube with adequate resource allocation
Frequently Asked Questions
Yes. Tilt works with minikube, kind, k3d, Docker Desktop Kubernetes, and any other local cluster. It also supports remote clusters, though live-update performance is best with local clusters.
A Tiltfile is a configuration file written in Starlark (a Python dialect) that tells Tilt how to build, deploy, and manage your services. It defines Docker builds, Kubernetes manifests, port forwards, and live-update rules.
Hot-reload is a framework feature (like React's HMR) that updates code within a running process. Live-update is a container feature that syncs files into a running container. They can work together: Tilt syncs the file, and the framework's hot-reload picks up the change.
Tilt is primarily designed for Kubernetes workloads. For Docker Compose projects, Tilt has experimental support but it is not the primary use case. If you do not use Kubernetes, tools like Docker Compose with watch mode may be simpler.
Yes. Tilt is open source under the Apache 2.0 license. There is no paid tier. The project is maintained by the Tilt team (now part of Docker).
Citations (3)
- Tilt GitHub— Tilt multi-service dev for Kubernetes
- Tilt Docs— Tilt documentation and Tiltfile reference
- Starlark Spec— Starlark configuration language
Related on TokRepo
Discussion
Related Assets
NAPI-RS — Build Node.js Native Addons in Rust
Write high-performance Node.js native modules in Rust with automatic TypeScript type generation and cross-platform prebuilt binaries.
Mamba — Fast Cross-Platform Package Manager
A drop-in conda replacement written in C++ that resolves environments in seconds instead of minutes.
Plasmo — The Browser Extension Framework
Build, test, and publish browser extensions for Chrome, Firefox, and Edge using React or Vue with hot-reload and automatic manifest generation.