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.

View on GitHub

v0.1 · early development MIT licence No Dock icon

The Tidegauge dashboard in dark appearance, showing CPU, memory, GPU, disk, network and battery cards, plus memory by type and memory by app. Eleven tabs, one panel Memory by type and by app Unavailable reads as a dash, not a zero
Dashboard in Graphite Night, rendered with sample data on a virtual Mac.

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
100% per core
    423 apps · 748 processesIllustrative data

    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.

    Projects
    Only your own processesIllustrative data

    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.

    CPU tab in dark appearance
    CPU tab in light appearance

    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.

    Sampling rhythm Pass 1 of 10

    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.

    Settings~/Library/Application Support/no.ogard.tidegauge/settings.json
    History~/Library/Application Support/no.ogard.tidegauge/history.db
    App icons~/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.

    ReadingStateDetail
    Neural engineUnavailableThe tab exists. Utilization can’t be read yet.
    Per-app powerEstimateWatts derived from process counters, not measured.
    GPU & batteryHardware-dependentShown where macOS exposes the properties.
    SensorsNeeds validationTemperature and fan mappings still need checking on physical Macs.
    SoundRead-onlyDevice, volume and playback state. No per-app volume.
    Custom alertsStored, not appliedDefault thresholds are used for now.
    History browserNot yetHistory is written to disk; the panel charts the current session.
    Launch at loginIn progressmacOS 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 Releases

    If 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.

    Buy me a coffee