# Pelmet: a macOS 27 menu bar manager built on the system's own hiding mechanism

> Pelmet is a Swift menu bar manager for macOS 27 that drives the same private framework Apple uses for exam lockdown mode. It is small, GPL-3.0, and honest about the API risk it carries.

**fif7y/pelmet** — A calm menu bar, done the native way. Hides the icons you don't need until you do.

- Repository: https://github.com/fif7y/pelmet
- Website: https://pelmet.fif7y.com
- Stars: 737 · Forks: 17
- Language: Swift
- License: GPL-3.0
- Published: 2026-09-17 · Updated: 2026-09-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/fif7y-pelmet

## The menu bar clutter problem, and the macOS 27 constraint

Menu bar managers have existed for years, and most of them fight the system: they overlay windows, draw their own bars, or move status items around by force. Pelmet takes a different route. The README states that macOS 27's menu bar can hide items natively, and that this is the mechanism behind the system's assessment (exam lockdown) mode. Pelmet drives that mechanism directly. It asserts a configuration listing what should stay visible, and macOS hides the rest and reflows the bar.

That single design decision explains almost everything else about the project. Hiding feels like part of the system because, as the README puts it, it is the system. It also explains the hard requirement: macOS 27 (Golden Gate). Earlier versions of macOS use a different menu bar architecture that Pelmet does not target, so the app is not a general-purpose tool for older Macs. If you are on macOS 26 or earlier, this project is simply the wrong shape for your machine, no matter how good the feature list looks.

## How Pelmet hides icons: a private framework, resolved at runtime

The hiding API lives in a private Apple framework called MenuBarClientCore. The README is explicit that it is not documented or guaranteed, and that a macOS update could change or remove it. Pelmet resolves the framework at runtime and fails soft: if the API disappears, Pelmet reports hiding as unavailable rather than breaking the menu bar. That is a reasonable engineering posture for a private dependency, and it is also the project's largest structural risk. Anyone adopting Pelmet should treat the hiding feature as something that can be withdrawn by an OS update without notice.

Everything else uses public APIs. Accessibility gives Pelmet sight of the menu bar's items and their positions, and it is how clicking a hidden item works without revealing everything. ScreenCaptureKit powers the optional animation styles: macOS shows and hides icons with an animation of its own, and Pelmet's Instant, Smooth and Fade modes play over it using two stills of the menu bar. The README states nothing is recorded or kept. Without Screen Recording permission, icons show and hide the way macOS does it, which is a graceful degradation rather than a broken state.

## Three sections, one rule: Visible, Hidden, Always Hidden

The organisation model is deliberately small. Visible is always there. Hidden comes back on a hover or a click. Always Hidden only appears when you ask for it, via a double-click or an Option-click on the chevron. You arrange icons in a layout editor with real app-icon previews and drag-and-drop ordering, or you skip the window and Command-drag icons across the chevron directly in the menu bar. The README says Pelmet adopts the move either way.

System icons hide too. Sound and Battery behave like any other icon. A few that macOS protects, specifically Clock, Control Center and Siri, are shown locked in the editor rather than pretended away, and anything macOS groups together gets a badge instead of a fake handle. That honesty about what cannot be moved is more useful than a UI that offers a drag handle which silently does nothing.

Reveal behaviour is configurable rather than fixed: hover with a delay from 0.1 to 0.5 seconds, a click on empty menu bar space, a double-click for the always-hidden section, or the chevron itself. The animation is Instant, Smooth or Fade, and the reveal ends either by auto-rehide after a delay you set (instant to 5 seconds) or the moment you click somewhere else.

## Installing Pelmet and setting up your first hidden section

The README gives two install paths. The first is a DMG from the Releases page: download it, drag Pelmet to Applications, and launch it. The second is Homebrew, which is the one to use if you already manage Mac software from the terminal:

```bash
brew install fif7y/tap/pelmet
```

Either way you need macOS 27 (Golden Gate). On first launch Pelmet asks for Accessibility, which the README marks as required because it is how Pelmet sees the menu bar's items and positions and how clicking a hidden item works without revealing everything. Screen Recording is offered next to it in onboarding and is skippable.

Once the permission is granted, the fastest first use is to skip the layout editor entirely and Command-drag an icon across the chevron in the menu bar. Pelmet adopts the move, and the icon lands in the Hidden section. From there, hovering the chevron brings it back. If you would rather see the whole arrangement, open the layout editor and drag icons between Visible, Hidden and Always Hidden; the README describes real app-icon previews and drag-and-drop ordering there.

If you want to build from source instead of using a release, the README states the build requires Xcode with the macOS 27 SDK and xcodegen. The repository has a project.yml at the top level, which is the file xcodegen consumes, and the source is split across Pelmet/, PelmetItems/, PelmetTests/ and Packages/ directories.

## Built-in replacements, and why they exist

Pelmet ships replacements for several system extras: media controls, AirDrop, a camera and microphone indicator, a timer, fast user switching, and Shortcuts items that survive hiding. The reason is stated plainly in the README: macOS temporarily removes its own extras while hiding is active. So if you rely on the system's own Now Playing widget in the menu bar, hiding is not a neutral operation, it can take that widget away. Pelmet's replacements exist to fill that gap.

There is a second workaround in the same family. Pelmet can create an app launcher icon for any application: clicking it opens the app, and it hides like everything else. The README frames this as the fix for apps whose own icon cannot be hidden, and as a convenient launcher for the rest. This is a real limitation of the underlying mechanism surfacing as a feature. Some third-party status items cannot be hidden, and the practical answer is to hide the original and put a Pelmet-controlled launcher in its place.

The rest of the feature set is small and specific. Per-display behaviour lets you set one display to always show everything and another to collapse, with whichever display your pointer is on winning. Separators are visual dividers that behave like icons, with adjustable opacity, and can be Command-dragged anywhere in the bar. The menu bar icon itself has six styles (chevron, arrow, eye, dots, grid, panel) or can be turned off entirely, in which case you reach Settings by shortcut or right-click.

## Privacy, updates and the GPL-3.0 licence

The README states there is no account, no analytics and no server, and that the only connection Pelmet ever makes is checking for its own updates. Updates use Sparkle with EdDSA signatures, checked against a signed appcast. That is a conventional and verifiable update path for a Mac app distributed outside the App Store.

Pelmet is notarized by Apple and ships with the hardened runtime. It is not sandboxed, and the README gives the reason: managing the menu bar requires APIs the App Store sandbox forbids. That means no Mac App Store distribution, and it means you are installing a non-sandboxed app that holds Accessibility permission. Accessibility is a broad grant, so the trust decision here is real, even though the project's stated network behaviour is minimal.

The licence is GPL-3.0. For an end user running the app, that changes nothing about how you use it. For anyone who wants to fork Pelmet, ship a modified build, or embed its code in another product, the copyleft terms apply and are worth reading in the LICENSE file at the repository root before you build anything on top of it. Nothing here is legal advice; the licence text is the authority. The repository also carries a CLA.md and a CONTRIBUTING.md, which matter if you intend to send patches upstream rather than fork.

## Where Pelmet is the wrong tool

The clearest case is the operating system itself. Pelmet targets macOS 27 and nothing earlier, because earlier macOS versions use a different menu bar architecture. If your fleet is mixed, Pelmet only covers part of it.

The second case is anyone who needs a guarantee. The hiding mechanism is a private, undocumented framework, and the README says a macOS update could change or remove it. Pelmet fails soft, which is the right behaviour, but failing soft still means the feature you installed the app for can stop working after an OS update. If a menu bar manager is part of a workflow you cannot afford to have interrupted, that risk is structural and not something configuration can remove.

Third, if you want a menu bar manager that also works on older macOS releases, or that distributes through the Mac App Store, Pelmet is not that. It is not sandboxed, it does not target earlier systems, and its hiding path depends on an API the sandbox forbids. Ice and Bartender are the alternatives the project's own topics point at (ice-alternative, bartender-alternative), and they exist precisely because they take a different route to the same problem: managing the bar from outside the system mechanism rather than driving it. That difference is the whole trade. Pelmet gets native reflow and system-consistent animation, and pays for it with an OS version floor and a private API dependency.

## Conclusion

Pelmet is for macOS 27 users who want native menu bar hiding without an account, analytics or a subscription, and who accept that the hiding mechanism lives in an undocumented private framework. It is not for anyone on macOS 26 or earlier, since the README states earlier versions use a different menu bar architecture Pelmet does not target. Before adopting it, confirm you are on macOS 27, install it, and watch whether the app reports hiding as unavailable after a system update, which is the signal that the private API has moved.

## FAQ

### What does Pelmet do?

Pelmet hides macOS menu bar icons you do not need until you ask for them, using the native hiding mechanism in macOS 27. It organises icons into Visible, Hidden and Always Hidden sections and reveals them on hover, click or a shortcut.

### How do I install Pelmet?

Download the latest DMG from the Releases page, drag Pelmet to Applications and launch it, or run brew install fif7y/tap/pelmet. macOS 27 (Golden Gate) is required, and Pelmet asks for Accessibility permission on first launch.

### Why does Pelmet require macOS 27?

Pelmet drives the native menu bar hiding mechanism introduced in macOS 27, the same one behind the system's assessment (exam lockdown) mode. The README states earlier versions of macOS use a different menu bar architecture that Pelmet does not target.

## Sources

- [fif7y/pelmet on GitHub](https://github.com/fif7y/pelmet)
- [License: GPL-3.0](https://github.com/fif7y/pelmet/blob/main/LICENSE)
- [Project website](https://pelmet.fif7y.com)
- [README](https://github.com/fif7y/pelmet/blob/main/README.md)
- [Releases](https://github.com/fif7y/pelmet/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/fif7y-pelmet
