- | Forwards | service/<name>, pod/<name> (exact name or prefix), or pod with a label selector. TCP only. |
- | Terminal UI | Add, edit, delete and toggle forwards without a restart. The add wizard writes the config file. |
- | Table columns | tui.columns sets which columns the forwards table shows, their order and width. It applies to the UI and the -verbose table. |
- | Add wizard | If the cluster does not allow listing namespaces, the wizard asks you to type the namespace. |
- | Reconnect | Exponential backoff: 1s, 2s, 4s, 8s, then 10s, with 10% jitter. It does not stop retrying. |
- | Pod restarts | Forwards by pod prefix or selector connect to the new pod. |
- | Health checks | tcp-dial or data-transfer, every 3s by default. Stale connections are reconnected by age and idle time. |
- | Hot reload | File watcher and SIGHUP. An invalid config is rejected and the previous one stays active. |
- | Contexts | Several contexts and namespaces in one file. --context selects which contexts run. |
- | Port conflicts | Startup and reload checks report a busy local port and the process that holds it. |
- | mDNS | With mdns.enabled: true, each forward is reachable as <alias>.local. |
- | HTTP log | Per-forward request log with details, filter, search, JSON formatting, gzip decoding and body copy. Sensitive header values are redacted. |
- | Benchmark | HTTP requests through a forward. Reports min, max and average latency, P50, P95, P99, requests per second and status codes. |
- | Generate | kportal generate lists cluster services and appends the ones you pick, with consecutive local ports. |
- | Headless | -headless runs without the UI and logs to stderr. -log-format json switches the log format. |
- | Import | --convert turns a kftray JSON file into kportal YAML. |
- | Shell completion | kportal completion prints or installs bash, zsh and fish completions. |
+ | Many forwards in one config file | Yes | No | Partialannotations configure forwards; no forward list file | Partialexample.fwdconf.yml exists | Yes |
+ | Automatic reconnect | Yes | Not documented | Not documented | Yes | Yes |
+ | Follows pod restarts by label or name prefix | Yes | Not documented | Not documented | Yeslabel filter | Yes |
+ | Terminal UI of all forwards | Yes | No | YesPortForward view, alias pf; forwards last for the session | Yes | Yes |
+ | GUI | No | No | No | No | Yes |
+ | Config hot reload | Yesfile watcher and SIGHUP | No | Partialbenchmarks.yaml only | Not documented | Not documented |
+ | HTTP request and response logging | Yes | No | Not documented | Not documented | Yes |
+ | Health checks | Yestcp-dial or data-transfer | Not documented | Not documented | Not documented | PartialREADME says it tracks pod health |
+ | mDNS or friendly hostnames | YesmDNS, <alias>.local | No | No | Partialedits /etc/hosts, not mDNS; needs root | Not documented |
+ | Built-in benchmark | Yes | No | Yeshey, key b | Not documented | Not documented |
+ | Imports another tool's config | Yeskftray JSON | No | No | Not documented | PartialJSON, GitHub repos, service annotations; not other tools' formats |
+ | Several contexts in one config | Yes | No | Partial | Partial | Not documented |
+ | Local port conflict detection | Yesreports the holding process | Partial:remotePort picks a free port | Not documented | Yes | Not documented |
+ | Platforms | Linux, macOS, Windows | Not documented | macOS, Linux, Windows | macOS, Linux, Windows | macOS, Linux, Windows |
+ | Licence | MIT | Not documented | Apache-2.0 | Apache-2.0 | GPL-3.0 |
+ | Language | Go | Not documented | Go | Go | Rust (Tauri, Ratatui) |
+ | Latest release (2026-10-02) | Releases page | Not documented | v0.51.0 (2026-06-06) | v1.25.16 (2026-06-20) | v0.29.2 (2026-09-29) |