Web Dashboard¶
The Web Dashboard provides a modern browser-based interface for Kubernetes management with full AI integration.
Overview¶
The Web UI offers:
- Modern Interface: Responsive design with dark/light themes
- Real-time Updates: Stale-first dashboard refresh with background revalidation
- AI Assistant: Integrated chat interface
- Multi-cluster: Switch between contexts
- Reports: Generate cluster analysis reports
Getting Started¶
Launch Web Mode¶
# Start web server on default port 8080
k13d --web
# Specify custom port
k13d --web --port 3000
# With local authentication
k13d --web --auth-mode local
Access the Dashboard¶
Open your browser to: http://localhost:8080
Interface Layout¶
┌─────────────────────────────────────────────────────────────────┐
│ k13d │ Context: prod │ Namespace: default │ [Settings] [Help] │
├───────────┬─────────────────────────────────────────────────────┤
│ │ │
│ Resources │ Resource Table │
│ ─────────│ │
│ Pods │ NAME READY STATUS AGE │
│ Services │ nginx-abc 1/1 Running 2d │
│ Deploys │ api-def 2/2 Running 5d │
│ ConfigMaps│ │
│ Secrets │ │
│ ... │ │
│ │ │
├───────────┴─────────────────────────────────────────────────────┤
│ AI Assistant │
│ ───────────────────────────────────────────────────────────────│
│ Ask me anything about your cluster... │
│ [Send] │
└─────────────────────────────────────────────────────────────────┘
Navigation¶
Sidebar¶
| Section | Description |
|---|---|
| Workloads | Pods, Deployments, StatefulSets, DaemonSets |
| Config | ConfigMaps, Secrets |
| Network | Services, Ingresses, Endpoints |
| Storage | PVs, PVCs, StorageClasses |
| Cluster | Nodes, Namespaces, Events |
| Helm | Helm releases |
Resource Table¶
- Click row to view details
- Search bar for filtering
- Namespace dropdown for switching
- Refresh button for manual refresh
- Freshness badge when cached data is shown first and live data is still revalidating
Jobs and CronJobs¶
The Web UI now shows Job and CronJob timing in more operational detail:
- Jobs show status, start time, duration, source CronJob/manual trigger, and completion progress
- CronJobs show schedule, active/suspended state, next run, last run, and recent execution history
- Detail modal shows timestamps in your configured local/browser timezone
- Runs tab on CronJobs shows recent Jobs with started/finished time, duration, and pod outcome counts
- Security section on pod-backed workloads shows seccomp profile,
runAsNonRoot, token mount, host namespace usage, and container privilege settings
When a CronJob does not set .spec.timeZone, k13d still estimates the next run, but it labels that estimate clearly because Kubernetes ultimately follows the controller-manager timezone.
Resource Actions¶
Right-Click Menu¶
Right-click on any resource to see available actions:
| Action | Description |
|---|---|
| View YAML | Display full YAML manifest |
| Describe | Show resource description |
| Edit | Edit resource (opens YAML editor) |
| Delete | Delete resource (with confirmation) |
| AI Analyze | Get AI analysis |
Quick Actions¶
| Button | Description |
|---|---|
| 📋 | Copy resource name |
| 📄 | View YAML |
| 🔍 | Describe |
| 🗑️ | Delete |
| 🤖 | AI Analyze |
AI Assistant¶
Chat Interface¶
- Type your question in the input field
- Click "Send" or press Enter
- View streaming response
- Approve/reject tool requests
Example Queries¶
"Why is my nginx pod crashing?"
"Scale the api deployment to 5 replicas"
"Show me all pods with high CPU usage"
"Explain this HPA configuration"
Tool Approval¶
When AI needs to execute a command:
┌──────────────────────────────────────┐
│ Tool Approval Required │
│ │
│ kubectl get pods -n production │
│ │
│ [Approve] [Reject] │
└──────────────────────────────────────┘
By default, this modal appears for both read-only and write AI tool actions. You only skip it for read-only commands if you explicitly enable auto-approve in Settings.
Some requests never reach approval. k13d blocks unsupported interactive kubectl flows such as kubectl edit, kubectl port-forward, kubectl attach, kubectl exec -it, plus bash-wrapped kubectl or helm commands.
Features¶
Dark/Light Theme¶
Toggle theme in Settings or click the theme icon in the header.
Real-time Updates¶
Resources update automatically. The dashboard now follows a stale-while-revalidate pattern:
- recent data is reused immediately when you switch resources or reload the page
- live data is fetched in the background and the table updates in place
- the header shows a freshness badge when cached data is being refreshed
Configure refresh interval:
Settings → General → Refresh Interval
Keyboard Shortcuts¶
| Key | Action |
|---|---|
| Ctrl+K | Focus search |
| Ctrl+/ | Toggle AI panel |
| Esc | Close modal |
| ? | Show shortcuts |
Settings¶
LLM Configuration¶
Settings → AI → LLM Configuration
| Setting | Description |
|---|---|
| Provider | OpenAI, Ollama, Gemini, Anthropic |
| Model | gpt-4, llama3.2, etc. |
| Endpoint | Custom API endpoint |
| API Key | Provider API key |
The Web UI saves active LLM settings back to config.yaml immediately and can also manage named profiles through Add Model Profile, Use, and Delete.
For agentic AI, k13d is kubectl-first by default. bash and external MCP tools are opt-in via config.yaml:
For the full storage model, including how llm, models[], and active_model change, see Model Settings & Storage.
AI Input History¶
The AI input box supports shell-like history recall:
- Up loads the previous submitted prompt
- Down moves forward again
- on a single-line draft, history works even when the cursor is at the end of the line
- in a multi-line draft, history only takes over from the first line on Up and the last line on Down, so normal caret movement still works inside the textarea
The recent prompt history is stored in browser localStorage under k13d_query_history, so it survives reloads in the same browser profile.
MCP Servers¶
Settings → AI → MCP Servers
Manage external MCP servers for extended AI capabilities.
User Management¶
Settings → Admin → Users
| Action | Description |
|---|---|
| Add User | Create new user |
| Edit | Modify user settings |
| Delete | Remove user |
Reports¶
Generate comprehensive cluster reports with selectable sections:
- Navigate to Reports section
- Choose which sections to include:
- Nodes - node readiness, cordon state, pressure warnings, taints, capacity and allocatable values
- Namespaces - namespace inventory and workload counts
- Workloads - pods, deployments, services, and images
- Events - recent warning events
- Security - built-in security summary
- Security Full - extended scanner output when available
- FinOps - heuristic compute-cost analysis and rightsizing guidance
- Metrics - historical metrics when collection is enabled
- Optionally include AI analysis
- Preview inline or download as HTML, CSV, or JSON
The exported report now respects the section selection you make in the modal. FinOps output is request-based and prefers live pod metrics when available, and the node section includes operational checks such as pressure conditions and cordon status.
Custom Resource Detail¶
Click on any Custom Resource to view a rich detail modal:
- Overview tab with auto-detected status, metadata, key fields, spec/status summary, conditions table, labels, and annotations
- YAML tab with full manifest
- Events tab with related Kubernetes events
Pod Actions¶
View Logs¶
- Click on a pod
- Select container (if multiple)
- View streaming logs
- Options:
- Previous logs
- Follow
- Timestamps
- Download
Execute Shell¶
- Click on a pod
- Click "Exec" or 🖥️ icon
- Select container
- Enter commands in terminal
Port Forward¶
- Click on a pod
- Click "Port Forward"
- Configure:
- Local port
- Container port
- Click "Start"
- Access at
localhost:<port>
Deployment Actions¶
Scale¶
- Select deployment
- Click "Scale" or use slider
- Enter replica count
- Confirm
Restart¶
- Select deployment
- Click "Restart"
- Confirm rollout restart
Rollback¶
- Select deployment
- Click "Rollback"
- Select revision
- Confirm
Node Actions¶
Cordon/Uncordon¶
- Select node
- Click "Cordon" to prevent scheduling
- Click "Uncordon" to allow scheduling
Drain¶
- Select node
- Click "Drain"
- Configure options:
- Ignore DaemonSets
- Delete local data
- Force
- Confirm
API Access¶
The Web UI exposes REST APIs:
# Get pods
curl http://localhost:8080/api/k8s/pods
# With authentication
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/k8s/pods
# AI chat
curl -X POST http://localhost:8080/api/chat/agentic \
-H "Content-Type: application/json" \
-d '{"message": "list pods"}'
Mobile Support¶
The Web UI is responsive and works on mobile devices:
- Touch-friendly navigation
- Collapsible sidebar and AI panel
- Condensed panel header and filter bar on narrow screens
- Horizontal table scrolling with sticky pagination for resource-heavy views
- Optimized for smaller screens without dropping core dashboard actions
Security¶
Authentication¶
Run the Web UI with local authentication:
For production, prefer token auth:
Provider-specific LDAP/OIDC settings are startup-configured in the current build and are not persisted from the Web UI settings page.
HTTPS¶
For production, use a reverse proxy (nginx, traefik) with TLS.
Troubleshooting¶
WebSocket Connection Failed¶
- Check if port is accessible
- Verify no firewall blocking
- Try different browser
Slow Performance¶
- k13d now shows recent cached resource data first and refreshes in the background, so the first paint should feel faster after the initial load
- Reduce refresh interval
- Limit namespace scope
- Use filters to reduce data
AI Not Responding¶
- Check LLM configuration
- Verify API key
- Check network connectivity
Next Steps¶
- TUI Dashboard - Terminal interface
- Keyboard Shortcuts - All shortcuts
- Configuration - Full options