Releases: kitanoyoru/kssh
Release list
v1.3.0
What's new
Remote account management in the menu bar
- Manage GitHub/GitLab/Bitbucket accounts directly from the popover Remote section (mirrors the SSH keys UX)
- Flat per-account list: provider monogram badge, avatar, username, and label tag
- Tap a row to open its profile detail; switch/edit/test/delete via row controls and context menu
- Single "Add account" flow with a service picker
- Each account resolves its own profile, so any account opens — not just the active one
GitHub contribution graph
- Contribution heatmap on the profile detail screen, sized to fit the popover
UI/UX
- Collapsible sections (Keys, GPG, Remote) — no scrolling
- Dedicated primary button style for form actions
- Redesigned profile detail screen (brand avatar fallback, carded stats, grouped fields)
- Settings now shows a read-only Accounts summary (management lives in the menu bar)
Full Changelog: v1.2.0...v1.3.0
v1.2.0
What's new
SSH key lifecycle — generate new ed25519/rsa keys in the popover (create-only), delete keys to a recoverable ~/.ssh/.kssh-trash backup, rename key files, and upload the active key to GitHub/GitLab from the per-key menu (reusing stored PATs).
Remote profile detail — tapping a Remote row now opens an in-popover detail screen with avatar, full name, username, repo/follower/following counts, bio, company, location, and join date (fetched lazily, best-effort per provider). An "Open profile" button keeps browser access one tap away.
Fixes
- Settings window now opens reliably from the menu bar on macOS 26 (Tahoe).
Earlier in this line
- Bitbucket Cloud remote profile support and enriched profile display.
v1.1.2
Fixes
- Switching SSH keys now works when the same host has multiple
Hostblocks (one key per block). Previously~/.ssh/configwas left effectively unchanged — because OpenSSH treatsIdentityFileadditively, the first block's key kept being offered and the switch had no real effect. The chosen key is now activated and its same-host competitors are commented out, while unrelated hosts are left untouched.
v1.1.1
Fixes
- Track the active SSH key by your explicit selection rather than inferring it from
~/.ssh/config. In a separate-Host-per-key config the file can't express a single active identity, so the green highlight previously stayed stuck on the first host's key after switching. The last switched-to key is now persisted and reflected in the UI (falling back to config resolution when there's no selection or the key is gone).
v1.1.0
Highlights
SSH config switching is more robust
Handles different ~/.ssh/config shapes that previously caused a switch to silently no-op or mis-target:
- Preserves CRLF line endings on rewrite.
- Parses
IdentityFilethe way OpenSSH does —=separator, quoted paths, and trailing/inline tokens. - Treats
Matchblocks as their own boundaries (no longer attributed to the precedingHost). - Agent-only switch notice when the chosen key isn't referenced anywhere in the config (the file is left untouched).
- Scope-aware active-identity detection: a specific
Hostwins over aHost *default.
UI
- Git profiles now render as a tab strip, capped at 5 profiles.
- The active key / profile row uses a defined green highlight (fill + border) instead of a dim wash.
- When the ssh-agent is off, all sections are hidden in favor of a single Enable agent button that starts the agent.
Other
- Remote section is scoped to the active SSH key.
Full changelog: v1.0.0...v1.1.0
v1.0.0
First tagged release of kssh — SSH, Git, and GPG identity management from the macOS menu bar.
Install via Homebrew tap:
brew tap kitanoyoru/kssh
brew install kssh
Or build from source: make install. Requires macOS 14+.