Releases: abeckDev/BarKeeper
Release list
v1.0.1
🔄 BarKeeper v1.0.1
A focused feature release adding the new Alternator resource type, UI clickability improvements, and a new example Feed script.
✨ New Features
⇄ Alternator Resource Type
A new resource type that displays a live string label in the menu bar and switches between discrete states with a single click.
- The status script prints the current state to stdout (e.g.
PersonalorWork) — displayed as a pill badge in the resource row - The action script is executed on click to advance to the next state, after which the status is automatically re-polled to refresh the badge
- Full state management: loading indicator, error display, and Notification Center alerts on success or failure
- Participates in the automatic polling loop alongside toggle resources
- Fully supported across the Settings editor, resource list, and menu bar view
- Added to the JSON config schema with
"type": "alternator",statusScript, andactionScriptfields
Example use cases:
- Switch between GitHub.com and GitHub Enterprise accounts (
gh auth switch) - Rotate
kubectlcontexts (kubectl config use-context)
See the new wiki guide: Switch Git Profile with the Alternator Resource
🖱️ Clickable Icon Areas in Menu Bar View
Navigation icons in the menu bar popup now have an expanded hit area via .contentShape(Rectangle()), making them easier to click — especially on smaller displays.
🚗 New Example: Commute Home Feed Script
Added docs/commute-home-feed.swift — a fully self-contained Swift script that uses MapKit + CoreLocation (no third-party dependencies) to calculate your current driving time home and display it as a Feed resource with trend tracking (faster/slower than last check).
🐛 Bug Fixes
- Status polling now gracefully handles missing status scripts — resources with no
statusScriptconfigured no longer get stuck in a loading state;isLoadingis now properly reset andlastCheckedis updated.
📖 Documentation
- README updated to document the Alternator resource type, including a full description, example config JSON, and updated config schema reference table
- Architecture overview updated to reflect the four resource types now supported
- Inline code comments cleaned up in
ResourceManager.swift
🔧 Internal Changes
- Added
nilIfEmptyutility extension onStringinResourceManager.swiftfor cleaner optional script handling ResourceEditorViewscript-saving logic updated to correctly mapstatusScriptandactionScriptfor alternator resourcesSettingsViewsidebar icon selection updated from a binary toggle/button check to a fullswitchstatement covering all four resource types
📦 Installation
Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized.
Checksums (SHA256)
- DMG:
815d4df707bf45a6757b979d61578196b156d0bf9461044d6603f4b06836bdae - ZIP:
7e438201691ff252f3c11d9495481c871e6df5ab29768b8371f3cf750d2f4144
Full Changelog: v1.0.0...v1.0.1
Checksums (SHA256)
- DMG:
815d4df707bf45a6757b979d61578196b156d0bf9461044d6603f4b06836bdae - ZIP:
7e438201691ff252f3c11d9495481c871e6df5ab29768b8371f3cf750d2f4144
Full Changelog: v1.0.0...v1.0.1
v1.0.0
🎉 BarKeeper v1.0.0
The first major release of BarKeeper. This version ships three features and squashes a notable bug in the Settings dialog.
✨ New Features
📋 Feed Resource Type
A new read-only resource type that runs a script, parses its JSON output, and displays results as an expandable list directly in your menu bar popup.
- Click the refresh button to run the script on demand (feed resources are manual-refresh only — they don't participate in the automatic polling loop)
- A green badge shows how many items are new (
isNew: true) - Supports an optional title, timestamp (
checkedAt), and item subtitles/details (shown as tooltips on hover) - Renders up to 20 items; overflow is summarised as "… + N more"
- Tolerates noisy login-shell output (Homebrew nags, nvm, direnv) — BarKeeper extracts the last top-level
{…}block from stdout, so your script doesn't need to suppress shell chatter - Includes a full FeedPayload JSON schema and a sample script in
docs/sample-feed-script.sh
Built-in highlight: includes a new embedded foundry-check CLI tool (by @LaetitiaMa1410) that reports Microsoft Foundry model availability by region — ready to use as a Feed resource out of the box.
⚠️ Critical Actions
Button resources can now be marked as Critical. When enabled, clicking the button shows a system-level macOS confirmation dialog before the script runs — perfect for destructive or irreversible operations like deleting resources or force-pushing.
- Toggle the "Critical Action" option per-resource in the Settings editor
- Uses a native
NSAlertthat appears centered on screen, independent of the menu bar popover - Defaults to
false; existing configs are unaffected
🔔 macOS Notification Center Integration
BarKeeper now sends native macOS notification banners when actions complete or fail — so you always know the outcome even if you've switched to another app.
- Notifications fire on toggle on/off, button actions, and feed refreshes (success ✅ and error ❌)
- Per-user opt-out: a new "Enable Notification Center alerts" toggle in Settings → Notifications persists your preference to disk
- Existing configs automatically opt-in on upgrade (no migration needed)
- Implemented via a clean, injectable
NotificationServiceclass — documented indocs/notification-service.md
🐛 Bug Fixes
Settings Dialog Stability (#16)
Fixed two related bugs in the Settings dialog:
- Editing a resource while a task was in-flight caused UI flicker and orphaned async tasks — because
updateResource()was replacing the entireResourceStateobject, resettingisLoading/lastErrorand losing the reference held by running tasks. Now theresourceproperty is updated in-place, preserving all runtime state. - Switching resources in the sidebar did not refresh the editor panel — SwiftUI reused the same view and
.onAppeardid not re-fire. Fixed by adding.id(state.id)to force a proper view refresh on selection change.
👥 Contributors
- @LaetitiaMa1410 — Feed resource type & foundry-check CLI integration (first contribution! 🎉)
- @abeckDev — Critical Actions, resource state bug fix
- @Copilot — Notification Center integration
📦 Installation
Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized — Gatekeeper will allow it without extra steps.
Full Changelog: v0.1.2...v1.0.0
Checksums (SHA256)
- DMG:
3b2510a24b29b48ec54528d11372eb9a92e7bebe727a958c0fdc651efcb778a9 - ZIP:
1993018fab23c95352ed28cc2adf8b44f5008ce4b13b8b293a313c74d613f0d6
New Contributors
- @LaetitiaMa1410 made their first contribution in #14
Full Changelog: v0.1.2...v1.0.0
v0.1.2 - First Beta Release
🍺 BarKeeper v0.1.2 — First Beta Release
Use your macOS Bar to Keep your environments and shortcuts under control.
This is the first public beta of BarKeeper — a lightweight, native macOS menu bar app for managing resources with one click. Run scripts, monitor the status of applications, or spin up and shutdown cloud resources — all from your macOS top bar.
✨ Features
Menu Bar Native
- Lives entirely in your macOS menu bar — no Dock icon clutter
- Custom app icon for the menu bar and application
Two Resource Types
- Toggle — Stateful on/off controls with three scripts (status, on, off) and live status indicators:
- 🟢 Green dot — resource is ON (exit code
0) - ⚪ Gray dot — resource is OFF (non-zero exit code)
- 🔴 Red dot — an error occurred during the last action
- 🟢 Green dot — resource is ON (exit code
- Button — Stateless one-click action that executes a single script immediately. Perfect for one-off tasks like deploying a build, flushing a cache, or opening a dashboard.
Configurable Polling
- Automatic status checks with adjustable intervals from 1 minute to 1 hour
- Manual-only polling option (set interval to
0)
Settings UI
- Full add / edit / delete resource management through a native SwiftUI settings window with sidebar navigation
- Resource editor form for configuring scripts, names, and resource types
- Settings window opens reliably and comes to the front
JSON Import & Export
- Export your entire configuration as a portable
BarKeeper-config.jsonfile for sharing or backup - Import a JSON configuration file (replaces the current config and refreshes all statuses immediately)
Built-in Azure Fabric Capacity Template
- Pre-configured resource template for Azure Fabric Capacity management (resume/suspend) to get started instantly with Azure CLI
Shell Script Execution
- Scripts run using your default login shell (
$SHELL -l -c "...") so Homebrew,nvm,pyenv, customPATHentries, and tools likeazCLI are all available - stdout and stderr captured separately and trimmed
- Exit code determines success or failure
Version Label
- App version displayed in the menu bar popup
- Development builds clearly marked when version is not injected by CI
🛠 Developer & Project Infrastructure
- XcodeGen-powered — Xcode project is generated from
project.ymland never committed to the repo - Environment-based code signing —
DEVELOPMENT_TEAMresolved from an environment variable, keeping signing credentials out of source - Hardened Runtime enabled for Gatekeeper compatibility
- Automated CI/CD release pipeline via GitHub Actions:
- Build → Code Sign (Developer ID) → Notarize with Apple → Package as
.dmgand.zip→ Draft GitHub Release with SHA256 checksums - Version and build number automatically injected from git tag and run number
- Build → Code Sign (Developer ID) → Notarize with Apple → Package as
- Comprehensive documentation — README with screenshots, getting started guide, script examples, architecture overview, troubleshooting table, and security considerations
- Release pipeline docs (
docs/RELEASE.md) covering all pipeline stages, required secrets, and troubleshooting - CODEOWNERS file for review assignment
- MIT Licensed
📋 System Requirements
- macOS 15.0+ (Sequoia)
- Xcode 16+ / Swift 6.0+ (for building from source)
- (Optional) Azure CLI for the built-in Azure template
📦 Installation
Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized — macOS Gatekeeper will allow it to run without any additional steps.
🔮 What's Next
We have exciting features planned for upcoming releases:
- Notification Center integration for action completion feedback
- New resource type: List Option (dropdown menus)
- Alternator resource type with status text display
- Foreground program support for long-running processes
- Critical action confirmation dialog
- Homebrew Cask distribution
⚠️ Known Limitations
This is a beta release — please report any bugs via GitHub Issues. Key things to keep in mind:
- Config is stored in cleartext at
~/Library/Application Support/BarKeeper/config.json— avoid storing secrets directly in scripts - App Sandbox is disabled (required for arbitrary shell command execution)
- Scripts run with your full user privileges
Checksums (SHA256)
- DMG:
2e3a06bb739378beeb87f6d14c77daa0c7d69b294f94f1f8aed36afe06738e1e - ZIP:
16cbea0b82136e5b671b6f2a488a248e2269dd9ae2c33e4e159e2c67d16e7bb7
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Checksums (SHA256)
- DMG:
431c33703f03e09b8556d4ac0ad35d3568a8c141c1d6d91149c30fb6e17cdc0a - ZIP:
e4ac7c5a1148a4f1e86f2d85490b36bdb1d71ad486e71aae7b1f28da22d2f6ad
What's Changed
- Add docs/RELEASE.md: release pipeline documentation for macOS CI/CD by @Copilot in #9
- docs: add download instructions for pre-built releases by @Copilot in #10
New Contributors
- @Copilot made their first contribution in #9
Full Changelog: v0.1.0...v0.1.1
v0.1.0
Checksums (SHA256)
- DMG:
d5c7682415ae1201574160fb75c5a6e6c358c1f91f3c321e444c9a71090d4da1 - ZIP:
283ccf0294a98cffab1d758961cd5433775f894b42a6a66f91265ab9ae25ee65
Full Changelog: https://github.com/abeckDev/BarKeeper/commits/v0.1.0
Full Changelog: https://github.com/abeckDev/BarKeeper/commits/v0.1.0