โ† Back to list

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

Subtitle:

ThamizhElango Natarajan ยท 2025-11-03 15:33 ยท 1 claps ยท 4.6 min read paywalled
#kubernetes #tilt #devops #developer-experience #cloud-native
Open on Medium โ†—
Wiki topics: ๐ŸŒ ยท Web Development โ˜๏ธ ยท DevOps & Cloud

๐Ÿš€ 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)

  1. Write code
  2. Build Docker image
  3. Push image to registry
  4. Apply YAML
  5. Wait for new pod
  6. Check logs

โ†’ Repeat 100 times a day. ๐Ÿ˜ฉ

โšก With Tilt

  1. tilt up once
  2. Tilt watches file changes
  3. Tilt rebuilds only what changed
  4. Tilt redeploys automatically
  5. 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:

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 serve and spring-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