Dashboard
The page at the server's root shows the time saved, the hit rate, the storage used, and usage by team, CI provider, and coding agent.
Open the server’s URL in a browser, such as https://turborepo-remote-cache.<your-subdomain>.workers.dev. The page needs no token and refreshes every minute.
What it shows
The range control at the top picks the last 24 hours, 7 days, 30 days, or 90 days. Every figure covers that range and shows its change from the same stretch of time one range earlier. The line beside the control shows the time saved since the server recorded its first run.
- Time saved. After every run,
turboreports each cache lookup, and a hit carries the duration of the task it replayed. The dashboard adds those durations up, for this server and for the local cache on each machine. - Share of task time from a cache. Time saved, divided by time saved plus the run time of the tasks that ran.
turboreports that run time with each upload, so tasks that ran without uploading aren’t counted. - Tasks. Every task checks the cache on its own machine first, and asks the server only when that misses. A task that misses both runs. The dashboard splits tasks into those three outcomes and shows the share that came from a cache.
- Server hit rate. The share of lookups that reached this server and found the artifact. It shows how well the server serves the tasks that need it.
- Saved per run and runs. Time saved divided by runs, and the number of
turboruns. - Teams. Runs, hit rate, time saved with its trend, storage, and downloads for each team, which is the
teamIdorslugthatturbosends. The table appears when more than one team uses the server. - Storage. What the server stores, and how the total changed over the range.
- Clients. The CI providers that ran
turbo, the AI coding agents that started runs, and theturboversions and platforms that moved artifacts.
The stats live in a database. Cloudflare deploys come with one, and Configure the stats database covers every other host.
Restrict access
The dashboard is public. Anyone with the server’s URL can see your team names and usage. To restrict it, put / and /stats behind your own access control, such as Cloudflare Access, and leave /v8/* reachable with turbo’s bearer token. Protect both dashboard routes. Protecting only / leaves the data accessible through /stats.
When storage numbers update
The expiry task measures storage while it deletes expired artifacts. A new server shows no storage numbers until that task first succeeds.
To measure now, run expiry on demand. This also deletes expired objects. On Netlify and Lambda, configure an external schedule to keep measurements current.
Read the stats as JSON
GET /stats returns everything the dashboard shows. It needs no token. The optional range query parameter is 24h, 7d, 30d, or 90d, and defaults to 30d:
curl "https://<your server>/stats?range=7d"
The response has "enabled": false when the server has no stats database. Day buckets are UTC days, and every duration is in milliseconds.