A native macOS menu bar app that detects two Nintendo Switch Joy-Con controllers over Bluetooth and displays the battery level of each one.
The app only matches devices with the following identifiers:
| Device | Vendor ID | Product ID |
|---|---|---|
| Left Joy-Con | 0x057E |
0x2006 |
| Right Joy-Con | 0x057E |
0x2007 |
When connected, the app selects standard report mode 0x30 to retrieve the
battery status. It does not activate vibration or interpret or display button,
stick, accelerometer, or gyroscope data.
- An Apple Silicon Mac.
- Xcode or Command Line Tools compatible with the installed macOS version.
- The Joy-Con controllers paired under System Settings > Bluetooth.
First, verify that the development tools are available:
xcode-select -p
swift --version
xcrun --sdk macosx --show-sdk-pathIf Xcode is installed but not selected, select its path (adjust the name if you are using a beta version):
sudo xcode-select --switch /Applications/Xcode-beta.app/Contents/DeveloperYou can also use a specific installation without changing the global selection:
export DEVELOPER_DIR=/Applications/Xcode-beta.app/Contents/DeveloperFrom the repository root:
./scripts/build-app.shThis creates JoyConBattery.app in the project root.
- Drag
JoyConBattery.appinto the Applications folder. - Open Applications > JoyConBattery.
- If macOS requests access to input devices, grant permission.
- Connect the Joy-Con controllers from System Settings > Bluetooth.
The menu bar will display something like:
[icon] L 75% · R 50%
When a controller is disconnected, — is displayed. While the app waits for
the first battery report, … is displayed. Click the menu bar item to show the
details:
Left Joy-Con
Battery: medium
Status: discharging
Connected
[Disconnect]
The Disconnect button only closes the Bluetooth connection for the Joy-Con shown in that panel. The controller remains paired and can reconnect normally.
The app also provides:
- Disconnect both Joy-Con controllers to close both connections at once.
- Open at Login to keep the monitor available after signing in to macOS.
- A notification when each Joy-Con connects, including its first battery reading.
- One-time alerts when the battery reaches low (50%), critical (25%), and empty (0%).
To keep the app always available, enable Open at Login from its menu. If macOS requires additional confirmation, authorize it under System Settings > General > Login Items & Extensions. The app does not appear in the Dock while running; close it by selecting Quit JoyConBattery from the menu bar.
You can also launch it directly from the project:
swift run joycon-battery