# Churro catalog

> Every crate in the Churro cache: which versions are compiled, for which Rust release and platform, with which features. When a build needs one of these, Cargo downloads it instead of compiling it. The catalog page at https://churro.sh/catalog/ reads the public API below, and so can you.

## Look up one crate

For one crate as Markdown, open `https://churro.sh/catalog.md?crate=NAME`, for example [serde](https://churro.sh/catalog.md?crate=serde). To search by part of a name, use `https://churro.sh/catalog.md?q=QUERY`. These pages are generated from the live cache, like the catalog page itself (`https://churro.sh/catalog/?crate=NAME`).

## Public API

Read-only JSON at `https://cache.churro.sh`. No key, no sign-up, and any origin may call it (CORS is open). Responses are cached for up to a minute.

### Search crates

`GET https://cache.churro.sh/v1/crates?q=QUERY&limit=N`

Crates whose name contains `QUERY`, ignoring case and treating `-` and `_` alike: an exact match first, then names that start with it, then the rest, each by number of cached builds. `limit` defaults to 20, at most 50. Without `q`, the most cached crates, plus `totals` for the whole cache.

```json
{
  "query": "tok",
  "total": 1,
  "limit": 20,
  "crates": [
    { "name": "tokio", "versions": 4, "latest": "1.47.1", "entries": 38, "bytes": 51234816, "last": "2026-09-26T21:04:11Z" }
  ]
}
```

`entries` is the number of compiled builds and `bytes` their total size. An empty query adds `"totals": { "crates", "versions", "entries", "bytes" }` for the whole cache.

### One crate's builds

`GET https://cache.churro.sh/v1/crates/NAME` (optionally `?version=V`)

Every cached build of the crate, newest version first, at most 1,000.

```json
{
  "crate": "tokio",
  "limit": 1000,
  "entries": [
    {
      "version": "1.47.1",
      "target": "x86_64-unknown-linux-gnu",
      "rust": "1.98.1",
      "profile": "dev",
      "mode": "build",
      "kind": "lib",
      "features": ["default", "macros", "rt-multi-thread"],
      "bytes": 1843200,
      "published_at": "2026-09-26T21:04:11Z",
      "key": "…64 hex characters…"
    }
  ]
}
```

- `profile`: `dev` (debug) or `release`
- `mode`: `build`, or `check` for `cargo check`
- `kind`: `lib`, `proc-macro` or `build-script`
- `key`: the cache key. On a machine that has it in its local Churro cache, `churro explain KEY` shows what went into it.

A build is only used when everything matches yours, so a crate being listed means a build with these exact settings is ready, not every build of it.

## More

- [Set up Churro](https://churro.sh/setup.md)
- [What Churro is and why it's safe](https://churro.sh/index.md)
