JuiceLeft app icon: a battery on deep teal, filled with lime-to-amber juice that sloshes at the level line

JuiceLeft

Know exactly how much juice is left.

The time until flat, in Apple's own battery spot — and everything that makes it later. Free, for macOS 13+ on Apple Silicon.

Version 1.3.3 · .pkg installer · macOS 13+ on Apple Silicon · install help · all releases

By Weta Technologies LimitedSwift & SwiftUIFreeware · all rights reservedNo analytics · signed updates

Apple's battery icon, with the time left

JuiceLeft's item is drawn to Apple's exact geometry and takes Apple's spot: 84% [battery] 2 Hours 10 Min Remaining, 45 Min Until Full while charging, just 100% [battery] when full. Below the warning level the whole item pulses red until you plug in; a press-and-hold turns monitoring off and puts a slash through the glyph. Quit JuiceLeft and Apple's item comes back exactly as it was.

Animated JuiceLeft menu-bar item on a light and a dark menu bar: 84% with the battery glyph and the time remaining, the level falling, the whole item pulsing red below the warning level, the bolt and the time until full when the charger goes in, and a slash when monitoring is turned off
Apple's battery item captured from the menu bar, above JuiceLeft's item in each of its states
Apple's item, captured from a real menu bar, above JuiceLeft's — drawn to the same geometry.

When, not just how much — and how to make it later

A forecast that learns from its own misses, alerts that never nag twice, one click that buys you hours, and the settings that keep a battery healthy — in one panel.

🔮

A forecast that learns

Three opinions of your drain rate — the gas gauge right now, the trend of the last 20 minutes, and what you typically drain at this time of day — blended by how wrong each has recently been. It checks itself every five minutes and re-weights.

🎯

It tells you how accurate it is

Every forecast made during a discharge is scored, once you plug in, against when the level really arrived. After a couple of discharges: “Forecasts like this one have typically landed within ±15 min.”

🌿

Save Battery, one click

Low Power Mode, the screen down to 40 %, the keyboard light off — with what that gains (~+3 h 15 m) before you click. One Undo puts everything back exactly; so does plugging in. The gain is estimated until JuiceLeft has measured what those changes save on your Mac.

💡

Tips with one-click fixes

Only what is costing power right now: a bright screen (Dim), the keyboard light on in a lit room (Turn off), Low Power off under 30 % (Low Power), an app hogging a core (Quit), a hungry USB device. Each with its gain.

🚨

Warning and alert levels

At 20 % (yours to change) the item pulses red. At 10 % a tone plays — JuiceLeft's own chime or any macOS alert sound — once or every 2 / 5 / 10 minutes until you plug in. Optional notifications, a 30-minute snooze, and a 2 % hysteresis so a bounce can't sound it twice.

⚡️

Energy mode, from the panel

Low Power · Automatic · High Power for the power source in use — the same setting as System Settings › Battery. Setting it needs root, so a short shell script is installed as a root job with one admin prompt; nothing but exactly b|c × 0|1|2 ever reaches pmset.

🔋

Stretch the battery

Smart Low Power by itself at 30 % or under an hour left, the old mode back on the charger. Keep the screen at or below a cap on battery. Charge limit (macOS 26.4+): Apple's own, 80–100 %, with Full for travel. Heat guard at 35 °C charging or 40 °C on battery.

👆

Click, hold, hover

A click on the item opens the panel. Press and hold it to turn monitoring on or off without opening anything — the trackpad taps back. Rest the pointer on it for a card with the time in words and Flat around 4:22 PM. Or record a keyboard shortcut and open the panel from any app — no Accessibility permission.

🧮

Using the most power

Your apps, the top five by share of processor time, helpers folded into the app that owns them, the rest as one System & background line. Each with a ✕ Quit: a graceful quit first, so unsaved work gets its save prompt; Force Quit only if the app is still there 5 s later, behind one confirmation.

❤️‍🩹

Battery health, and a coach

Apple's own health figure as the headline, then condition, cycles, the capacities, temperature, voltage, charger watts, watts in or out, total draw, macOS's estimate for comparison — and how much of the last three days the battery sat full, cycles per week, the health trend, and a one-tap Set 80%.

📈

History

The level over the last 12 hours, 24 hours or 3 days — blue on battery, green charging, the warning level dashed, a gap where the Mac slept — and the window in one line: 100% → 84% · about 8%/h on battery. Three days, a point a minute, kept on your Mac.

🖱️

Your devices

The batteries of the Bluetooth mice, keyboards and trackpads connected to the Mac, read from macOS itself — no permission, nothing installed — and, if you turn it on, a notification when one gets low, at the level you pick, once per charge.

🔗

Your shortcuts and scripts

A juiceleft:// link runs a panel action: savebattery?on=1, mode?set=low, topup, monitoring?on=0, snooze. Five commands, every parameter checked, nothing else accepted — bind one to a shortcut of your own or a hotkey.

✨

A plain-English line

“Draining at 14 % an hour, easier than your usual 20 % for this time of day.” On macOS 26 with Apple Intelligence on, the on-device model phrases it — and every number is checked against JuiceLeft's own, so it can never invent one. Optional; the template stands everywhere else.

🧘

Quiet by design

Samples the battery every 30 s and only draws when something changes; the app list and the tips only run while the panel is open. No Dock icon, no analytics, no network beyond a daily update check. Launch at login, and the menu bar showing the icon, the percent, the compact time or the words — and, if you like, the power draw (−12 W).

How it works

macOS's own “time remaining” reacts to every change in load. JuiceLeft's rests on three opinions and a memory — a few thousand readable lines of Swift and one short shell script.

The forecast

1
Live — the gas gauge's current, smoothed over the last 5 minutes.
2
Trend — a straight line fitted to the last 20 minutes of the level curve.
3
Prior — what you typically drain at this time of day: six 4-hour slots, weekdays and weekends apart.
4
Each opinion is weighted by the inverse of its recent error. Every 5 minutes a check is filed and scored 20 minutes later; the weights move, the prior learns, and a bias term soaks up any consistent lean. Time to flat = level ÷ blended rate.
5
When you plug in, every forecast made during the discharge is scored against when its level really arrived — that is the accuracy the panel shows. While charging it uses macOS's time-to-full when there is one. Everything learned is saved and carries on between launches.

The swap

Control Center keeps a per-host preference that System Settings › Control Center sets to hide Apple's battery item, and picks up live. JuiceLeft sets the same value on launch (remembering what was there), copies Apple's saved menu-bar position to its own item so it lands in the same place, and on quit puts the original back. A switch in the panel turns the swap off at once.

The alerts

0 %tone at 10 %flash at 20 %100 %

On battery, each level latches on the way down and only releases 2 % above it. The tone plays once on entering the alert level, again every repeat interval while still there, and again when a snooze runs out. The charger going in clears everything and re-arms.

What a change is worth

Out of the box, cautious defaults: the display's draw climbs steeply with brightness, Low Power trims about 15 %, and no default claim may exceed 30 % of the drain — such gains are marked ~. Every five minutes on battery JuiceLeft records the drain against brightness and Low Power and fits a tiny regression; once it has two dozen windows with real spread, its own numbers take over.

Every battery figure comes from IOPowerSources and the AppleSmartBattery registry entry — the same numbers as Apple's battery menu, plus the gas gauge's raw capacities so the forecast sees the level move between whole percents. Per-app energy from processor time through libproc. The charge limit through the same in-process client Apple's own UI uses. Nothing needs root but the energy modes.

The panel

Click the menu-bar item. A status header with the forecast, one plain sentence and how accurate it has been, Save Battery and the tips, the energy mode, then a card each for the alerts, the apps using the most power, battery health, stretching the battery and charging care. Light or dark, it follows your Mac — and Reduce Motion, Increase Contrast, the keyboard and VoiceOver.

JuiceLeft panel on battery, light appearance: Flat around 4:22 AM, the Save Battery button with its gain, two tips, the energy mode, and the cards with Stretch the battery open
On battery, light
JuiceLeft panel on battery, dark appearance
On battery, dark
JuiceLeft panel while charging, dark: Full around 12:25 AM, Stretch the battery with the charge limit, and charging care
Charging, with the charge limit
JuiceLeft panel at 18 percent, light: the header tinted orange and the alerts card saying Flashing, with a Snooze button
Below the warning level

Download & install

Download the installer and open it: Continue, Agree, Install — one password (or Touch ID), and JuiceLeft is in your menu bar with everything set up.

⬇︎ Download JuiceLeft.pkg

  1. Open the package. It is Developer ID signed and notarized by Apple (the official builds are signed and notarized by Weta Technologies Limited), so there is no Gatekeeper step — and the app it installs opens without a warning.
  2. Continue, Agree to the licence, Install. macOS asks for your password or Touch ID once: JuiceLeft goes into Applications, its helper for energy modes and the charging light is set up, and JuiceLeft opens in the menu bar. Nothing asks again — later updates arrive signed, from inside the app.
  3. Apple's battery icon disappears and JuiceLeft's item takes its spot, with the time left after it. It asks once whether it may post notifications; say no and the pulse and the tone still work.

Or build it from source

A few seconds with Apple's command-line developer tools (xcode-select --install):

git clone https://github.com/Weta-Technologies/JuiceLeft.git
cd JuiceLeft
./build.sh install

Builds build/JuiceLeft.app, copies it to /Applications and launches it. To uninstall, quit JuiceLeft (that puts Apple's battery icon back), run sudo /bin/sh /Applications/JuiceLeft.app/Contents/Resources/juiceleft-helper.sh uninstall if you ever set an energy mode, and move the app to the Trash — or ./build.sh uninstall from a source checkout. If the battery icon didn't come back, System Settings › Control Center › Battery › Show in Menu Bar is the switch.

  • Test it: JuiceLeft.app/Contents/MacOS/JuiceLeft --selftest walks the alert rules, the forecast and its learning, the menu bar's words, the savings model, the tips, the guards, the click logic, the accessory-battery parsing and the URL scheme; --simulate runs a fake battery draining 1 % a second so you can watch the flash, the tone, the charger reset and the heat guard; ./test-helper.sh checks the helper against a fake pmset.
  • Privacy: no analytics; the only network activity is the daily update check (a plain request to GitHub, which you can turn off) and the update you start. Updates are Ed25519-signed and verified before anything is unpacked. The helper only ever runs pmset; the Apple Intelligence sentence is generated on device; settings and what it has learned are two files in your home folder, yours to delete; accessory battery levels are read live and never stored.