Open source · macOS · Written in Rust
Read the tide
of your Mac.
A native menu-bar system monitor for macOS. Tidegauge groups every process under the app that owns it, so you see the app that’s busy, not a wall of helpers.
Eleven tabs, one panel
Memory by type and by app
Unavailable reads as a dash, not a zero
01The panel
Eleven tabs.
One quiet panel.
Neutral graphite surfaces, with each metric keeping its own colour everywhere it appears. Click a card on the overview and its tab opens.
Overview
Six summary cards plus memory and power breakdowns.
CPU
Usage, 1/5/15-minute load, and the apps behind it.
Memory
App, wired, compressed and cached memory, per app.
Disk
Read and write rates, per-drive capacity, APFS layout and health.
Network
Up and down rates, totals since boot, traffic per app.
GPU
GPU memory and detail, wherever macOS exposes it.
Neural
Has a tab. Utilization isn’t readable yet, and it says so.
Battery
Charge, health, charging state and estimated power per app.
Sound
Output device, volume, and which apps play or record.
Bluetooth
Connected devices and their battery levels.
Projects
Your dev servers, grouped by project folder.
- History Headline metrics and the top 60 apps, kept in SQLite.
- Alerts Sustained CPU, memory, disk or network load, with a 10-minute cooldown.
- Sensors Temperature and fan channels, strictly read-only.
- English & norsk Interface in both languages.
02App grouping
Grouped by app.
Not by PID.
A browser can run dozens of helper processes. Tidegauge walks each one back to its executable bundle or parent app, then adds up CPU, memory, disk counters and estimated power under a single row, with its real icon.
- Rank, icon, process count and a usage bar per app
- App icons load off the render path and are cached on disk
- Per-app watts are labelled as estimates, because they are
04Projects
Where did I leave
that dev server?
Projects lists the listening ports you own, grouped by the folder they run from. Anything within four levels of a Git root or a package.json, Cargo.toml, pyproject.toml, go.mod, Gemfile or composer.json qualifies.
Stopping is careful by design. You confirm first. Tidegauge then rechecks the owner and start time of every process and sends SIGTERM. It never escalates to a force-kill.
Stop 2 processes?
Tidegauge will recheck each process’s owner and start time, then send SIGTERM.
05Appearance
Graphite Day.
Graphite Night.
The panel follows your macOS appearance, and menu-bar readouts check the native appearance on every refresh. Drag the line to compare.
06Under the hood
Native to
the waterline.
Written in Rust with gpui-kit and talking to macOS directly through Mach, libproc, IOKit, CoreAudio and AppKit. The sampler runs on its own thread and publishes a finished snapshot, so the panel never waits on a collector.
Each pass waits two seconds after its work completes. Slow system utilities can stretch that interval.
- RustSingle native binary
- gpui-kitGPU-rendered UI
- Mach · libprocCPU, memory, processes
- IOKitDisks, GPU, battery, sensors
- CoreAudioDevices and playback state
- AppKitOne native status item
07Privacy
It stays
on your Mac.
No account and no analytics. Tidegauge keeps three things on disk, all in your own Library, and the source is open for you to check. History holds app names and usage, so it lives where you can read it, move it or delete it.
~/Library/Application Support/no.ogard.tidegauge/settings.json~/Library/Application Support/no.ogard.tidegauge/history.db~/Library/Caches/no.ogard.tidegauge/icons/One instance per user, enforced by a file lock. Launch it twice and the running copy carries on.
08Project status
Known shallows.
Tidegauge is an early development build. A good gauge tells you what it can’t measure, so here are the readings that aren’t finished yet. A missing reading is never a claim of zero.
| Reading | State | Detail |
|---|---|---|
| Neural engine | Unavailable | The tab exists. Utilization can’t be read yet. |
| Per-app power | Estimate | Watts derived from process counters, not measured. |
| GPU & battery | Hardware-dependent | Shown where macOS exposes the properties. |
| Sensors | Needs validation | Temperature and fan mappings still need checking on physical Macs. |
| Sound | Read-only | Device, volume and playback state. No per-app volume. |
| Custom alerts | Stored, not applied | Default thresholds are used for now. |
| History browser | Not yet | History is written to disk; the panel charts the current session. |
| Launch at login | In progress | macOS 13+ and an app installed in Applications. |
Follow the roadmap on GitHub. Issues and pull requests are welcome.
09Install
Put a gauge
in your menu bar.
Release build
Signed, notarized builds for Apple Silicon ship through GitHub Releases. Open the disk image and drag Tidegauge into Applications.
GitHub ReleasesIf macOS rejects a build, please report it rather than bypassing Gatekeeper.
From source
Needs macOS, a Rust toolchain and the Xcode command-line tools.
$ git clone https://github.com/henrikogaard/tidegauge
$ cd tidegauge
$ cargo run --release
The app runs without a Dock icon. Look for the wave in your menu bar.
Free and open source.
Tidegauge is MIT-licensed and free to use. If it saves you a trip to Activity Monitor, a coffee helps keep it going.