Three system signals. One native macOS status icon — in your menu bar or the Dock.
Want to see it in action first? Open statustrio.lingai.net to simulate every icon state in your browser.
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português (Brasil) · Русский
Status Trio is a native macOS status app that combines Wi-Fi, battery, and volume into one compact, configurable icon, shown in the menu bar, in the Dock, or in both. Its popover goes deeper than the icon: a Wi-Fi panel for nearby networks and link details, a Bluetooth panel for paired devices, a Battery Details page, and the audio devices that are playing. It is inspired by the iPhone Duo's combined status bar icon for Wi-Fi, Battery, and Cellular Data, adapted for Mac with Volume instead of Cellular Data.
Status Trio is an independent project and is not affiliated with Apple.
- One icon, three signals — battery, Wi-Fi, and volume share one icon in the menu bar, the Dock, or both, and a Bluetooth device that is playing can take the middle spot with its own symbol.
- Bluetooth — the volume indicator turns blue while it plays. The panel lists connected and paired devices with AirPods battery, and stays off until you enable it.
- Battery — percentage, charging or plugged in, time to full, and a color when it runs low. Open the row for adapter power, voltage, current, cycle count, and Low Power Mode.
- Wi-Fi — the network you are on and how strong the signal is. Open it to see nearby networks, check the link details, or switch Wi-Fi off. Switching between networks happens in the Wi-Fi pane of System Settings.
- Volume — level, mute, and the output device, drawn as dots or an arc. Scroll the whole panel or just the control, and pick which direction turns it up.
- Make it yours — icon size, symbol scale, ring thickness, status colors, and which sections the popover shows, in the order you want.
- Menu bar, Dock, or both — and the Dock icon can follow the system style or stay dark or light.
- Native on macOS — left-click opens the popover, right-click opens the menu, and a first-launch guide explains each part of the icon. Ethernet, a hotspot, or Internet Sharing can keep the Wi-Fi glyph if you prefer.
- Stays current — status comes from system events with a slow poll as a fallback, and Sparkle updates the app through a signed feed.
- Also included — twelve languages, and an optional launch at login.
While audio plays over Bluetooth, two switches under Settings › Bluetooth let the middle glyph become that device's own symbol — AirPods, headphones, speakers, and other devices supply their own — and let the volume dots or arc turn blue. Both are off by default. Let network errors take priority, on by default, keeps the network icon while the connection itself is in trouble:
The popover's Bluetooth row reports live state: the names of connected devices and, for AirPods, left, right, and case battery. The Bluetooth panel lists paired devices and their connection state; it is off by default, is enabled under Settings › Status Panel, and asks for Bluetooth permission on first use. Settings › Bluetooth also controls whether the battery levels are read and scales the Bluetooth icon from 100% to 180%.
The same live icon can live in the Dock instead of the menu bar, or in both places at once:
The Dock icon draws the same combined icon as the menu bar, so with Bluetooth audio replacement enabled the device glyph takes over the middle there too. Its background can follow the system icon style or be pinned to a fixed shade:
Every state the combined icon can show, drawn by the app's own renderer — battery indicators on top, Wi-Fi (or the Bluetooth audio device that can replace it, when that option is on) in the middle, and volume dots or the arc at the bottom, turning blue while a Bluetooth device is playing:
The same states rendered for a dark menu bar:
- macOS 15 or later to run the app
- Swift 6 toolchain with the macOS 26 SDK (Xcode 26 or later) to build it. Building against an
older SDK silently produces the pre-Tahoe popover appearance, so
scripts/build-app.shfails when the SDK is older than 26.
git clone https://github.com/lingyired/status-trio.git
cd status-trio
swift run StatusTrioBuild an ad-hoc-signed app bundle and launch it:
bash scripts/build-app.sh releaseThe bundle is created at dist/StatusTrio.app. To build without quitting or launching an existing instance, run:
bash scripts/build-app.sh release no-openThe ad-hoc-signed bundle is intended for local personal use. Gatekeeper may reject it if the bundle is transferred with quarantine metadata.
Download the latest StatusTrio-*.dmg from the GitHub Releases page, open it, and copy Status Trio.app into /Applications.
The current public build is ad-hoc signed but is not notarized by Apple. macOS may show this warning on first launch:
Apple cannot verify “Status Trio” is free of malware that may harm your Mac or compromise your privacy.
This is a Gatekeeper warning caused by the missing Developer ID signature and Apple notarization. It does not by itself mean the app contains malware. Only bypass the warning when the DMG was downloaded from the official GitHub Releases page and its published SHA-256 checksum matches.
After copying the app into /Applications, remove the quarantine attribute and open it:
xattr -dr com.apple.quarantine "/Applications/Status Trio.app"
open "/Applications/Status Trio.app"Alternatively, try to open the app once, then go to System Settings → Privacy & Security and choose Open Anyway.
Do not disable Gatekeeper globally. Subsequent Sparkle updates are authenticated with the app's EdDSA signing key; the xattr command is normally needed only for the first manual installation.
- Left-click the menu bar icon or the Dock icon to open the status popover.
- Right-click either icon for the native menu, including version and quit actions.
- Select a row in the popover to open its page: Wi-Fi details with nearby networks, paired Bluetooth devices, and Battery Details.
- Open Settings to choose where the icon is shown (menu bar, Dock, or both) and to change its size, colors, ring thickness, the panel sections and their order, scroll-to-adjust behavior, language, update checks, and launch at login.
- Reopen the Meet your icon guide any time from Settings › App Icon › Open Guide.
- Enable the current Wi-Fi network name when prompted; macOS requests location access for this optional detail.
Two boundaries macOS and this project draw deliberately. Both are explained in Known limitations.
- Switching networks happens in System Settings. Choosing a network in the popover opens the Wi-Fi pane; Status Trio never reads or stores Wi-Fi passwords, because macOS offers no public API to connect with a saved password and every alternative ends with the app holding them.
- "Charge to Full Now" stays in macOS. When optimized battery charging or a charge limit pauses charging, the popover reports the paused state and links to the Battery pane; no public API lets an app resume charging past the limit, and Status Trio does not write to the SMC or ship a privileged helper to do it.
Status Trio follows the macOS preferred language by default and includes English, Simplified Chinese, Traditional Chinese, Japanese, Korean, Spanish, French, German, Italian, Brazilian Portuguese, Russian, and Arabic.
Status Trio reads status through public macOS frameworks. It does not use App Sandbox or require a network entitlement, and it does not include telemetry or analytics. It does not read or store Wi-Fi passwords and never asks for Keychain access. Location access is optional and requested only when you choose to display the current Wi-Fi network name or open Wi-Fi details. Bluetooth access is requested only when you open Bluetooth details, and it exists to show paired-device connection status.
Run the test suite:
swift testRun a focused XCTest filter through the helper:
bash scripts/test.sh BatteryMonitorTestsTo build a worktree app alongside the main installation:
bash scripts/build-worktree.sh releaseThe helper derives a development bundle identifier and display name from the current branch. Both values can be overridden:
BUNDLE_ID=com.lingsmbp.StatusTrio.dev.settings-redesign \
APP_NAME="Status Trio (Settings Redesign)" \
bash scripts/build-worktree.sh releaseThe single-instance lock is scoped by bundle identifier, so differently identified builds can run at the same time.
- Swift 6
- SwiftUI + AppKit
- macOS 15+
LSUIElementmenu bar accessory that switches to a regular activation policy while the Dock icon is shown- Sparkle for update checks
- Known limitations
- Automated GitHub Actions releases
- Status Trio design specification
- Menu bar icon SVG
- Data-driven icon demo
Copyright 2026 lingyired.
Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
Created and maintained by lingyired.
Website: https://statustrio.lingai.net/





