A modular macOS menu bar utility. Lives in the top-right corner of the screen and groups system tools as expandable modules with Apple's Liquid Glass design.
Requires macOS 26 (Tahoe) or later.
- Liquid Glass UI — built with SwiftUI's modern
.regularMaterial/ glass styling introduced in macOS 26 - Modular architecture — each tool is a self-contained module, expanded on demand from a tile grid
- No Dock icon — lives only in the menu bar (
LSUIElement) - Configurable menu bar icon (app icon, temperature, battery, CPU, or RAM) and default module on open
| Module | Description |
|---|---|
| Volume | Per-application volume sliders and mute toggles via CoreAudio HAL |
| Thermal | Live thermal state via SMC |
| Battery | Battery status and health |
| CPU | CPU usage |
| Screenshot | Screenshot capture |
| Clipboard | Clipboard history/manager |
- macOS 26 (Tahoe) or later
- Xcode Command Line Tools (provides
swift):xcode-select --install
MenuDeck is a Swift Package Manager project driven by a Makefile. It must run as a signed .app bundle (not the raw binary) — otherwise macOS won't grant or persist TCC permissions like Audio Capture.
make runThis builds a debug binary, wraps it into MenuDeck.app, ad-hoc code-signs it, kills any running instance, and reopens it.
make appCreates MenuDeck.app in the project folder (release configuration).
make installCopies the release bundle to /Applications/MenuDeck.app. To launch it automatically on login: System Settings → General → Login Items → add MenuDeck.
make cleanRemoves .build/ and MenuDeck.app.
Sources/MenuDeck/
├── main.swift # NSApplication entry point
├── AppDelegate.swift # Hides from Dock (LSUIElement)
├── MenuBar/
│ └── MenuBarController.swift # NSStatusItem + NSPopover
├── Views/
│ ├── MenuDeckPopoverView.swift # Root SwiftUI view (tile grid + settings)
│ └── ModuleSectionView.swift # Collapsible section per module
└── Modules/
├── Module.swift # Protocol every module conforms to
├── VolumeControl/
├── Thermal/
├── Battery/
├── CPU/
├── Screenshot/
└── Clipboard/
- Create
Sources/MenuDeck/Modules/MyModule/ - Implement the
Moduleprotocol:
final class MyModule: Module {
let id = "my-module"
let name = "My Module"
let sfSymbol = "star.fill"
let tintColor: Color = .blue
@MainActor
func makeContent() -> AnyView {
AnyView(MyModuleView())
}
}- Register it in
MenuDeckPopoverView.swift:
private let allModules: [any Module] = [
VolumeControlModule(),
ThermalModule(),
BatteryModule(),
CPUModule(),
ScreenshotModule(),
ClipboardModule(),
MyModule(),
]PolyForm Noncommercial License 1.0.0 — free to use, modify, and share for any noncommercial purpose. Commercial use requires the licensor's permission.