Skip to content
Prusa StatusBar

Prusa StatusBar

A native macOS menu bar app for your PrusaLink-equipped 3D printer.

Watch your prints from the menu bar: live state, progress, temperatures, and notifications, right next to the clock.

CI Release License: Apache 2.0 macOS 14+ Homebrew

Menu bar light Menu bar dark
Prusa StatusBar -- light mode Prusa StatusBar -- dark mode
Notification with snapshot Notification with preview
Notification with camera snapshot Notification with gcode preview
Prusa.StatusBar.install.and.discovery.mp4

Features

  • Live state in the menu bar: idle, printing, paused, finished, stopped, busy, needs attention, or disconnected. Each state has its own icon and color so you can read it at a glance.
  • Progress and remaining time shown next to the clock. Toggle either one off if you want a quieter menu bar.
  • Job details in the dropdown: thumbnail of the current print, elapsed time, remaining time, and ETA.
  • Two progress bar styles: filament Spool or Classic, your call.
  • Temperatures: nozzle and bed, current vs target, with ring gauges.
  • Optional extras: show print speed, Z height, nozzle diameter, MMU status, and filament type in the dropdown when you want them.
  • Job controls without leaving the menu bar: pause, resume, stop.
  • Detach to a floating window: pop the dropdown out into a dedicated, always-available window with the same content. Useful for a second monitor or keeping the print visible while another app has focus.
  • Quick links to open PrusaLink (the local web UI) or PrusaConnect (the cloud dashboard). Buttons dim when the printer is unreachable or the link is not configured, and either button can be hidden if you do not use it.
  • Custom HTTP action buttons: add your own buttons in the top, middle, or bottom row of the dropdown to POST or GET against any endpoint (Home Assistant, smart plugs, your own scripts). Optional auth headers and secrets are stored in the Keychain.
  • Optional camera tile: for the Prusa Buddy 3D Camera, the live RTSP stream shows up directly in the menu bar. RTSP is off by default on the camera, so you must enable it once in PrusaConnect under Camera > Camera control (see the Camera section below). For any other camera, point Prusa StatusBar at an HTTP/HTTPS still or stream URL and it shows up in the same tile. Video stays on your local network.
  • Native notifications when a print starts, finishes, or the printer needs your attention. Each notification type can be toggled independently. When a camera is configured (Buddy or generic), the notification embeds a live camera snapshot captured at the moment of the event; otherwise it falls back to the gcode thumbnail.
  • Fallback printer URL: if your printer hops between Wi-Fi and Ethernet, set a backup URL and the app falls back to it automatically.
  • Configurable refresh interval, with separate values for when the printer is connected vs disconnected, so you can save battery on the road.
  • Custom printer name override, useful if you have more than one Prusa nearby.
  • Available in 10 languages: English, Czech, German, Spanish, French, Italian, Japanese, Polish, Brazilian Portuguese, and Simplified Chinese.
  • Launch at login through Apple's SMAppService, no LaunchAgents to babysit.
  • Privacy first: your PrusaLink API key lives in the system Keychain, the app runs in the macOS App Sandbox with the network-client entitlement only, and there is no telemetry.
Main features

Install

Homebrew (recommended)

brew install --cask deimosfr/tap/prusa-statusbar

DMG

  1. Download the latest PrusaStatusBar-<version>.dmg from the Releases page.
  2. Open the DMG and drag the app into /Applications.
  3. Launch it. Releases are signed with an Apple Developer ID and notarized by Apple, so Gatekeeper accepts the app on first launch with no extra steps.

Build from source

For contributors: see CONTRIBUTING.md.

Connect your printer

  1. In the PrusaLink web UI, generate an API key under Settings > User > API Key (the path may differ slightly between firmware versions).
  2. Launch Prusa StatusBar.
  3. Open Preferences... from the menu bar dropdown.
  4. In the Printer tab, enter the printer URL (for example http://prusa-mk4.lan or http://192.168.1.42) and paste the API key. The key is saved to the system Keychain.

Optionally set a fallback URL in the same tab if your printer is reachable on more than one address.

Camera (optional)

If you have a Prusa Buddy 3D Camera, open Preferences > Printer > Buddy Camera and enter the camera's own IP or hostname (not the printer's); its RTSP stream then shows up as a live tile in the menu bar. For any other camera that serves an HTTP/HTTPS still or stream, use Preferences > Printer > Generic Camera. Auth credentials are stored in the Keychain. Nothing leaves your network.

Important: enable RTSP on the Buddy Camera first. The Buddy 3D Camera ships with its RTSP stream disabled by default. Open PrusaConnect, go to Camera > Camera control, and turn RTSP on for this camera. Without this step the camera tile cannot connect even if the IP or hostname is correct. See Prusa's Buddy 3D Camera article for the exact steps.

Privacy and security

  • App Sandbox enabled. Entitlements: app-sandbox and network.client.
  • Keychain only for the PrusaLink API key. Never written to UserDefaults, never logged.
  • No telemetry. No analytics, no crash reporters phoning home.
  • Hardened Runtime enabled for Release builds.
  • For vulnerabilities, see SECURITY.md. Please do not file public issues.

Why not Prusa Connect?

Prusa Connect is Prusa's cloud dashboard; PrusaLink is the local HTTP API that runs on the printer itself. Prusa StatusBar talks to PrusaLink, not Connect, because Connect has no public API for third-party desktop apps, and cannot be authenticated cleanly when you sign in to your Prusa account with Google or Facebook SSO. If you need to reach your printer from outside your home network, use the Fallback URL field in Preferences > Printer (a VPN, WireGuard, or Tailscale address works well).

Technical details (for contributors)

The undocumented mobile API at https://connect-mobile-api.prusa3d.com/api/docs was probed end to end. The OpenAPI spec is tagged version: 0.0.1-dev (no stability contract).

Authentication blockers

  • Auth scheme is OAuth2 Authorization Code + PKCE against https://account.prusa3d.com/o/authorize/. The only client_id exposed is the Connect web app's (MRHTlZhZqkNrrQ6FUPtjyusAz8nc59ErHXP8XkS4), and its registered redirect URIs only accept https://connect.prusa3d.com/*.
  • Loopback redirect (http://127.0.0.1:<port>/callback, RFC 8252) and custom URL schemes both fail with invalid_request: Mismatching redirect URI.
  • Resource Owner Password grant (ROPC) is enabled server-side, but unusable for the majority of users who sign in with Google or Facebook SSO (the IdP flow cannot be proxied through a password grant).
  • Device Authorization Grant (RFC 8628) is disabled (invalid_client).
  • Embedded WKWebView interception is blocked by Google with disallowed_useragent ("this browser may not be secure"), and Facebook behaves the same way.
  • There is no public developer portal to register an app-specific client_id.

Telemetry gaps

The Telemetry-with-telemetry schema returned by /api/v1/printers/{uuid} only carries:

temperatureNozzleCurrent, temperatureNozzleTarget,
temperatureHeatbedCurrent, temperatureHeatbedTarget,
axisZ, speed, lastOnline

No chamber temperature (relevant for Core One and XL), no MMU status, no fan speeds, no nozzle diameter, no accurate time_remaining (only estimatedPrintTime plus startAt).

Conclusion

Even ignoring the Terms of Service grey area of reusing the web client_id, there is no clean auth path for SSO users and no feature parity with the local PrusaLink API. The app stays on PrusaLink. Chamber temperature, if needed, should be added by reading it from PrusaLink's /api/v1/status on firmware that exposes it (Core One, XL).

Contributing

PRs are welcome. Read CONTRIBUTING.md and CODE_OF_CONDUCT.md before opening one.

Acknowledgements

See NOTICE for the full attribution list.

Support

If this app makes your printing life easier, you can fuel further work with a coffee.

Buy Me A Coffee

License

Licensed under the Apache License 2.0. See LICENSE.

About

Get your Prusa 3D prints status from your Mac Menu Bar

Resources

Code of conduct

Contributing

Security policy

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages