๐ Supercharge Your Kubernetes Development Workflow with Tilt: A Complete Guide (with Angular +โฆ
Subtitle:

๐ Supercharge Your Kubernetes Development Workflow with Tilt: A Complete Guide (with Angular + Java Example)
Subtitle:
Say goodbye to slow builds and manual redeploys โ learn how to achieve hot-reloadโlike productivity for Kubernetes microservices using Tilt.
๐งฉ Introduction
If youโve ever developed microservices on Kubernetes, youโve likely felt the pain of slow feedback loops. You make a small change in your Java backend or Angular frontendโฆ then:
docker build .
kubectl apply -f deployment.yaml
kubectl rollout status deployment my-service
โฆand wait. And wait. ๐ฉ
This is where Tilt steps in โ an open-source developer tool from the CNCF ecosystem that brings โhot reload for Kubernetesโ to your local development workflow.
With Tilt, you can:
- Define your entire dev environment (code โ container โ cluster) as code
- Automatically rebuild and redeploy your microservices on every code change
- Get real-time logs and status updates from your Kubernetes resources
- Develop your app locally in a real K8s cluster, not in simulation
Letโs break down how Tilt achieves this โ and then weโll build a complete Angular + Java (Spring Boot) + Kubernetes example.
๐ฐ๏ธ A Brief History of Tilt
Tilt was created by Windmill Engineering, a company founded by ex-Google engineers who had experienced firsthand the slow feedback loops of Kubernetes development at scale. The first version of Tilt was released in 2018 as a tool to help local Kubernetes developers iterate faster by automating builds, applies, and log collection.
In 2021, Tilt joined the Cloud Native Computing Foundation (CNCF) Sandbox, marking its recognition as a significant open-source project in the Kubernetes ecosystem. This move ensured broader community support and integration with other cloud-native tools.
Over the years, Tilt evolved from a basic build/redeploy tool to a declarative Dev Environment as Code platform, introducing features like:
- Live Update: For near-instant rebuilds without full Docker image rebuilds
- Tiltfile scripting (Python DSL): To define custom workflows and triggers
- Web UI & CLI Integration: For visual feedback and easier debugging
- Multi-service orchestration: To manage complex microservice setups in dev clusters
Today, Tilt is widely used in teams developing with microservices, Kubernetes, and containerized stacks โ improving developer productivity by automating the build-deploy-feedback cycle.
โ๏ธ What Is Tilt (Conceptually)?
Tilt provides an automation layer over your existing Kubernetes workflow.
Think of it as the DevMode orchestrator that connects your source code, Docker builds, and kubectl apply steps โ and keeps everything in sync.
๐ Traditional Workflow (Without Tilt)
- Write code
- Build Docker image
- Push image to registry
- Apply YAML
- Wait for new pod
- Check logs
โ Repeat 100 times a day. ๐ฉ
โก With Tilt
tilt uponce- Tilt watches file changes
- Tilt rebuilds only what changed
- Tilt redeploys automatically
- Logs and pod status stream live in the Tilt UI
โ Iterate instantly. ๐ฅ
๐๏ธ Our Example Stack
Weโll use a microservice setup consisting of:
Service Framework Description frontend Angular 17 User-facing web app backend Spring Boot (Java 17) REST API service database PostgreSQL Persistent data layer
Deployment target: Kubernetes (works with Minikube, Kind, or Docker Desktop)
๐งฑ Directory Structure
tilt-demo/
โโโ frontend/ # Angular app
โ โโโ src/
โ โโโ Dockerfile
โ โโโ ...
โโโ backend/ # Java Spring Boot service
โ โโโ src/
โ โโโ pom.xml
โ โโโ Dockerfile
โ โโโ ...
โโโ k8s/
โ โโโ backend-deployment.yaml
โ โโโ frontend-deployment.yaml
โ โโโ postgres-deployment.yaml
โ โโโ postgres-service.yaml
โโโ Tiltfile # Tilt configuration
๐ณ Step 1: Dockerfiles
backend/Dockerfile
FROM eclipse-temurin:17-jdk as builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN ./mvnw clean package -DskipTests
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /app/target/backend.jar .
CMD ["java", "-jar", "backend.jar"]
frontend/Dockerfile
FROM node:20 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build --prod
FROM nginx:stable-alpine
COPY --from=builder /app/dist/frontend /usr/share/nginx/html
โธ๏ธ Step 2: Kubernetes Manifests
k8s/backend-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
replicas: 1
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: backend:dev
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
value: jdbc:postgresql://postgres:5432/demo
k8s/frontend-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: frontend:dev
ports:
- containerPort: 80
k8s/postgres-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_DB
value: demo
- name: POSTGRES_USER
value: demo
- name: POSTGRES_PASSWORD
value: demo
โก Step 3: The Magic โ Tiltfile
This is where Tilt shines. Weโll define how Tilt builds, deploys, and live-updates our services.
Tiltfile
# Load Kubernetes YAMLs
k8s_yaml(['k8s/postgres-deployment.yaml',
'k8s/backend-deployment.yaml',
'k8s/frontend-deployment.yaml'])
# Define Docker builds
docker_build('backend:dev', './backend')
docker_build('frontend:dev', './frontend')
# Enable Live Update for faster iteration
live_update(
'backend:dev',
[
sync('./backend/src', '/app/src'), # Sync code changes instantly
run('mvn package -DskipTests', trigger=['pom.xml']), # Rebuild if pom changes
restart_container() # Restart app after update
]
)
live_update(
'frontend:dev',
[
sync('./frontend/src', '/app/src'),
run('npm run build', trigger=['package.json']),
restart_container()
]
)
# Set up Kubernetes resources
k8s_resource('backend', port_forwards=8080)
k8s_resource('frontend', port_forwards=4200)
๐ง Step 4: Run Everything with Tilt
tilt up
Youโll see a web UI open at http://localhost:10350/ It displays:
- Active resources (frontend, backend, postgres)
- Real-time logs
- Build status indicators
- Live update status
Now, when you edit any .ts or .java file โ Tilt automatically detects it, syncs it to the running container, and restarts only whatโs needed.
This gives you a hot-reloadโlike experience, but for your entire Kubernetes-based stack. ๐
๐งฉ Step 5: Validate the Setup
Visit:
- Angular UI โ http://localhost:4200
- Backend API โ http://localhost:8080/api
Try editing a line in backend/src/main/java/... or your Angular component โ
youโll see Tilt automatically rebuild and redeploy only that service.
๐งญ Optional: Speed Optimization Tips
โ
Use **docker_build_with_restart() for microservices that can tolerate restarts
โ
Use Tilt Live Update to sync source code instead of full rebuilds
โ
Cache Maven/NPM dependencies using Docker multi-stage
โ
Use Minikube with containerd** instead of pushing to remote registries
โ
Exclude large static directories (node_modules, target) in sync()
๐งโ๐ป Developer Experience Summary
Feature Without Tilt With Tilt Build Speed Minutes Seconds (live updates) Rebuild Scope Full image Only changed files Deployment Manual kubectl Automatic Logs kubectl logs per pod Centralized live stream UI None Beautiful Tilt Dashboard Dev-Prod Parity Partial Full (runs in real K8s)
๐ก Real-World Use Cases
- Large microservice architectures (10+ services)
- Teams building cloud-native systems with mixed stacks (Go, Java, JS)
- Dev environments that must mirror production Kubernetes clusters
- Reducing onboarding time for developers joining the team
๐งญ Conclusion
Tilt is not just another CI/CD or Docker automation tool โ itโs a developer productivity engine purpose-built for Kubernetes.
By combining Angular, Java, and Kubernetes in a single live-updating loop, Tilt helps teams iterate faster, test more, and deliver better software โ without the waiting game.
In short: Tilt brings
npm run serveandspring-boot:run-like speed to your full Kubernetes environment.
๐ References
๋ฉํ๋ฐ์ดํฐ
- post_id
- 8efcb0e51352
- slug
- supercharge-your-kubernetes-development-workflow-with-tilt-a-complete-guide-with-angular-8efcb0e51352
- url
- https://medium.com/@thamizhelango/supercharge-your-kubernetes-development-workflow-with-tilt-a-complete-guide-with-angular-8efcb0e51352
- canonical_url
- https://medium.com/@thamizhelango/supercharge-your-kubernetes-development-workflow-with-tilt-a-complete-guide-with-angular-8efcb0e51352
- author_url
- https://medium.com/@thamizhelango
- status
- ok
- fetched_at
- 2026-07-15 19:43:36