---
title: Dashboard
description: 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, `turbo` reports 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. `turbo` reports 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 `turbo` runs.
- **Teams.** Runs, hit rate, time saved with its trend, storage, and downloads for each team, which is the `teamId` or `slug` that `turbo` sends. 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 the `turbo` versions and platforms that moved artifacts.

<a id="where-stats-are-stored" />
<a id="configure-a-database" />
<a id="turn-stats-off" />

The stats live in a database. Cloudflare deploys come with one, and [Configure the stats database](/turborepo-remote-cache-cloudflare/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](https://developers.cloudflare.com/cloudflare-one/applications/), 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](/turborepo-remote-cache-cloudflare/retention) 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](/turborepo-remote-cache-cloudflare/retention#run-expiry-on-demand). This also deletes expired objects. On Netlify and Lambda, configure an [external schedule](/turborepo-remote-cache-cloudflare/retention#run-expiry-from-a-scheduler) 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`:

```sh
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.
