Terminal interface for managing multiple Kubernetes port-forwards with auto-reconnect, hot-reload, health monitoring, and mDNS hostnames.
Everything you need for production-grade port-forwarding
Beautiful terminal interface with real-time updates and keyboard navigation
Add, edit, delete, and toggle port-forwards without restarting
Exponential backoff retry with infinite retries on connection failures
Configuration changes applied automatically without restart
Multiple check methods with stale connection detection
Access forwards via .local hostnames without /etc/hosts
Manage forwards across multiple clusters and namespaces
Automatic reconnection when pods restart or reschedule
Validates port availability with process ID information
Real-time HTTP logging with detail view, JSON highlighting, gzip decompression, and clipboard copy
Built-in HTTP benchmarking with latency percentiles
Background operation for scripting and automation, logs to stderr
kportal generate discovers cluster services and bulk-adds forwards with consecutive ports
HTTP log header values for Authorization, Cookie, tokens and similar are redacted automatically
SHA-256 checksum verification on every install, with optional cosign signature check
How kportal compares to other Kubernetes port-forwarding tools
Terminal TUI | Single binary
Terminal TUI | Single binary
Desktop GUI | Electron
Desktop + TUI | Tauri
| Feature | kportal | k9s | Kube Forwarder | kftray |
|---|---|---|---|---|
| Interface | Terminal TUI | Terminal TUI | Desktop GUI | Desktop + TUI |
| Persistent Config | ✓ YAML | ✗ Session only | ✓ JSON | ✓ JSON + Git |
| Auto-reconnect | ✓ Exp. backoff | ✗ | ✓ Basic | ✓ Watch API |
| Hot-reload Config | ✓ | ✗ | ✗ | ✗ |
| Health Checks | ✓ TCP + data | ✗ | ✗ | ✗ |
| Stale Connection Detection | ✓ Age + idle | ✗ | ✗ | ✗ |
| HTTP Traffic Logging | ✓ Built-in | ✗ | ✗ | ✓ |
| Connection Benchmarking | ✓ Built-in | ✓ Via Hey | ✗ | ✗ |
| mDNS Hostnames | ✓ .local | ✗ | ✗ | ✗ |
| Label Selectors | ✓ | ✓ | ✗ | ✓ |
| Headless Mode | ✓ | ✗ | ✗ | ✗ |
| System Tray | ✗ | ✗ | ✗ | ✓ |
| UDP Support | ✗ | ✗ | ✗ | ✓ Proxy |
| Dependencies | Single binary | Single binary | Electron | Tauri |
Get started in seconds
macOS
brew install --cask lukaszraczylo/taps/kportal
All platforms
curl -fsSL https://raw.githubusercontent.com/lukaszraczylo/kportal/main/install.sh | bash
Verifies SHA-256 against the release checksums file. If cosign is on PATH, the keyless cosign signature is verified too. Set DRY_RUN=1 to preview, SKIP_COSIGN=1 to bypass cosign.
Linux, macOS, Windows (amd64 & arm64)
Simple commands, powerful results
kportal
Launch the interactive TUI with real-time status updates and keyboard controls.
kportal -v
Run with detailed logging for debugging and automation.
kportal --check
Validate configuration without starting any forwards.
kportal -c /path/to/config.yaml
Use a custom configuration file instead of .kportal.yaml
kportal -headless -v 2>kportal.log &
Run without TUI for scripting; logs are emitted on stderr.
kportal generate --context=my-cluster
Discover services in a cluster and bulk-add forwards with consecutive local ports. Add --dry-run to preview.
Simple YAML configuration with powerful options
contexts:
- name: production
namespaces:
- name: backend
forwards:
- resource: service/postgres
protocol: tcp
port: 5432
localPort: 5432
alias: prod-db
- resource: pod/nginx
protocol: tcp
port: 80
localPort: 8080
httpLog: true # log HTTP traffic
mdns:
enabled: true
healthCheck:
interval: "3s"
method: "data-transfer"
maxConnectionAge: "25m"
contexts:
- name: production
namespaces:
- name: default
forwards:
- resource: service/postgres
port: 5432
localPort: 5432
alias: db # db.local
service/name Servicepod/name Pod by namepod/prefix Pod by prefixdeployment/name Deploymentresource: podselector: app=nginxresource - Target resourceport - Remote portlocalPort - Local portalias - Display name & mDNSselector - Label selectorProduction-ready capabilities
Advanced health monitoring prevents stale connections during long operations.
Access forwards via .local hostnames without editing /etc/hosts.
alias: prod-db
→
prod-db.local
service/redis
→
redis.local
Works on macOS & Linux
Configuration changes are applied automatically without restarting.
Exponential backoff with infinite retries ensures reliability.
Press l to view real-time HTTP traffic.
httpLog
Press b to benchmark connections.