Performance debt, made actionable
Know which performance debt to fix first.
Slowpoke measures the time slow requests, queries and jobs cost you each day. Give your team a clear priority, then see whether the fix paid off.
Free · Open source · Self-hosted Demo needs no sign-up
Real product screens with sample data. Explore the demo to see the full workflow.
For engineering leaders
Make performance work easier to prioritise.
Find the work that matters
A small delay repeated all day can cost more than one slow report. Rank issues by cumulative daily cost.
Give the team a starting point
Turn costly issues into missions, with query diagnoses and code origins where available.
Show what improved
Track the cost after a change and share a debt report that makes progress clear beyond engineering.
The cost of repetition
Small delays add up.
A query can look fast in isolation and still consume an hour of execution time every day. Slowpoke makes that cumulative cost visible, so your next sprint tackles the right problem.
Daily cost is measured in time, not an estimate of lost revenue. Understand the calculation.
Illustrative example
40 ms per query × 90,000 calls/day
1 hourof query execution every day
Fits your stack
Start with the systems you already run.
Read access logs and database statistics first. Add a framework package when you want to trace a query back to your code.
Your data. Your infrastructure.
Self-host Slowpoke alongside your applications. Keep your existing monitoring and use the daily cost ranking to decide what to improve next.
Web servers · SQL databases · Queues and caches · Framework packages
Compare with other tools →Get started
Running in three steps.
About 15 minutes, nothing to sign up for. Here is where each command runs, what it changes and what you will see.
-
On the server that will host the panel
Start the panel
-
In your browser
Create your account and a project
- The first visit asks for the setup code the installer printed, then a name, an email and a password: that user is the administrator
- Create a project for your application and pick its time zone
- Open Machines → Add agent: you get one command with a token for that machine only, revocable at any time
- The code is what keeps a fresh panel from belonging to whoever reaches it first. Lost it?
slowpoke-server setup-codeprints it again
Welcome to Slowpoke
Setup code
WFRC-EUNP-BVMH
Then Machines → Add agent gives each machine its command.
Waiting for the agent
-
On each machine that runs your app
Connect a machine
curl -fsSL http://your-server:8080/install.sh | sudo sh -s -- --token spa_…Copy it from the panel: it carries your server address and the machine's token.
- No Docker here, whichever way you ran the panel: one binary and a systemd service
- Downloads the agent from your own server and checks its checksum
- Creates a
slowpokesystem user with no shell. It may read any file, which is how it reaches every log, and cannot write outside its own state directory - Looks at the machine and writes
/etc/slowpoke/agent.yamlby itself - Runs as a systemd service, capped at 128 MB, at low priority, with the system read-only
-> Downloading the agent (linux-amd64) from http://your-server:8080-> Looking at this machineConfiguration written to /etc/slowpoke/agent.yamlThe agent is running. This machine shows up in the panel within a minute
What it can touch, before you run it
Your machines
The agent may read any file, to reach the logs, and writes only to its own state directory. The system is read-only to it, memory is capped at 128 MB and it runs at low priority. The same command with --uninstall removes the agent, its service and its configuration.
Your database
A user you create, with read access to your tables: EXPLAIN needs it. Plain EXPLAIN, never ANALYZE, so no statement is executed, in a read-only transaction, and only on statements already seen on that machine.
What leaves the machine
Timings and statements with their values redacted, sent to your own panel only. Real values stay on the machine unless you turn on sample sharing.
The network
The agent refuses plain http to a public address, because the token would travel in clear. Nothing is sent to us: the update check runs only when someone asks for it.
The panel's server
1 vCPU, 256 MB of memory and 1 GB of disk to start. 2 vCPU and 512 MB plus PostgreSQL is comfortable. Until an administrator exists, the panel asks for a one-time setup code that only the server can print.
The licence
Server and panel under AGPL-3.0-or-later, agent and framework packages under MIT. Free, with no per-host or per-seat fees.
For anything beyond a try, put the panel behind HTTPS and set SLOWPOKE_PUBLIC_URL. Read the installer · Installation docs