New in v.14: change the rate live and see p99 latency

Load testing that feels like a Mac app. Because it is one.

Fire traffic with any HTTP method at any endpoint, watch it respond in real time, and change the rate without stopping. No browser tab, no YAML, no Docker. Just a fast, native tool that does one thing well.

Coming soon to theMac App Store
  • macOS 14 Sonoma or later
  • Apple silicon
  • Signed & notarized

A real recording: the rate is pushed past what the test server can take, then brought back.

  • No browser tab
  • No YAML
  • No Docker
  • Swift & SwiftUI
  • Zero third-party dependencies
  • Notarized by Apple
7 HTTP methods
p99 latency, live
Full test history to scroll back through
0 config files or containers

Features

Everything you need to push an endpoint.
Nothing you don't.

A live chart you can steer

Sent, Received, Failures and Error Rate scroll by smoothly while the test runs, with the target as a dashed line. Drag the slider underneath to change the rate mid-test and watch the server react.

  • Change the rate without stopping
  • Error Rate on its own % axis
  • Scroll back through the whole test

Honest backpressure

The request rate never waits on slow responses. When the endpoint can't keep up, extra requests are shed and you see the achieved rate drop below target. That dip is the signal you want.

Change anything while it runs

Max RPS, connections, queue depth, stop conditions, headers, the body and the method all apply to the running test. No restart, no lost history.

  • GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS
  • Safari, Chrome, Firefox, curl, Googlebot and mobile UA presets

Latency you can trust

p50, p90 and p99 alongside the average, fastest and slowest request, from a histogram accurate to about 2%. A spread strip shows at a glance how long the tail is.

Every status code, explained

See how responses split across 2xx, 3xx, 4xx, 5xx and no response at all. Click any metric or response for a plain-language explanation and what to check next.

Compose the request body

JSON, form, plain text or XML with syntax highlighting. Format and Minify in one click, and a validity check that points to the line and column of any mistake.

See every byte on the wire

The exact request, and responses as cards with status, protocol (HTTP/1.1, HTTP/2 or HTTP/3), latency and size. Requests that never got a response show you why.

Precise stop conditions

Stop after a number of requests, a duration, or both. Ask for 1,000 requests and exactly 1,000 are sent. Progress bars and an estimated finish time show how far along you are.

Tiny, fast, dependency-free

Pure Swift with zero third-party dependencies. Nothing is spawned per request, so memory stays flat at any throughput.

It behaves like a Mac app because it is one

Swift and SwiftUI from top to bottom, not a cross-platform wrapper. Liquid Glass toolbar on macOS 26, the new tab-style switcher on macOS 27, Dark Mode, ⌘R / ⇧⌘R shortcuts, and your last setup restored on relaunch.

Under the hood

Honest numbers, even when the server struggles.

Many load tools quietly wait for slow responses, so the rate you asked for and the rate you got drift apart without telling you. Pace Maker keeps the pace and shows you exactly what the server could handle.

  1. Token-bucket pacer. Releases requests at exactly your target rate and never blocks on a response.
  2. Bounded backlog, fixed workers. A fixed pool serves the queue. Nothing is spawned per request, so memory stays flat at any throughput.
  3. Adaptive connection gate. Sizes in-flight requests from observed latency and backs off when the server saturates.
  4. Shed, don't hide. When the backlog is full, excess requests are shed and counted, and the achieved RPS visibly drops.
Requests flow from the pacer into a bounded backlog, through a fixed pool of workers to the server. Overflow is shed. Pacer target RPS Backlog workers Server your API Shed & counted

Screenshots

Designed for macOS, down to the last pixel.

Settings inspector with the target, Max RPS and stop conditions

One native inspector for every setting

Target, load, stop conditions, headers and display settings live side by side with the chart, and every change reaches a running test. Your last configuration is restored on relaunch.

  • Max RPS, max connections and queue depth
  • Stop after N requests, a duration, or both
  • Sampling interval from 0.1 to 3 seconds
  • A clear warning before methods that change data
Header editor in the Settings inspector

How it works

From idea to load test in three steps.

  1. 1

    Point it at an endpoint

    Paste a URL, pick a method and a User-Agent, add headers or a body if you need them.

  2. 2

    Set the pace

    Choose a target RPS and a limit: a number of requests, a duration, or both.

  3. 3

    Press ⌘R and watch

    The chart, stats and responses update live. Drag the slider to change the rate, or pause and resume at any time.

Why Pace Maker

A different kind of load tester.

Great tools exist for scripted, distributed, CI-driven load. Pace Maker is for the moment you just want to hit an endpoint and see what happens.

Capability Pace Maker Browser-based tools CLI & scripting tools Container setups
Native macOS app Yes Swift & SwiftUI No Runs in a tab No Terminal only No
Time to first test Yes Seconds Partly Sign-up, setup Partly Write a script No Images, compose files
Live chart while it runs Yes Yes Partly Text output or add-ons Partly Extra dashboards
Change settings mid-test Yes Rate, limits, headers, body Partly Varies Partly Scripted stages No Redeploy
No config files Yes Partly No Scripts / YAML No YAML
Shows shed load honestly Yes Achieved vs. target Partly Varies Partly Varies Partly Varies
Runs locally, no account Yes Partly Often cloud-hosted Yes Yes

Roadmap

HTTP today. More protocols next.

The engine is already protocol-agnostic. These transports are on the way.

Coming soon

gRPC

Load test gRPC services with the same live chart.

Coming soon

WebSocket

Open and drive many concurrent WebSocket sessions.

Coming soon

Raw TCP

Push plain TCP endpoints when HTTP isn't the layer you care about.

FAQ

Questions, answered.

Which Macs does it run on?

Macs with Apple silicon running macOS 14 Sonoma or later. On macOS 26 and later you also get the Liquid Glass toolbar, and on macOS 27 the new tab-style view switcher.

Can I point it at production?

You can, but be careful. Load testing can degrade or take down a service, and methods like POST, PUT, PATCH and DELETE change data on every request. Pace Maker warns you when you pick one. Use a test environment, and only test systems you own or are allowed to test.

Can I change settings while a test runs?

Yes. Drag the slider under the chart to change the rate, or edit Max RPS, connections, queue depth, stop conditions, headers, the body or the method in Settings. The running test picks up every change straight away, and new headers and bodies go out with the next requests.

Do 4xx responses count as failures?

No. Failures are 5xx responses and requests that got no response at all, so a rate limit (429) doesn't count against the server. But when most responses are 4xx, Pace Maker says so and explains the code, e.g. a 401 means checking the Authorization header.

How does it avoid lying about throughput?

A token-bucket pacer releases requests at your target rate without waiting on responses. A fixed pool of workers serves them, and an adaptive connection gate sizes how many are in flight from observed latency. When the backlog is full, extra requests are shed instead of buffered forever, so the achieved RPS visibly drops when the server can't keep up.

Does it collect any data?

No. Pace Maker talks only to the endpoints you point it at. There are no accounts, analytics or telemetry.

Does it support gRPC or WebSockets?

Not yet. HTTP ships today, and the engine is already protocol-agnostic. gRPC, WebSocket and raw TCP are next on the roadmap.

Find out what your endpoint can really take.

Native, fast and honest about the numbers. Get Pace Maker and run your first test in under a minute.

Coming soon to theMac App Store or download free from GitHub v.14.1 · 1.3 MB