OctoTray is a minimal cross-platform Electron tray app that keeps your OctoPrint printer in sight: live temperatures, job progress, and time estimates—without keeping a browser tab open.
- Menu bar / system tray icon with optional @2x asset for sharp displays
- Left-click (macOS) or menu → Open status panel for a compact status popover (state, bed & hotend temps with setpoint progress, job file, % complete, elapsed / remaining time)
- Right-click for a short menu: open panel, Configure…, config Paths, Quit
- Settings window: OctoPrint URL, API key, poll interval—saved under the OS user data folder (not in the repo)
- Automatic polling (default 5s, configurable) with request timeout
- Dynamic popover height so there’s no empty space under the content- Tray tooltip shows server host and poll hint
Prebuilt installers are attached to GitHub Releases whenever a commit is pushed to main.
| OS | Typical artifacts |
|---|---|
| macOS | .dmg, .zip (often Apple Silicon; Intel may use Rosetta or a local build) |
| Windows | .exe (NSIS installer), portable .exe |
| Linux | .AppImage, .deb |
- Open the Releases page in this GitHub repository.
- Pick the latest
v*.*.*-build.*release (created on each push tomain). - Download the file for your OS and install or run as usual.
macOS unsigned builds: If Gatekeeper blocks the app, use System Settings → Privacy & Security to allow it, or right-click → Open the first time.
On first run, open Configure… from the tray menu and set:
| Field | Description |
|---|---|
| OctoPrint URL | e.g. http://octopi.local or http://127.0.0.1:5000 (scheme added if omitted) |
| API key | From OctoPrint: Settings → API |
| Poll interval | Seconds between refreshes (2–300) |
Settings are stored in the app user data directory (e.g. macOS: ~/Library/Application Support/octotray/config.json). Environment variables OCTOPRINT_URL, OCTOPRINT_API_KEY, OCTOPRINT_POLL_MS override file settings when set.
Copy config.example.json as a template if you edit JSON by hand.
Place these next to the app entry (project root for dev, or bundled in packaged app):
tray.png— 22×22 @1x (required)tray@2x.png— 44×44 @2x (optional)
Large or non-square images are resized to a square tray size automatically.
git clone https://github.com/<your-org>/octotray.git
cd octotray
npm ci
npm startnpm run dist # Current OS only (or pass --mac / --win / --linux)
npm run pack # Unpacked dir for debugging- Electron
- electron-builder for DMG, ZIP, NSIS, portable EXE, AppImage, deb
- OctoPrint REST API:
/api/printer,/api/job
The workflow .github/workflows/release.yml runs on every push to main:
- Builds macOS, Windows, and Linux artifacts in parallel.
- Creates a GitHub Release with tag
v<package.json-version>-build.<run_number>and uploads all built files.
Ensure Actions → General → Workflow permissions allows read and write for contents (default for the automatic job token). Do not create repository secrets named with the GITHUB_ prefix (GitHub rejects them). If the default token cannot create releases in your org, add an optional secret RELEASE_TOKEN (a PAT with contents: write)—the workflow uses RELEASE_TOKEN when set, otherwise github.token.
MIT — see LICENSE.
OctoTray is an independent tool and is not affiliated with OctoPrint. Use at your own risk near hot printers and networks.