SPD
← All projects

macOS app

Volta

A menu bar app that watches every battery around your Mac: deep detail for the Mac itself, plus AirPods, Magic accessories, iPhone and Watch.

Volta's overview: an 80% charge held on a 96 W adapter, live power flow, health 99%, 182 cycles and 30.7 °C
Type
macOS app
Platform
macOS 15+
Status
Daily driver
Built with
Swift / SwiftUI / IOKit / CoreBluetooth
  • Reads the battery controller straight from IOKit
  • Per-bud and case levels for AirPods
  • All history stored locally, nothing leaves the Mac

Why build another battery app

macOS gives you one percentage and a vague health label. The battery controller knows far more than that: per-cell voltages, real wattage in and out, lifetime temperatures, peak currents. My AirPods, iPhone and Watch each report their battery somewhere else entirely. I wanted all of it in one place, quietly sitting in the menu bar.

Volta's menu bar popover: 80% held while plugged in, a six-hour trend, health, temperature, power flow and the apps using significant energy

Going straight to the source

Volta doesn't guess. Each number comes from the system API that owns it:

Data Source
Charge, state, time remaining IOPSCopyPowerSourcesInfo, plus change notifications for instant plug/unplug
Capacities, cycles, cells, lifetime stats AppleSmartBattery in the I/O Registry
System load and adapter watts PowerTelemetryData in the I/O Registry
AirPods, Beats, Magic accessories Accessory power sources and HID BatteryPercent
iPhone, iPad, Apple Watch CoreBluetooth's standard GATT Battery Service (0x180F)
Per-app energy top -o power, with helper processes grouped under their app

The Mac Battery page: health 99%, design vs. full-charge capacity, per-cell voltages, lifetime temperatures and peak currents

The details that took longest

The hard part wasn't reading a number. It was making sure the number was true. iOS only shares its battery level over Bluetooth, not whether it's charging, so a phone on a charger kept showing up as "not charging". The fix I'm working on now is a second path: when a device is plugged in over USB, Volta asks it directly through the lockdown service and merges that answer with what Bluetooth reports. AirPods had a similar problem, with the case and each bud reporting through different combined power sources, and that one is already fixed.

There's also an animated power flow (adapter → system ← battery) with live watts on each leg. It's the quickest way I've found to understand what "charging paused at 80%" actually means.

History charts: battery level with plugged-in periods in green, and system power over 24 hours

Small things

Alert rules can fire on any device crossing a level, as a banner, a notification or a sound. There are colour themes with a pitch-black default, a choice of menu bar icon styles, and a --snapshot mode that renders every screen to PNG for design review. All of the screenshots on this page came from it.

Designed and built by SPD · Source is privateBack to portfolio