- Programmatically hide, show, or toggle the menu (by way of a
Bool
binding) - Programmatically enable or disable the menubar extra (by way of a
Bool
binding) - Access to the underlying
NSStatusItem
- Access to the underlying
NSWindow
(when using the.window
style) - Works with one or multiple
MenuBarExtra
- Works with both
menu
andwindow
based styles (see Known Issues)
There is no 1st-party MenuBarExtra
API to get or set the menu presentation state, disable the menubar extra, access the NSStatusItem
, or access the popup's NSWindow
. (Still as of macOS 26 beta 4)
- A new
.menuBarExtraAccess(isPresented:, isEnabled:) { statusItem in }
scene modifier with- a binding to hide/show/toggle the menu
- a binding to enabled/disable the menubar extra
- direct access to the
NSStatusItem
if needed
- A new
.introspectMenuBarExtraWindow { window in }
view modifier passing in theNSWindow
reference - Window-based menu extra status items now remain highlighted while the window is open so it feels more like a native menu
- No private API used, so it's Mac App Store safe
The library is available as a Swift Package Manager (SPM) package.
Use the URL https://github.com/orchetect/MenuBarExtraAccess
when adding the library to a project or Swift package.
Check out the Examples folder for a demonstration of the package's usage.
The hope is that Apple implements native versions of these features (and more) in future iterations of SwiftUI!
Until then, a radar has been filed as a feature request: FB11984872
Check out MacControlCenterUI, a SwiftUI package built on MenuBarExtraAccess for easily building Control Center style menus.
- When using
.menuBarExtraStyle(.menu)
, SwiftUI causes the popup menu to block the runloop while the menu is open, which means:- Observing the
isPresented
binding will not work as expected. - Setting the
isPresented
binding tofalse
while the menu is presented has no effect. - The user must dismiss the menu themself to allow event flow to continue. We have no control over this until Apple decides to change the MenuBarExtra behavior.
- Observing the
Coded by a bunch of 🐹 hamsters in a trenchcoat that calls itself @orchetect.
Licensed under the MIT license. See LICENSE for details.
Please do not email maintainers for technical support. Several options are available for issues and questions:
- Questions and feature ideas can be posted to Discussions.
- If an issue is a verifiable bug with reproducible steps it may be posted in Issues.
If you enjoy using MenuBarExtraAccess and want to contribute to open-source financially, GitHub sponsorship is much appreciated. Feedback and code contributions are also welcome.
Contributions are welcome. Posting in Discussions first prior to new submitting PRs for features or modifications is encouraged.