Bambu Bar
Your Bambu Lab printer, one click away in the menu bar.
Bambu Bar is a native macOS app that shows your 3D printer's progress, temperatures and filament without opening Bambu Studio or Bambu Handy. Glance at the menu bar for percent and time left, click for everything else, or keep a widget on your desktop.
Built with Swift and SwiftUI. No account, no cloud service, no analytics.
Getting started · Features · Widgets · Compatibility · Building
Independent, community-developed software. Not affiliated with or endorsed by Bambu Lab. A P2S is the development printer; other Bambu Lab printers that speak the same LAN protocol (X1, P1, A1, H2) should work.
Why this app?
The printer is in another room, and the slicer is a big app to keep open just to see how long is left. Bambu Bar keeps the answer in the menu bar: 64% · 1h 02m. Click it and a panel shows the job, the stage, temperatures, the spool in use and how much filament is left, with pause, stop, light and speed controls right there.
It talks to the printer directly over your network, the same way Bambu Studio does in LAN mode, so it works with the printer still bound to your Bambu account and nothing goes through a cloud.
Features
| | What you get | | --- | --- | | Menu bar | A printer glyph that fills as the print grows, with progress and time left beside it (or just one, or only the icon), and a pause or alert mark when the printer needs you. | | Panel | The job, its stage ("Heating hotend", "Paused: filament ran out"), percentage, layers, time left and finish time; nozzle, bed and chamber temperatures; AMS spools with what's left and the humidity; printer errors in plain words, in Bambu Lab's own translation. | | Grams left | Bambu Lab spools tell the AMS their net weight, so Bambu Bar shows filament left in grams (≈ 810 g), not just a percentage, and how much you have on hand in total. | | Named filament | Bambu Lab spools show their colour by name (Grass Green, Charcoal). Other spools show the maker and product of the preset you set the slot to on the printer or in Bambu Studio, such as SUNLU PLA Matte. | | Controls | Pause, resume, stop (with a confirmation), print speed (Silent, Standard, Sport, Ludicrous) and a chamber light switch. | | 3D printer models | Each printer family is modelled in Blender: the P2S/P1S/X1 enclosure, the wider dual-nozzle H2, the open P1P frame, the A1's arch with its AMS Lite, the A1 mini. In the app it's a live 3D model you can turn with the mouse: the print grows layer by layer in the filament's colour, the bed drops (or the A1's gantry rises) as it goes, the toolhead moves while printing, the AMS spools take their real colours and the chamber light follows the printer's. Widgets use studio renders of the same models. | | Knows your model | What each model has comes from the printer profiles Bambu Lab publishes with Bambu Studio, so you only see what your printer can report: no chamber temperature on an A1 or P1S, no door or chamber light on the A series, both nozzles on an H2D, heated-chamber targets on the H2 and X1E, and the build volume and fans on the Printer page. | | Window | A larger view plus fans, nozzle, door, network, storage and firmware; a Filament page with every spool; a Widgets page that tours every widget size and state. | | Many printers | Bambu Bar watches all of them at once. All Printers in the window and the grid button in the panel list every printer, the ones that need you first (failed, paused), then by soonest finish. Switch from the printer name at the top of the panel or the window's sidebar, and choose which one the menu bar shows (or let it pick whichever is busy). | | Desktop widgets | Small, medium and large, one per printer if you like, counting down between updates. | | Notifications | Print finished, failed or canceled, paused (filament runout and the like), new printer errors, and optionally when a print starts. | | Easy setup | Finds printers on your network and reads the access codes from Bambu Studio or OrcaSlicer, on this Mac or from a settings file copied from another one. When the slicer knows several printers, Add All sets them all up at once. | | Mac integration | Open at Login, no Dock icon while it lives in the menu bar (the icon and menus appear while its window is open), keyboard shortcuts, and it follows the printer when DHCP gives it a new address. | | 17 languages | English, Čeština, Deutsch, Español, Français, Italiano, Magyar, Nederlands, Polski, Português (Brasil), Svenska, Türkçe, Русский, Українська, 日本語, 한국어, 简体中文 and 繁體中文. It follows your Mac's language, or the one picked in Settings → Language. Printer terms follow Bambu Studio's translations, and printer errors use Bambu Lab's own texts where Bambu publishes them (all but Czech, Turkish and Ukrainian, which show them in English, and Traditional Chinese, which shows the Simplified ones). | | Updates | Checks GitHub once a day for a new release (turn it off in Settings) and offers the download; Check for Updates… in the app menu asks right away. It never installs anything by itself. |
Getting started
Requirements
- macOS 26 Tahoe or later, Apple silicon or Intel.
- A Bambu Lab printer on the same local network as the Mac.
Install and connect
- Download the latest
Bambu-Bar-from Releases, unzip it and move Bambu Bar.app to your Applications folder. Or build it yourself.-macos.zip - Open it. The window lists the printers it finds on your network; pick yours. Not listed? Open Enter address manually and type the printer's IP address (printer screen → Settings → Network); Bambu Bar reads the serial number from the printer. When macOS asks whether Bambu Bar may find devices on your local network, click Allow: without it the app can't see or reach any printer, and it says so with a button to the right switch in System Settings.
- The access code usually fills itself in: if Bambu Studio or OrcaSlicer on this Mac has used the printer, Bambu Bar reads the code from its settings. Slicer on another Mac? Drop that Mac's
~/Library/Application Support/BambuStudio/BambuStudio.confonto the setup page. Otherwise read it off the printer: Settings → Network on its screen shows the 8-character Access Code. - Click Connect. The menu bar starts showing progress as soon as the printer reports in.
Closing the window keeps Bambu Bar running in the menu bar without a Dock icon. Opened at login, it starts quietly in the menu bar; open it from Spotlight or the menu bar to see the window. Add Printer… in the printer picker or in Settings adds another printer.
About downloaded builds
Builds on the Releases page are universal, Developer ID signed and notarized by Apple, so they open normally after you download them. Builds you make yourself without a Developer ID certificate, and the artifacts of the Actions workflow, are ad-hoc signed: they run on the Mac that built them, but the desktop widget only loads in a Developer ID signed copy.
Controlling prints
Reading status works in any mode. Pause, resume, stop and speed changes are accepted only when the printer is in LAN Only mode with Developer Mode on (printer screen → Settings → Network). That's Bambu Lab's rule for third-party apps; without it the printer refuses the command and Bambu Bar says so (the buttons show a lock). The chamber light works either way.
Desktop widgets
- Small: a progress ring with the percentage, time left, the filament going in, and the finish time and layers. Paused, it says why; finished, how long ago and how long it took; idle, the temperatures and loaded spools.
- Medium: the rendered printer with the part growing in the filament's colour and the AMS spools in theirs, the job and its progress, finish time, layers and temperatures.
- Large: everything: temperature tiles (the chamber where the model has a sensor, otherwise the second nozzle or the part fan), every AMS spool with the grams left, the newest error in plain words and how the last print went.
The widget shows what the app last saw, so keep Bambu Bar running (Open at Login does that). While a print runs, the widget projects progress and time left forward on its own between updates.
Compatibility
| Printer | Status | | --- | --- | | P2S | Development printer; verified with firmware 01.03.00.00 and an AMS 2 Pro. | | X1, P1, A1, H2 families | Same LAN protocol and certificate authorities; implemented, not verified on hardware. |
The printer can be in cloud mode or LAN Only mode; controls need LAN Only with Developer Mode (see above). The camera is not shown.
If you try another model, open an issue with the model, firmware, macOS version and what worked. Run --probe (below) for a report; remove the serial number and access code before posting it.
How it works
Bambu printers run an MQTT broker on port 8883. Bambu Bar connects to it over TLS 1.2 (the P2S doesn't answer TLS 1.3), signs in as bblp with the access code, and accepts the printer only if its certificate chains to Bambu Lab's own certificate authorities, which ship with the app, and is issued to the printer's serial number, so no other device on the network can collect the code. It asks once for a full report and then merges the changes the printer sends about once a second.
Printers announce themselves on UDP port 2021; that's how Bambu Bar lists them during setup and notices when one moves to a new address. The widgets read a snapshot the app writes to an app group container on this Mac.
Privacy and local storage
No account, no analytics, no cloud. Bambu Bar talks to your printers on your local network. Its only other request is the optional daily update check, which reads this project's latest release from the GitHub API and sends nothing about you or your printers.
- Printers (address, serial, name) and preferences: local macOS user defaults.
- Access codes: your login keychain.
- Last prints (for "Last: …" and finish times, only what the app saw while running):
~/Library/Application Support/Bambu Bar/history.json. - Widget snapshot:
~/Library/Group Containers/..dev.rolottr.BambuBar/printers.json
Building from source
Requirements: Xcode 26 or later and XcodeGen (brew install xcodegen). No third-party Swift packages.
git clone https://github.com/rolottr/bambu-bar.git
cd bambu-bar
./scripts/build.sh # build/App.noindex/Bambu Bar.app (universal, release)
./scripts/install.sh # copy to /Applications and open it
./scripts/install.sh --build # rebuild first
build.sh generates the Xcode project from project.yml, builds the app and its widget extension, and signs both with the first Developer ID Application identity in your keychain (override with SIGN_IDENTITY=…; set TEAM_ID to match its team, which names the app group the widget shares). Without one the app is signed ad hoc and works without the widget. CONFIG=Debug and ARCHS=arm64 are available. Builds go into a .noindex folder so Spotlight and Launchpad only ever find the installed copy.
Package and notarize a release
NOTARY_PROFILE=<profile> ./scripts/package.sh
This makes a universal release build signed with Developer ID, the Hardened Runtime and a secure timestamp, submits it to Apple's notary service, staples the ticket and checks it with Gatekeeper, then writes build/Bambu-Bar- and its SHA-256 checksum. The profile is a notarytool keychain profile (xcrun notarytool store-credentials). Without NOTARY_PROFILE it packages the signed build without notarizing.
To verify a download, run this next to both files:
shasum -a 256 -c Bambu-Bar-1.0.0-macos.zip.sha256
The GitHub Actions workflow builds and uploads an ad-hoc signed ZIP on pushes and pull requests. It does not sign, notarize or publish a release.
Developing without a printer
--demo [printing|preparing|paused|finished|failed|idle|offline|unconfigured]runs a simulated P2S; add--fleetfor six printers. Nothing is saved and no network is used.scripts/emulator/printer.pyruns a pretend P2S on127.0.0.1:8883(needsbrew install mosquitto): a TLS MQTT broker that replays a real P2S report, then prints, heats and obeys pause, resume, stop, speed and light. Connect with
"build/App.noindex/Bambu Bar.app/Contents/MacOS/Bambu Bar" --connect 127.0.0.1 22E00EMULATOR0 12345678 --insecure-tls
scripts/fleet/run.shstarts a mock fleet of 12 printers in Docker (P2S, P1S, P1P, X1C, X1E, H2D, H2S, H2C, A1, A1 mini; printing, paused, failed, finished, idle and one switched off) and opens Bambu Bar against it with--emulator. Add--importto start on the Add Printer page and try Add All,SSDP=1to have the printers announce their names and models,--stopto stop it. The fleet writesscripts/fleet/out/BambuStudio.confthe way Bambu Studio saves LAN printers. Nothing from an--emulatorrun is saved: not the printers, their codes, the history or the widgets' data.--probeconnects to a printer from Terminal and prints what it reports ([seconds] [--raw-filament] keychainuses the code Bambu Bar saved).scripts/showcase.shscreenshots the panel, window and widgets in each demo state;scripts/make-readme-animations.shrenders the animations above, offscreen, from the demo printer.scripts/make-hms.pyregenerates the bundled error texts.scripts/make-filaments.py Resources/filaments.jsonregenerates the filament presets and Bambu Lab colour names from Bambu Studio.artwork/generate_printers.pybuilds the printer models in Blender and writes the 3D models (Resources/Printers/*.usdz) and the widget render layers. Run it headless withBlender -b --factory-startup -P artwork/generate_printers.py(add shape names such asenclosed minito build only those), or from a running Blender through its MCP add-on.
Keyboard shortcuts
| Shortcut | Action |
| --- | --- |
| ⌘1 – ⌘5 | Printer, Filament, Widgets, Settings, About. |
| ⌘R | Ask the printer for a full report. |
| ⌘L | Turn the chamber light on or off. |
| ⌘, | Settings. |
The Printer menu also switches printers, adds one, and pauses, resumes or stops the print.
Credits and license
Created by rolottr. Released under the MIT License.
Protocol details, a real P2S report and Bambu Lab's HMS error texts in 14 languages come from ha-bambulab (MIT), which also provided Bambu Lab's certificate authorities that ship with the app. Bambuddy and bambu-cli helped map the newer printers, and the access-code import follows Bambu Studio's settings format. Each model's capabilities and build volume follow the printer profiles in Bambu Studio's resources/printers and resources/profiles/BBL/machine, and filament makers and colour names come from its resources/profiles/BBL/filament.
The printer models were built for this project in Blender from published outer dimensions; they are visual approximations, not manufacturer CAD, and carry no logos. The generator is in artwork/.
Bambu Lab, Bambu Studio, Bambu Handy, AMS and P2S are trademarks of Bambu Lab. This project is not affiliated with Bambu Lab.