Ice 2 hides and shows the items in your macOS menu bar. It splits the menu bar into visible, hidden, and always-hidden sections that you reveal by click, hover, scroll, or hotkey. Beyond hiding items, it customizes the menu bar's appearance, saves layout profiles, and searches your items.
Show hidden menu bar items below the menu bar
- Screenshots
- Requirements
- Install
- Features
- Menu bar sections
- Troubleshooting
- Building from source
- Tests
- Contributing
- Credits
- License
- macOS 26 (Tahoe) or later.
- An Apple Silicon Mac. Ice 2 is built for arm64 only; if you are on an Intel Mac, stay on version 2.4.1, which remains available on the releases page.
- Accessibility and Screen Recording permissions. Ice 2 asks for both on first launch and cannot manage menu bar items without them.
brew install --cask teddychan/tap/ice-2Download the Ice-2-vX.Y.Z.zip file from the
latest release and move the
unzipped app into your Applications folder.
Quit Ice 2 before uninstalling.
If you installed with Homebrew:
brew uninstall --cask teddychan/tap/ice-2If you installed manually, delete Ice 2.app from your Applications folder.
To also remove Ice 2 settings and cached data:
rm -rf ~/Library/Application\ Support/com.dragonapp.ice \
~/Library/Caches/com.dragonapp.ice \
~/Library/HTTPStorages/com.dragonapp.ice \
~/Library/Preferences/com.dragonapp.ice.plist \
~/Library/Saved\ Application\ State/com.dragonapp.ice.savedStateNote
Ice 2 is an independent, open-source fork of Ice — the menu bar manager originally created by Jordan Baird — now actively maintained by Teddy Chan and carried forward to support modern macOS. Download the latest release here and see the roadmap below for upcoming features.
- Hide menu bar items
- "Always-hidden" menu bar section
- Show hidden menu bar items when hovering over the menu bar
- Show hidden menu bar items when an empty area in the menu bar is clicked
- Show hidden menu bar items by scrolling or swiping in the menu bar
- Automatically rehide menu bar items
- Hide application menus when they overlap with shown menu bar items
- Drag and drop interface to arrange individual menu bar items
- Display hidden menu bar items in a separate bar (e.g. for MacBooks with the notch)
- Search menu bar items
- Menu bar item spacing (BETA)
- Profiles for menu bar layout
- Individual spacer items
- Show menu bar items when trigger conditions are met
- Menu bar tint (solid and gradient)
- Menu bar shadow
- Menu bar border
- Custom menu bar shapes (rounded and/or split)
- Different settings for light/dark mode
- Remove background behind menu bar
- Rounded screen corners
- Toggle individual menu bar sections
- Show the search panel
- Enable/disable the Ice 2 Bar
- Show/hide section divider icons
- Toggle application menus
- Enable/disable auto rehide
- Temporarily show individual menu bar items
- Launch at login
- Automatic updates
- Back up & restore settings to a folder you choose (sync across Macs via Dropbox / iCloud Drive / Google Drive)
- Menu bar widgets
Ice 2 divides the menu bar into three sections — Visible, Hidden, and Always-Hidden — and installs one control item per enabled section as a divider between them. macOS adds new items to the left end of the menu bar, which is where the always-hidden section lives.
- Click Ice 2's icon to toggle its section.
- Option-click it to toggle the always-hidden section.
- Control-click it to open Ice 2's menu. Turn this off under Settings ▸ Advanced ▸ Other.
- Command-drag an item along the menu bar to move it into another section.
The always-hidden section is enabled by default. Turn it off, or change how the dividers look, under Settings ▸ Advanced ▸ Menu Bar Sections.
Common problems and their fixes are collected in
FREQUENT_ISSUES.md — items landing in the always-hidden
section, items that appear to have been removed, item order not being remembered,
and the Ice 2 cannot arrange menu bar items in automatically hidden menu bars
error.
If Ice 2 cannot see or move your menu bar items, check that it still has Accessibility and Screen Recording permission in System Settings ▸ Privacy & Security. Granting Screen Recording may require relaunching Ice 2.
Ice 2 uses a number of system APIs that are available starting in macOS 26, and it builds against the macOS 26 SDK. As such, there are no plans to support earlier versions of macOS. Older releases remain downloadable on the releases page.
Yes. Open Settings ▸ Backup & Restore and choose a backup folder. Use Back Up Now to save a snapshot of all your Ice 2 settings (layout profiles, spacers, triggers, hotkeys, and appearance), and Ice 2 also backs up automatically when you quit. The newest 10 backups are kept; you can restore any of them with one click (Ice 2 relaunches to apply).
To sync across Macs or move to a new Mac, point the backup folder at a synced location such as Dropbox, iCloud Drive, or Google Drive — your settings then appear on your other Macs, where you can restore them.
Ice 2 is a plain Xcode project — no package manager step is required.
- Clone the repo and open
Ice.xcodeprojin Xcode 26 or later (the project targets the macOS 26 SDK and builds for arm64). - Select the Ice scheme and run. The product is named
Ice 2.app.
From the command line:
xcodebuild -scheme Ice -configuration Debug -destination 'generic/platform=macOS' build
xcodebuild -scheme Ice -destination 'platform=macOS' testThe Ice scheme's test action runs the IceTests unit-test target.
The Debug configuration builds the app as com.dragonapp.ice.debug, displayed as
Ice 2 Debug, never the release id — so neither a local build nor the test host
(which runs inside the app) can read or write the settings of an installed Ice 2.
The product itself is the isolated app; nothing re-ids it afterwards, so only one
bundle ever claims that id.
To try a local build alongside an installed copy of Ice 2, use the debug runner. It builds the Ice scheme and launches the product, which already has its own name, permissions, and settings, alongside the release app:
bash scripts/run-debug.shSwift sources are linted with SwiftLint
(.swiftlint.yml); CI runs swiftlint lint --strict on every pull request that
touches Swift files.
The unit tests live in IceTests/ and are written with Swift Testing. They cover the
pure, permission-free parts of Ice 2: menu bar item tags and layout profiles, section
names and triggers, appearance configuration and its settings upgrades, colors and
gradients, hotkeys (key codes, modifiers, combinations, and actions), menu bar image
processing and window identification, code signing checks, settings persistence and
backup, and the shared concurrency helpers. Anything that needs live NSStatusItems,
event taps, or granted permissions is covered by the manual checklist in
docs/testing/layout-pane-manual-tests.md
instead. CI runs the suite on every pull request; the Debug configuration signs ad-hoc,
so no Apple Development certificate is needed to run it locally either.
xcodebuild test -project Ice.xcodeproj -scheme Ice \
-destination 'platform=macOS,arch=arm64'| Metric | Value |
|---|---|
| Test cases | 261 passing |
| Line coverage | 14.3% of the Ice 2.app target |
| Measured on | v2.9.10 (f55a610), Xcode 26.6 on macOS 26.5.2 |
Coverage is low by nature rather than by neglect: most of the app target is SwiftUI settings views and menu-bar machinery that needs live status items, event taps, and granted permissions, none of which run headlessly. The tests concentrate on the logic that can be exercised without them.
Issues and pull requests are welcome.
- Read the Code of Conduct before taking part.
- Check FREQUENT_ISSUES.md first — several common reports are already answered there.
- Keep the build lint-clean; CI runs SwiftLint in strict mode.
- Release mechanics (tagging, signing, notarization, the Sparkle appcast, and the Homebrew cask) are documented in docs/RELEASING.md.
Ice 2 is a fork of Ice, created by Jordan Baird. All credit for the original app goes to him and its contributors. Ice 2 is currently maintained by Teddy Chan.
Ice 2 is available under the GPL-3.0 license, the same license as the original Ice.