{"id":36646091,"url":"https://github.com/stephanjoseph/SaneBar","last_synced_at":"2026-01-19T05:00:34.193Z","repository":{"id":332667044,"uuid":"1126461948","full_name":"stephanjoseph/SaneBar","owner":"stephanjoseph","description":"The privacy-first menu bar manager for macOS. Native, lightweight, and scriptable.","archived":false,"fork":false,"pushed_at":"2026-01-17T17:11:03.000Z","size":50866,"stargazers_count":91,"open_issues_count":5,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-17T17:47:51.480Z","etag":null,"topics":["bartender-alternative","claude-ai","mac-app","macos","macos-app","menu-bar","menu-bar-manager","menubar","open-source","pair-programming","privacy","status-bar","swift","swiftui","vibecoding"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stephanjoseph.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"auditor/AccessibilityService.swift","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"stephanjoseph"}},"created_at":"2026-01-02T00:47:55.000Z","updated_at":"2026-01-17T17:40:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stephanjoseph/SaneBar","commit_stats":null,"previous_names":["stephanjoseph/sanebar"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/stephanjoseph/SaneBar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephanjoseph%2FSaneBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephanjoseph%2FSaneBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephanjoseph%2FSaneBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephanjoseph%2FSaneBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephanjoseph","download_url":"https://codeload.github.com/stephanjoseph/SaneBar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephanjoseph%2FSaneBar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28561842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bartender-alternative","claude-ai","mac-app","macos","macos-app","menu-bar","menu-bar-manager","menubar","open-source","pair-programming","privacy","status-bar","swift","swiftui","vibecoding"],"created_at":"2026-01-12T10:00:24.016Z","updated_at":"2026-01-19T05:00:34.187Z","avatar_url":"https://github.com/stephanjoseph.png","language":"Ruby","readme":"# SaneBar\n\n[![License: MIT](https://img.shields.io/github/license/stephanjoseph/SaneBar)](LICENSE)\n[![Release](https://img.shields.io/github/v/release/stephanjoseph/SaneBar)](https://github.com/stephanjoseph/SaneBar/releases)\n[![macOS 15+](https://img.shields.io/badge/macOS-15%2B-blue)](https://github.com/stephanjoseph/SaneBar/releases)\n[![Privacy: 100% On-Device](https://img.shields.io/badge/Privacy-100%25%20On--Device-success)](PRIVACY.md)\n[![Built with Claude](https://img.shields.io/badge/Built%20with-Claude-blueviolet)](https://claude.ai)\n\n**The privacy-first menu bar manager for macOS.** Native, lightweight, and scriptable.\n\nHide clutter. Lock sensitive icons behind Touch ID. Find any app instantly.\n\n![SaneBar Find Hidden Icon](docs/images/find-icon.png)\n\n### Icons Revealed\n![Menu bar with all icons revealed](docs/images/menubar-revealed.png)\n\n### Icons Hidden\n![Clean menu bar with icons hidden](docs/images/menubar-hidden.png)\n\n---\n\n## Download\n\n**[View All Releases](https://github.com/stephanjoseph/SaneBar/releases)** (macOS 15 Sequoia or later)\n\nOr via Homebrew:\n```bash\nbrew install --cask stephanjoseph/sanebar/sanebar\n```\n\n---\n\n## How It Works\n\n1. **Click** the SaneBar icon to show/hide your menu bar icons\n2. **⌘+drag** icons to choose which ones hide\n3. **Option-click** the SaneBar icon to open Power Search\n4. That's it!\n\nIcons to the **left** of SaneBar = can be hidden  \nIcons to the **right** of SaneBar = always visible\n\n---\n\n## Features\n\n### Privacy First\n- **🔒 Secure Reveal** — The *only* menu bar manager that locks hidden icons behind **system authentication** (password prompt). Protect sensitive apps like crypto wallets, messaging tools, and VPNs.\n- **100% On-Device** — No analytics. No telemetry. No network requests. Everything stays on your Mac.\n\n![Privacy Settings](docs/images/settings-general.png)\n\n### Power Search\n- **Find Hidden Icon** — Search and click any menu bar app, even if hidden behind the Notch\n- **Keyboard Navigation** — Arrow keys to navigate, Enter to select, Escape to close\n- **Virtual Click** — Activate menu bar items without seeing them\n- **Per-Icon Hotkeys** — Global shortcuts for your most-used menu bar apps\n\n### Automation Ready\n- **AppleScript Support** — Full scripting integration for Shortcuts and automation workflows\n- **Smart Triggers** — Auto-show on WiFi network, app launch, or low battery\n- **Profiles** — Save different setups for work, home, or presentations\n\n![Rules and Automation](docs/images/settings-rules.png)\n\n### Core\n- **One-click hide/show** — Toggle visibility with a single click or hotkey (default: ⌘\\\\)\n- **⌘+drag to organize** — Choose which icons hide and which stay visible\n- **Auto-hide** — Icons disappear after a configurable delay\n\n### Gestures\n- **Hover to reveal** — Move your cursor to the top of the screen to show hidden icons\n- **Scroll to reveal** — Two-finger scroll up in the menu bar area\n\n### Customization\n- **Liquid Glass** — Beautiful translucent styling on macOS 26 Tahoe\n- **Bar Styling** — Tint, shadow, borders, and rounded corners (all macOS versions)\n\n![Appearance Settings](docs/images/settings-appearance.png)\n\nWorks perfectly on Macs with Notch. **100% private** — no network requests, no analytics, no account.\n\n---\n\n## Power User Features\n\n### 🔍 Find Hidden Icon\nQuickly find and activate any menu bar app without lifting your hands from the keyboard.\n1. **Option-click** the SaneBar icon, or use the menu **Find Icon…** (default hotkey: ⌘⇧Space)\n2. Type an app name and press **Return**\n3. SaneBar will reveal hidden icons and **virtually click** the app's menu bar item\n4. After a configurable delay (default 15 seconds), icons automatically hide again\n\nThis works even if the icon is physically hidden behind the Notch or off-screen!\n\n### ⌨️ Per-Icon Hotkeys\nAssign a specific global hotkey to any menu bar app.\n1. Open **Find Icon…** window\n2. Select an app from the list\n3. Click the **Record Shortcut** box in the footer\n4. Press your desired key combination\n5. Now, pressing that hotkey will instantly show hidden items and open that app's menu\n\n### 🎨 Bar Styling\nCustomize the look of your menu bar panel.\n- Go to **Settings → Appearance**\n- Enable \"Custom Appearance\"\n- On macOS 26 Tahoe: Enable **Translucent Background** for the native Liquid Glass look\n- On older macOS: Adjust **Tint Color**, **Opacity**, **Shadow**, **Border**, and **Rounded Corners**\n\n### 💾 Profiles\nSave different menu bar configurations for different contexts (e.g., \"Work\", \"Gaming\", \"Presentation\").\n- Go to **Settings → General → Saved Profiles**\n- Click **Save as Profile…**\n- Restore any profile with a single click\n\n---\n\n## The Notch \u0026 50+ Apps\n\n**Worried about losing icons behind the Notch?**\n\nIf you have 50+ apps, macOS might hide some of them behind the camera housing (the \"Notch\") or off-screen. SaneBar handles this gracefully:\n\n1. **Hiding**: SaneBar pushes unused icons safely off-screen so your menu bar looks clean\n2. **Safety Lock**: If SaneBar itself would get pushed off-screen, it refuses to hide to ensure you never lose control\n3. **Find Hidden Icon**: Can't see an icon because it's behind the Notch? Open **Find Icon…**, type the app name and hit Enter. SaneBar will find it and click it for you, even if it's invisible\n4. **Tighter Icon Spacing**: Reduce system-wide menu bar spacing to fit more icons. Go to **Settings → Appearance** and enable \"Reduce space between icons\" (requires logout)\n\n---\n\n## Configuration\n\nAll settings are in the **Settings** window (click SaneBar icon → Settings, or press ⌘,).\n\n| Tab | What's there |\n|-----|--------------|\n| **General** | Launch at login, show in Dock, security (authentication lock), software updates, saved profiles |\n| **Rules** | Auto-hide behavior, revealing gestures (hover, scroll), automatic triggers (battery, apps, Wi-Fi) |\n| **Appearance** | Divider style, menu bar styling (tint, opacity, shadow, border, corners), icon spacing |\n| **Shortcuts** | Global keyboard shortcuts, AppleScript commands |\n| **About** | Version info, privacy badge, licenses, support, report issue |\n\n### Revealing Gestures (Settings → Rules)\n- **Hover near top** — Show hidden icons when you move cursor to the top of the screen\n- **Scroll up** — Two-finger scroll up in the menu bar reveals hidden icons\n\n### Automatic Triggers (Settings → Rules)\n- **Low Battery** — Auto-show when battery drops below threshold\n- **App Launch** — Show when specific apps start\n- **Wi-Fi Change** — Show on specific networks (click \"Add current network\")\n\n### Icon Spacing (Settings → Appearance)\n\nReduce the spacing between **all** menu bar icons system-wide to fit more icons before they get hidden by the notch.\n\n- **Enable**: Toggle \"Reduce space between icons\" in Appearance Settings\n- **Defaults**: Ships with notch-friendly values (spacing=4, padding=4)\n- **Logout required**: macOS reads these settings at login, so you must log out and back in for changes to take effect\n- **Reversible**: Disable the toggle and log out to restore default spacing\n\n---\n\n## Privacy\n\n**Your data stays on your Mac.** SaneBar makes zero network requests. No analytics. No telemetry. No account.\n\n![100% On-Device](docs/images/settings-about.png)\n\n[Full privacy details](PRIVACY.md)\n\n---\n\n## Support\n\nFree to use! If SaneBar helps you, star this repo.\n\n### Donations\n\n| | Address |\n|---|---------|\n| **BTC** | `3Go9nJu3dj2qaa4EAYXrTsTf5AnhcrPQke` |\n| **SOL** | `FBvU83GUmwEYk3HMwZh3GBorGvrVVWSPb8VLCKeLiWZZ` |\n| **ZEC** | `t1PaQ7LSoRDVvXLaQTWmy5tKUAiKxuE9hBN` |\n\n---\n\n## For Developers\n\n\u003cdetails\u003e\n\u003csummary\u003eBuild from source\u003c/summary\u003e\n\n### Requirements\n- macOS 15.0+ (Sequoia or later)\n- Xcode 16+\n- Ruby 3.0+\n- [XcodeGen](https://github.com/yonaskolb/XcodeGen)\n\n### Build\n\n```bash\ngit clone https://github.com/stephanjoseph/SaneBar.git\ncd SaneBar\nbundle install\n./scripts/SaneMaster.rb verify\n./scripts/SaneMaster.rb launch\n```\n\n### Project Structure\n\n```\nSaneBar/\n├── Core/                   # Business logic\n│   ├── Services/           # AccessibilityService, HoverService, etc.\n│   ├── Controllers/        # StatusBarController, SettingsController\n│   └── Models/             # Data models\n├── UI/                     # SwiftUI views\n│   ├── Settings/           # Modular settings tabs\n│   └── SearchWindow/       # Find Hidden Icon UI\n├── Tests/                  # 241 unit tests with mocks\n├── scripts/                # Build automation (SaneMaster.rb)\n└── project.yml             # XcodeGen configuration\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAppleScript automation\u003c/summary\u003e\n\n```bash\n# Toggle hidden items\nosascript -e 'tell app \"SaneBar\" to toggle'\n\n# Show hidden items\nosascript -e 'tell app \"SaneBar\" to show hidden'\n\n# Hide items\nosascript -e 'tell app \"SaneBar\" to hide items'\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eThe story\u003c/summary\u003e\n\nBuilt pair programming with [Claude](https://claude.ai). Wanted a menu bar manager that wasn't $15, didn't phone home, and actually worked on macOS Tahoe with Liquid Glass.\n\n\u003c/details\u003e\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","funding_links":["https://github.com/sponsors/stephanjoseph"],"categories":["Menubar"],"sub_categories":["Text"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephanjoseph%2FSaneBar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephanjoseph%2FSaneBar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephanjoseph%2FSaneBar/lists"}