ENTELXCORE
StackBar icon

Free macOS menu bar app

StackBar

Installed vs latest runtime versions, always one glance away

See Bun, Flutter, Node, and Python versions on your machine, check for newer stable and LTS releases, and update them with a click.

v0.2.10 · 13.4 MB · macOS · Apple silicon · free for personal and public use

What it does

Runtime versions at a glance

  • Live installed vs latest for Bun, Flutter, Node (nvm), and Python
  • One-click update per runtime
  • Periodic checks with a badge when updates wait

Install

Get StackBar running in under a minute

Terminal install · StackBar

After downloading the zip

Ad-hoc signed apps are not Apple-notarized. Paste these commands if Gatekeeper blocks launch — same flow across all tools.

  1. 1. Unzip into Applications

    unzip -o "$HOME/Downloads/StackBar-0.2.10-macos-arm64.zip" -d /Applications/
  2. 2. Remove Gatekeeper quarantine (if macOS blocks launch)

    xattr -dr com.apple.quarantine "/Applications/StackBar.app"
  3. 3. Open StackBar

    open -a "StackBar"

Version history

StackBar release notes

Every published version, newest first.

  1. v0.2.10

    Current9 Oct 2026
    • You now see when an update is out. When the background check finds a new version, the “Update available” dialog (Install & restart… / Not now) now opens by itself, in front of other windows, once per version. Until now it only posted a notification, which macOS never showed.
    • Notifications go through Apple's current API (UNUserNotificationCenter). rumps used the deprecated NSUserNotificationCenter, whose notifications current macOS drops without an error. macOS only shows them for Developer ID signed apps; this ad-hoc build logs the reason to its error log instead.
    • HTTPS works on Macs without Homebrew: the bundled OpenSSL only looked for certificates in Homebrew's folder, so requests (update checks included) failed certificate verification there. macOS's own `/etc/ssl/cert.pem` is now trusted as well.
  2. v0.2.9

    9 Oct 2026
    • The app now bundles Python 3.14.8 (was 3.13.7), with `packaging` 26.3 and PyInstaller 6.22.3. `requirements.txt` now allows `packaging` 26.x (was capped below 26).
  3. v0.2.8

    25 Sep 2026
    • A shell rc line that pins PATH or JAVA_HOME to another JDK (Homebrew's `openjdk@21` caveat line, for example) keeps `java` on that one after the LTS is installed. StackBar now detects it, shows the file and line in the Java submenu and confirm dialog, and after the update pops an alert with the exact line to change instead of a “ready” notification. It never edits your dotfiles.
  4. v0.2.7

    25 Sep 2026
    • Firebase CLI (`firebase-tools`) joins the tracked stacks, listed after Node. The installed version is read from the package's `package.json` (no slow `firebase --version`), the latest comes from npm's `latest` tag with a GitHub fallback, and a Homebrew install compares against the `firebase-cli` formula instead.
    • Update Firebase CLI… matches how it was installed: `npm install -g firebase-tools@latest` with the npm that owns it, `brew upgrade firebase-cli` for Homebrew, or the firebase.tools upgrade script for the standalone binary. A root-owned system copy (nodejs.org installer in `/usr/local`) cannot be replaced without sudo, so the update installs into your nvm Node instead, which shadows it on PATH. Install Firebase CLI… uses npm from your nvm Node.
    • Java (JDK) joins the tracked stacks, listed after Firebase CLI. Installed = the JDK `java` on PATH runs, or the one `java_home` picks when that is Apple's `/usr/bin/java` stub; the version and vendor come from the JDK's `release` file. Latest = the newest GA of the current LTS line (Adoptium feed), capped at what Homebrew's `openjdk@<LTS>` formula ships.
    • Update Java (JDK)… runs `brew install openjdk@<LTS>` (or upgrade) and links it into `~/Library/Java/JavaVirtualMachines`, which `java_home` scans, so `/usr/bin/java` switches to it without an admin password. Existing JDKs (Oracle, Temurin, SDKMAN) stay installed.
  5. v0.2.6

    16 Sep 2026
    • Auto-check for StackBar updates every 6 hours (was 12). A failed check (offline right after login, server error) is retried up to 3 times, 10 minutes apart, instead of waiting for the next interval.
    • Source installs need Python 3.10+: `install.sh` skips Apple's bundled 3.9 and rebuilds a virtualenv created with it (the .app is unaffected).
    • The first silent update check really waits a minute after launch. rumps timers fire as soon as they start, so it used to run immediately — twice — often before Wi-Fi was up after login.
  6. v0.2.5

    16 Sep 2026
    • Update Python… no longer fails with “Error: python not installed” on machines that only have an older `python@3.x` from Homebrew. `python` is a Homebrew alias for the current default, so the updater now falls back to `brew install python` when `brew upgrade python` reports it is not installed.
  7. v0.2.4

    12 Sep 2026
    • Auto-check for StackBar updates every 12 hours (first check about a minute after launch). A purple dot on the menu-bar icon plus a notification when a new version is ready; Check for Updates… becomes “Update x.y.z available…”.
  8. v0.2.3

    12 Sep 2026
    • Quit no longer reopens StackBar. Launch at login used `KeepAlive`, so launchd started the app again. Match RunBar: `KeepAlive` off, unload the login item on Quit (plist stays for the next login).
  9. v0.2.2

    27 Aug 2026
    • Settings… groups check interval, notifications, and launch at login. Menu chrome matches the other Bars (Check for Updates…, Version, Quit). Refresh now is now Refresh.
    • After a self-update, do not reload the LaunchAgent (that started a second icon). Launch at login still uses the same plist at the next login.
  10. v0.2.0

    22 Aug 2026
    • Flutter upgrades offer Update with --force… (`flutter channel stable && flutter upgrade --force`) next to the normal upgrade
  11. v0.1.7

    19 Aug 2026
    • Detect Flutter from the SDK on disk (`flutter.version.json`) so a slow or failing `flutter --version` no longer looks like “not installed”
    • Menu bar yellow/badge means update an installed stack, not “something is missing”
    • Missing stacks stay listed in the menu (with Install…) so you can add them; they do not tint the icon
  12. v0.1.6

    14 Aug 2026
    • Self-update starts the installer before parking any login item, verifies the new binary, then relaunches with `open`
    • Ignore `__MACOSX/*.app` stubs when unpacking the free-tools zip (same `ditto` zip layout as the other bar apps)
  13. v0.1.5

    13 Aug 2026
    • Relaunch after self-update uses LaunchServices `open` (not LaunchAgent bootstrap), so the menu bar icon comes back
  14. v0.1.4

    13 Aug 2026
    • Check for Updates shows the same “Installing update…” percent window as the other bar apps
    • Park the LaunchAgent before replacing the app so KeepAlive cannot reopen both the old and new copies
  15. v0.1.3

    13 Aug 2026
    • List Xcode / CLT Python next to Homebrew (informational — Apple does not allow upgrading it to 3.14)
    • `install.sh` picks the newest Python 3 from Homebrew or Xcode
  16. v0.1.2

    13 Aug 2026
    • Compare Homebrew Python against Homebrew bottles, not python.org
    • python.org-only patches (e.g. 3.14.7 while brew is 3.14.6) no longer look like a failed update
  17. v0.1.1

    13 Aug 2026
    • Track Homebrew Python next to Bun, Flutter, and Node
    • Skip Apple's `/usr/bin/python3` stub; update with `brew install python`
  18. v0.1.0

    13 Aug 2026
    • First release: menu bar versions for Bun, Flutter, and Node (nvm)
    • Checks latest stable / LTS every few hours (default 6)
    • One-click update per runtime
    • Launch at login, notifications, and StackBar self-update plumbing