en3sis / Sorin Curescu
workwritingtoolshire
writingGermany --:--
© 2026 en3sis, Germany
  • GitHub
  • Twitter
  • Dev.to
  • Spotify
  • Terms of Service
  • Privacy Policy
  • Imprint
Set in Newsreader and Geist Mono
drawn bySorin Curescu · en3sis.com
sheet01 / 01
rev2026.10.26
scale1:1
linksGitHubTwitterDev.toSpotifyTerms of ServicePrivacy PolicyImprint
locationGermany
typeNewsreader, Geist Mono
←en3sis / tools
Rackpulse app icon

Rackpulse

macOS menu bar app for Hetzner Cloud

Hetzner Cloud status, charts and costs in your Mac menu bar

Rackpulse is a macOS menu bar app for Hetzner Cloud. It shows whether your servers are running, how busy they are and what they cost this month, and it alerts you when something goes wrong.

Download for macOSHow to install ↓

v0.2.0 · macOS 14 or later · free

12%Mon 26 Oct09:41
All projects Updated 12 s ago
ServersCosts
All 3 servers running 12%48 €
db-1 needs a reboot to finish updatesStarted 08:12Snooze
Production2 servers
web-1ProdCPX31 · Nuremberg
CPU · 1 hDisk I/ONet out12%18 /s1.4 MB/s
Traffic this period1.2 TB / 20 TB
db-1ProdCCX13 · Falkenstein
CPU · 1 hDisk I/ONet out6%42 /s220 KB/s
Traffic this period310 GB / 20 TB
Staging1 server
staging-1StageCX22 · Helsinki
CPU · 1 hDisk I/ONet out2%3 /s14 KB/s
Traffic this period22 GB / 20 TB
API 4 / 3.600 /h Settings ⌘, Quit ⌘Q

fig. 1 · the panel, with sample data

Simple or with agent

agent optional

Simple mode needs only a Hetzner Cloud API token. Install the agent on a server to also see what happens inside it. You can mix both: some servers with the agent, some without.

Feature SimpleAPI token only Agenttoken and agent
Servers
Running status and a one-line summaryIncludedIncluded
CPU, disk I/O and network chartsIncludedIncluded
Traffic against the included amountIncludedIncluded
Power controlsIncludedIncluded
Costs, budgets and idle spendIncludedIncluded
Inside the server
Memory and loadNot includedIncluded
Disk space per file systemNot includedIncluded
Failed services and pending rebootsNot includedIncluded
Docker
Containers with health, restarts, CPU and memoryNot includedIncluded
Container pages and Docker disk usageNot includedIncluded
Uptime
From Hetzner’s start and stop historyIncludedIncluded
Recorded on the server, including crashes Hetzner cannot seeNot includedIncluded
Alerts
Server down, CPU, traffic, disk I/O, budget, changesIncludedIncluded
Disk space, memory, Docker, failed service, reboot, agent not answeringNot includedIncluded
Installed on your serversnothingread-only agent

What you see

with a token
Simple

Everything here works with the Hetzner API alone. Nothing is installed on your servers.

One status line

"All 5 servers running" or "1 not running · 2 alerts" across all projects, in the colour of the worst alert.

Grouped by project

Servers are grouped by project, with problems sorted to the top. Switch to a single project from the menu.

Charts

CPU, disk IOPS and network for 1 hour, 6 hours, 24 hours, 7 days or 30 days. Hover a chart to read any moment.

Uptime

The last 24 hours and 30 days, from Hetzner’s start and stop history and Rackpulse’s own checks.

Power controls

Start, shut down, reboot, power off and reset, each confirmed first. Needs a Read & Write token.

Costs

Month to date and the forecast to month end, per project, with an optional budget. Idle spend, such as stopped servers that still bill, is listed separately.

Alerts

Notifications with Snooze and Open buttons. Quiet hours hold them back. Each server can use the global rules, its own thresholds or no alerts.

Environments

Tag each server as Production, Staging or Development, or let Rackpulse read an env label from Hetzner.

Menu bar readout

A status dot in the colour of the worst alert, plus the busiest server’s CPU, this month’s cost or the alert count.

Keyboard

Press ⌃⌥R anywhere to open the panel, then type to find a server.

Touch ID lock

Optionally lock the panel after your Mac sleeps until you unlock it with Touch ID.

Go deeper with the agent

optional, per server
Agent

Memory, disk space, Docker containers, failed services and pending reboots live inside the server, and the Hetzner API does not report them. The agent is a small read-only Linux program that reports them.

Memory and load

Memory use, load and uptime since boot, with failed systemd services and pending reboots.

Disk space

Space and inodes per file system, with an alert when one fills up or turns read-only.

Docker containers

Grouped by Compose project, with health, restarts, CPU and memory.

A page per container

7 days of charts, ports (local only or public), volumes and mounts, networks and the last health check.

Docker disk usage

How much space images, volumes and build cache take, and how much of it is reclaimable.

Uptime on the server

30 days recorded on the server itself. It catches crashes Hetzner cannot see and keeps history while your Mac sleeps.

Agent

Set up the agent on a server

optional · per server
  1. 01Open Set up agent

    Open a server in Rackpulse and choose Set up agent. Rackpulse creates a key for that server.
  2. 02Run the command on the server

    The command contains the server's own key in place of rb1_...
    curl -fsSL https://tools-cdn.en3sis.com/tools/rackpulse/agent/install.sh \ | sudo sh -s -- --pair rb1_...
  3. 03Open port 7311

    Make TCP port 7311 reachable from your Mac, as shown on the right. Rackpulse connects within a few seconds.

port 7311, by the address Rackpulse uses

  • Public IPv4 or IPv6

    Add an inbound rule to the server’s Hetzner Cloud Firewall: TCP, port 7311. If you have a fixed IP, set it as the source. If ufw is active:

    sudo ufw allow 7311/tcp
  • Tailscale or another VPN

    No public rule needed. If ufw is active:

    sudo ufw allow in on tailscale0 to any port 7311 proto tcp
  • Hetzner private network

    No public rule needed. Your Mac must reach the private network, for example through a VPN server in it.

Update the agent

Run the script again without --pair. It keeps the key, port and address.

curl -fsSL https://tools-cdn.en3sis.com/tools/rackpulse/agent/install.sh \ | sudo sh

Remove the agent

Run this on the server, remove the firewall rule, then choose Remove agent in Rackpulse.

sudo rackpulse-agent uninstall
  • Linux on x86_64 and ARM64
  • systemd service under its own user
  • read-only, cannot run commands
  • keeps 30 days of history on the server

Screens

sample data
web-1 Prod
CPX31 · 4 vCPU · 8 GB · 160 GB · Nuremberg
SSHIPv4IPv6AlertsConsole
OverviewDockerDetails
Memory41%3.2 GB of 7.8 GB
Disk52%78 GB of 150 GB
Up34 daysload 0.21
Activity
1h6h24h7d30d
CPU12% now · avg 9%
10:0016:0022:0004:0009:40
Memory41% now · peak 47%
10:0016:0022:0004:0009:40
Uptime · 30 daysRecorded by the agent
99.9%
API 4 / 3.600 /h Settings ⌘, Quit ⌘Q
fig. 2 · server page Agent
web-1 Prod
CPX31 · 4 vCPU · 8 GB · 160 GB · Nuremberg
SSHIPv4IPv6AlertsConsole
OverviewDockerDetails
Containers3 of 3 running
app Compose
app-web-1Healthy
ghcr.io/acme/web:1.4 · Up 6 days
CPU 1.8%Memory 412 MB
app-worker-1Healthy
ghcr.io/acme/worker:1.4 · Up 6 days
CPU 0.6%Memory 188 MB
app-redis-1Healthy
redis:7-alpine · Up 21 days
CPU 0.2%Memory 31 MB
Disk usage3.6 GB reclaimable
Images900 MB reclaimable2.4 GB
Volumes500 MB reclaimable18.5 GB
Build cache1.2 GB reclaimable1.2 GB
Container layers52 MB
API 4 / 3.600 /h Settings ⌘, Quit ⌘Q
fig. 3 · Docker tab Agent
Production Updated 12 s ago
ServersCosts
Month to date · estimate
38,40 €→ 47,90 € by 31. Oct
Spent ForecastBudget 60 €
By resource
web-1CPX3118,20 €
db-1CCX1312,60 €
db-dataVolume · 100 GB3,80 €
IP addresses3 primary2,10 €
Idle spend
old-backupsVolume · not attached1,70 €

Estimated from list prices × hours each resource existed this month, without VAT.

API 4 / 3.600 /h Settings ⌘, Quit ⌘Q
fig. 4 · costs for one project Simple

Alerts

12 rules
rulefires whenmode
Server downA server is not running and you did not stop it Simple
Sustained CPUCPU stays above the threshold for the whole period Simple
Traffic quotaOutgoing traffic passes a share of the included traffic Simple
Disk I/O anomalyDisk IOPS stay above a multiple of the 7-day median (off by default) Simple
BudgetThe month’s cost forecast goes above the project’s budget Simple
Unexpected changeA server or volume appears or disappears, a server is rebuilt, or a firewall changes Simple
Disk spaceA file system passes a share of its space or inodes, or turns read-only Agent
MemoryMemory use stays above the threshold for the whole period Agent
Docker containersA container is unhealthy, keeps restarting, or stopped with an error Agent
Failed serviceA systemd service is in the failed state Agent
Reboot requiredInstalled updates need a reboot Agent
Agent not answeringHetzner says the server runs, but the agent does not answer, for example because it froze Agent

Each rule has its own threshold and duration. Costs are estimates from list prices: Hetzner has no billing API, so VAT, credits and traffic overage are not included.

Privacy and security

Three destinations

Rackpulse contacts api.hetzner.cloud, its update feed and the agents you pair. No account, no analytics, no telemetry.

Keychain

Tokens and agent keys are stored in the macOS Keychain, never in files or logs.

App Sandbox

Runs in the macOS App Sandbox with outgoing network access only. Signed and notarized by Apple.

Limited changes

With a Read token, Rackpulse cannot change anything. With Read & Write, it only sends the five power actions, after you confirm.

Read-only agent

The agent cannot run commands or change anything, only reads from Docker, and runs sandboxed by systemd.

Per-server keys

Each server has its own key, and the agent’s certificate is pinned on the first connection. Change a key from the app at any time.

Install

macOS 14 or later
Download for macOSRackpulse.dmg, always the latest · v0.2.0 · Rackpulse-0.2.0.dmg
  1. 01

    Install the app

    Open Rackpulse.dmg and drag Rackpulse to Applications. It needs macOS 14 or later.

  2. 02

    Create a Hetzner Cloud API token

    In the Hetzner Console, open your project and go to Security, then API tokens, then Generate API token. Choose Read to monitor only, or Read & Write to also use the power controls.

  3. 03

    Add the project

    Click the Rackpulse icon in the menu bar, paste the token and click Verify and Save. Add one token per project.

  4. 04

    Set up the agent on a server Agent

    Open a server, choose Set up agent and run the command it shows. Skip this step to stay in Simple mode.

requirements

Mac
macOS 14 Sonoma or later
Hetzner
A Hetzner Cloud API token per project
Server
Linux on x86_64 or ARM64 with systemd
Agent
Network
TCP port 7311 reachable from your Mac
Agent

Rackpulse checks its update feed once a day. You can turn this off in the menu.

Support

bugs, questions, ideas
DiscordReport a bug, ask a question or suggest a feature on Discord.Join the Discord ↗XSend a message or mention @en3sis for questions and feedback.@en3sis on X ↗

For a bug, include your macOS version, the Rackpulse version from About, and what you expected to happen. If the agent is involved, add its version from the agent setup page.

Questions

7

Do I need to install anything on my servers?

+−

No. Rackpulse works with a Hetzner Cloud API token only. The agent is optional and adds memory, disk space, Docker containers and uptime recorded on the server.

Which token permission should I choose?

+−

Read to monitor only. Read & Write if you also want the power controls (start, shut down, reboot, power off, reset). With a Read token, Rackpulse cannot change anything.

How accurate are the costs?

+−

They are estimates from list prices and the hours each resource existed this month. Hetzner has no billing API, so VAT, credits and traffic overage are not included.

Does the agent need a public port?

+−

Your Mac connects to the agent on TCP port 7311. On a public address, add an inbound rule to the server’s Hetzner Cloud Firewall. Over Tailscale, a VPN or a private network, no public rule is needed.

How do I remove the agent?

+−

Run sudo rackpulse-agent uninstall on the server, then remove the firewall rule. In Rackpulse, choose Remove agent on the server page.

Does Rackpulse support dedicated servers?

+−

No. It reads the Hetzner Cloud API, so it covers Cloud servers, volumes, IPs and firewalls.

How does it update?

+−

Rackpulse checks its update feed once a day. You can turn this off in the menu. To update the agent, run the install command on the server again without --pair. It keeps its key, port and address.

Rackpulse is an independent project for Hetzner Cloud. It is not affiliated with or endorsed by Hetzner Online GmbH.