Skip to content

Releases: vulcanshen/kbu

v2.2.2

Choose a tag to compare

@github-actions github-actions released this 04 Sep 11:46

Quit without the extra keystroke; the splash credits its developer.

  • q quits immediately. The confirm dialog is gone — q exits on the
    spot. Everything that used to happen behind the confirmation still
    happens: watchers and log streams stop, a live Alterm / edit / exec PTY
    is killed rather than orphaned, and the session snapshot (context,
    namespace, kind, cursor, focused panel, active tab) is written before the
    process exits, so the next launch resumes where you left off. Ctrl+C
    still quits from anywhere, including while a panel search is active.
  • The splash screen (V) credits its developer. "developed by" and the
    author's email fade in under the tagline, on the same beat as the name,
    version, and tagline.

v2.2.1

Choose a tag to compare

@github-actions github-actions released this 27 Aug 14:38

Fix the Logs tab (panel 3) shattering the whole screen.

  • Terminal control bytes in log output no longer break the UI. A
    container that emits ANSI escapes — colored console output (Spring Boot,
    logback), progress redraws, cursor moves, screen/line erases — or bare
    control characters (tabs in stack traces, backspace, form-feed) sent those
    bytes straight to your terminal. They moved the real cursor outside panel
    3 and painted over the sidebar, table, and borders, corrupting the entire
    frame. Log text is now stripped of every escape and control byte the
    moment it enters the buffer, and each rendered line is clamped to the panel
    width so one over-long line can't push past its column. In-log color is
    stripped as a consequence (kbu still colors its own per-container / per-pod
    prefix) — matching how k9s and Lens render streaming logs.

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 03:28

Browse your kubeconfig contexts from inside kbu — a new read-only view.

  • KubeConfig ▸ Contexts. A new "KubeConfig" category leads the sidebar
    (panel 1) with a read-only Contexts view. It lists every context in your
    kubeconfig — Name, Cluster, User, Namespace, Server — with the context
    you're currently connected to marked by a trailing *. Panel 3 shows an
    Info tab (Context / Cluster / Server / TLS / User / Auth / Namespace), and
    Y opens a kubeconfig-shaped YAML view. It reads the kubeconfig directly,
    so it works even when the cluster is unreachable.
  • Read-only by design. No edit / delete — the E / d hotkeys, the
    Space menu, and the YAML popup's own edit are all gated off, and Enter is
    inert. Switching context stays on the C picker.
  • Credentials are never shown. A kubeconfig user stanza can carry
    tokens / passwords / client keys. kbu flattens only non-secret metadata
    and builds the YAML from an allowlist, so every credential-bearing field
    renders as <redacted> — no secret can reach the panel or the YAML view.

v2.1.2

Choose a tag to compare

@github-actions github-actions released this 18 Aug 14:36

Fix the detail panel (panel 3) scrolling to a blank body.

  • Log/detail scroll no longer lands on a blank screen. Scrolling panel
    3 with j/k/u/d could leave the body blank — most often after
    zooming the panel (z) or while streaming logs. The scroll offset was
    re-clamped only when the panel width changed, so a taller viewport (zoom
    grows the height) or a shrinking body (the log ring buffer trimming old
    lines while you were scrolled up) left the offset pointing past the last
    screenful, and the render started beyond the content. The offset is now
    clamped on any size change and after every content rebuild, so the body
    always draws content.

v2.1.1

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:29

Fix a copy-fidelity bug in the YAML popup's visual-mode yank.

  • Visual yank no longer injects soft-wrap newlines. Selecting across a
    long YAML line that the popup soft-wrapped to fit the width used to copy
    a newline at every wrap point — but those breaks aren't in the source
    YAML. The selection is now reconstructed from the original document by
    mapping the visual endpoints back to raw (line, column) and slicing the
    source directly, so the copied text matches the YAML byte-for-byte:
    newlines only where the document actually has them, and the spaces at
    word-wrap boundaries preserved.

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 04:18

Multi-namespace selection — view several namespaces at once, not just one
or all.

  • Multi-select namespace picker. N now opens a checkbox list. Move
    with j/k (u/d page, gg/G jump), and Enter toggles the
    namespace under the cursor — the popup stays open so you can check
    several in a row, and each toggle live-applies (panel 2 re-fetches
    immediately). Checked namespaces read green. Esc/Space close.
    "All Namespaces" and specific namespaces are mutually exclusive:
    checking a specific one clears All, unchecking the last falls back to
    All. / search still works.
  • Per-namespace fetch, namespace-ordered. A specific selection lists
    each namespace separately (client-go's namespaced List) in name order,
    rendering incrementally as each returns; "All Namespaces" keeps the
    single cluster-wide list. No fetch-all-then-filter.
  • Namespace column. Every namespaced resource's panel-2 list now
    leads with a Namespace column (first, ahead of Name) so rows from
    different namespaces are distinguishable; it middle-truncates like Name
    (front + tail kept). Cluster-scoped kinds (Nodes, PVs, ClusterRoles,
    ...) are unchanged. The status bar shows the single namespace, "All
    Namespaces", or "N selected" for a multi-selection.
  • Selection persists, reconciled on launch. The selection is saved to
    state.yaml and restored next launch. Namespaces that no longer exist
    are dropped on startup (kbu lists the live namespaces once and keeps the
    survivors); if none survive it falls back to All. Precedence: persisted
    selection > default_namespace config > all.
  • Makefile added with essentials-only targets (build / run / test /
    test-race / vet / fmt / help). Release packaging stays with goreleaser.

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 22 Jul 12:50

Course-correct the v2.0.1 branding experiment and round off a border
detail — no functional or workflow changes.

  • In-app display name reverted KubeUI → kbu. v2.0.1 switched the
    text the user reads directly to the full name "KubeUI"; v2.0.2 puts
    the short name kbu back in the quit confirm dialog, the Space
    menu / hint title, the toast title, the applog startup line, and the
    crash messages. The splash easter-egg identity reveal keeps the full
    KubeUI, and the README kbu — KubeUI subtitle stays — both are
    deliberate full-name surfaces, not in-app chrome.
  • Border-title trailing cap rounded. Panel 1/2/3 title chips and the
    panel-3 tab bar now close their right end with a round half-circle
    (Powerline E0B4) instead of a hard triangle (E0B0), mirroring the
    round left cap already in use. Between-tab boundary caps stay
    triangular; only the final trailing cap changed.
  • Docs: added a self-contained "Panel chrome" spec (§8) to the ZLC
    implementation doc — border title, tab bar, and border-hint styling,
    written portably so other TUIs can reference it.

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 21 Jul 16:22

Branding polish following the v2.0.0 rename — no functional or workflow
changes, just finishing the visual identity that km8 → kbu started.

  • Splash easter egg (V) redesigned: the pixel logo now spells
    KBU (K and B in gold, U as the navy frame that wraps them) instead
    of the old K8. New staged reveal — a dark-gray background sheet
    sweeps top-to-bottom, the U frame rises from the base, then the K/B
    letters shuffle in; every cell is a single solid-square glyph.
  • User-facing display text now uses the full name KubeUI where
    the product is named to the user: quit confirm dialog, the Space
    menu title, toast title, applog startup line, and crash messages.
    Command / identity strings (--version, config dir, migration notes)
    keep kbu — they name the binary, not the product.
  • README icon + GitHub social preview refreshed to the KBU logo (old
    K8 art kept as docs/km8-icon.svg). Social preview wordmark set in the
    Tiny5 pixel font on a full-black canvas.
  • Removed the Go Report Card badge — goreportcard.com was permanently
    sunset on 2026-07-01.
  • .gitignore now ignores kbu / kbu.exe (was still km8 /
    km8.exe, a v2.0 rename straggler).

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Jul 07:13

Identity rename: km8 → kbu. The tool doesn't change, just the
name — the tagline for the Family the Kubernetes TUI is the first
member of. Future TUIs Vulcan Shen builds will share a u-ending
naming pattern (u privately means "UI"; kept implicit like Apple's
i prefix). One release, one story, no feature or workflow changes
buried inside — the diff is entirely rename plumbing.

Reason: km8 was a mouthful (three syllables, unclear "M8"),
searched poorly, and didn't compose into a family for later tools.
kbu is three letters, home-row-friendly to type, ends in a vowel
so it reads naturally in any language, and leaves room for filu /
hostu / etc. later. Splash caption changed from KubeMate (the
v1.7.x display name) to KubeUI in the same beat — the long-form
identity that "kbu" is short for.

Six threads make up the rename:

  1. Go module + binary + goreleaser. go.mod module directive
    github.com/vulcanshen/km8github.com/vulcanshen/kbu (54 .go
    files touched, symmetric import path replace, no logic change).
    .goreleaser.yaml project_name / binary / ldflags version
    injection module path / brew + scoop homepage all → kbu. Local
    build now go build -o kbu ./cmd/; release artifacts land as
    kbu_2.0.0_<os>_<arch>.tar.gz.

  2. Config directory + env vars + one-shot migration. Default
    config dir moves from ~/.config/km8/ to ~/.config/kbu/ (same
    on every platform: ~/Library/Application Support/kbu/ on macOS,
    %APPDATA%/kbu/ on Windows). First launch on v2.0 detects the
    legacy ~/.config/km8/ and copies its contents into ~/.config/ kbu/ (recursive file copy — config.yaml, state.yaml,
    theme.yaml, logs/). Old directory is left in place for the
    user to remove at their leisure. Migration is a one-shot:
    subsequent launches find the new dir already populated and skip
    silently.

    Env vars follow the same pattern: KBU__CONFIGPATH /
    KBU__STATEPATH / KBU__ALTERM_SHELL / KBU__ALTERM_LOGIN_SHELL
    are the new names. Legacy KM8__* counterparts are still read as
    fallbacks in v2.0 (removable in v2.1) so a .zshrc from a v1.7.x
    install keeps working across the upgrade. When both a KBU__ and
    its legacy KM8__ are set, KBU__ wins; a legacy-only value
    fires a per-launch deprecation warning in the App Log until the
    user renames.

    The pre-v2.0 KM8__SHELL / KM8__LOGIN_SHELL tier (deprecated
    since v1.7.5 in favor of KM8__ALTERM_*) is fully removed in
    v2.0 — that grace period spanned six minor releases, well past
    the "remove next release" commitment. Anyone still setting them
    after v1.7.5 will get a shell fallback to $SHELL / non-login,
    with no warning noise for the removed tier.

  3. User-facing strings. Every literal km8 in a rendered
    surface — --version prefix (km8 devkbu dev), splash
    caption (KubeMateKubeUI), ? help popup title, toast
    title (󰵅 km8 / 󰀦 km8󰵅 kbu / 󰀦 kbu), quit hotkey
    description, confirm popup message (Quit km8?Quit kbu?),
    startup App Log line, crash banner — all read kbu in v2.0.
    The 18×18 splash pixel-art logo still spells K/8 through this
    release; a redesign to K/B (or another kbu identity) is deferred
    as a separate follow-up so the two decisions can be made
    independently.

  4. Documentation. README.md + README-zh_TW.md rewritten with the
    new identity throughout — title line, badges, install commands
    (brew install vulcanshen/tap/kbu, scoop install kbu,
    go install github.com/vulcanshen/kbu/cmd@latest), quick-start
    snippet, feature bullets, keybinding table, env var table,
    config path table. Both README variants now open with a v2.0
    rename callout so users landing from old km8 links understand
    what they're looking at. Every .go file's dev-facing comments
    swept for km8kbu where the reference is to the current
    project (legitimate legacy refs — legacyAppName = "km8", the
    Alterm-migration km8erm_shell deprecated key, migration code's
    ~/.config/km8/ path — are preserved verbatim).

  5. Distribution + promotion. Homebrew tap and Scoop bucket get
    new kbu formulas alongside the existing km8 formulas (the
    km8 formulas stay as deprecated! shims pointing at kbu for
    one release; removable when v2.1 lands). Merged promotion PRs
    (kubetools, charm-in-the-wild) get follow-up rename PRs so the
    listings match the new identity.

  6. GitHub repo rename. github.com/vulcanshen/km8 renamed to
    github.com/vulcanshen/kbu. GitHub's redirect keeps old URLs
    working — anyone with a browser bookmark or a git remote still
    resolves — but the canonical URL is now the new one. Everyone
    who cloned the repo before v2.0 should git remote set-url origin git@github.com:vulcanshen/kbu.git at their convenience;
    the redirect is opt-in future insurance, not a permanent
    contract.

v1.7.12

Choose a tag to compare

@github-actions github-actions released this 15 Jul 08:57

Single-thread build fix on top of v1.7.11.

  1. Static Linux binaries — no glibc dependency. v1.7.11 (and
    every prior release) shipped Linux binaries dynamically linked
    against the GitHub-hosted runner's glibc (Ubuntu 22.04 →
    glibc 2.35+). Users on older distros — Debian 11, Ubuntu 20.04,
    RHEL / CentOS 7-8 — saw version 'GLIBC_2.32' not found /
    GLIBC_2.34' not found when trying to launch. .goreleaser.yaml
    builds now set CGO_ENABLED=0, producing fully static binaries
    that link against no shared library at all. km8 has no CGO
    dependencies (bubbletea / lipgloss / client-go / viper are all
    pure Go), so the switch is a no-op at the code level — same
    behaviour on macOS + Windows, functional on any Linux kernel
    with the standard syscalls (~2.6.32+). Matches the K8s
    ecosystem norm: kubectl / helm / k9s all ship as
    CGO_ENABLED=0 static binaries for exactly this reason.
    No user-visible behavioural change; if you were running
    v1.7.11 fine, v1.7.12 does the same thing, just with a
    binary that also runs on your friend's older Ubuntu box.