github msitarzewski/brew-browser v0.3.0
v0.3.0 — In-app updater + GitHub coverage + issue #1 fixes

latest releases: v0.6.0, v0.5.1, v0.5.0...
one month ago

brew-browser v0.3.0 — In-app updater + GitHub coverage + issue #1 fixes

Signed + notarized. macOS 13+, Apple Silicon.

Highlights

In-app updater. brew-browser now tells you when a new version exists. A title-bar pill appears when a newer release is detected; Settings → Network → Updates owns the manual "Check now" button, the off-by-default daily auto-check, and the install action. Every artifact is verified against an embedded minisign public key before any on-disk side effect (sha256 first, then signature — mismatch aborts with no install). Skipping a version is per-release, so a future update re-triggers the notice.

"Offline Mode" instead of "Paranoid Mode." Same kill switch, friendlier name. Toggle in Settings → Network blocks every outbound feature: catalog refresh, trending, GitHub, updater. The internal field stays paranoid_mode to avoid migrating existing settings files.

GitHub coverage expansion. Packages like bat, fd, ripgrep, tealdeer — marketing-page homepages but GitHub-hosted source — now light up Star / Watch / File-issue / Stats. Backend walks homepageurls.stable.urlurls.head.url (formula) or homepageurl (cask). The Dashboard's personal-stats card sees a bigger denominator.

GitHub Octocat status chip in the title bar. Green when signed in with required scopes, amber when a scope is missing (click → Settings → GitHub to re-authorize), hidden when signed out.

Actionable Re-authorize toast. If an action fails because your token doesn't carry the required scope (typical for tokens minted before v0.3.0 added notifications scope for Watch), the failure toast offers a one-click "Re-authorize" button. GitHub's consent screen shows only the missing scope. No sign-out needed.

Issue #1 fixes. Resolves the toast cascade on disconnect/reconnect that @heyjawrsh reported. Root cause was a cache loop in PackageDetail hammering Svelte's scheduler combined with a structural misuse of $effect for one-shot side effects. Star, Watch, File-issue, and the sign-in flow all work cleanly now.

Under the hood

  • 473 backend tests passing (up from 411 in v0.2.1).
  • Tauri 2 in-app updater plugin with embedded minisign pubkey + sha256 manifest verification.
  • Per-action OAuth scope gating — Star/File-issue need public_repo, Watch/Unwatch need notifications. The gate runs server-side before any GitHub round-trip.
  • New extract_github_repo tolerant URL parser that handles archive + release URLs (.../archive/refs/tags/v1.2.3.tar.gz, .../releases/download/v1.2.3/foo.dmg) while applying every strict-parser defense (host, scheme, character set, path traversal).
  • Lazy Keychain probe preserved — fresh launches still don't trigger the macOS "wants to use your confidential information" prompt unless you actually use a GitHub feature.

Install

Download brew-browser_0.3.0_aarch64.dmg, double-click, drag to Applications. macOS Gatekeeper will accept the signed + notarized binary without warnings.

If you're on v0.2.1, the in-app updater will surface this release after you upgrade once — manual .dmg installs are still supported but the auto-updater path is the recommended cadence going forward.

Acknowledgments

  • @heyjawrsh for filing issue #1 with a clear reproduction. Six hours of debugging surfaced two genuinely interesting Svelte 5 rabbit holes; the diagnosis is in memory-bank/tasks/2026-05/14-issue-1-hunt-cache-loop.md and 15-github-integration-completion.md for the curious.

Full diff: v0.2.1...v0.3.0

Don't miss a new brew-browser release

NewReleases is sending notifications on new releases.