# Caching (https://tenki.cloud/docs/runners/caching)

> For the complete documentation index, see [llms.txt](https://tenki.cloud/llms.txt)

How the hosted Actions cache and dependency mirrors speed up jobs on Tenki Runners, with zero workflow changes.

Tenki Runners come with two layers of caching, both enabled by default with no workflow changes: a hosted GitHub Actions cache and dependency mirrors that sit close to the runners.

## Actions cache

Tenki hosts a drop-in replacement for the GitHub Actions cache. `actions/cache`, `setup-node`'s `cache:` option, and anything else built on the Actions cache API work unchanged. The runner VM is already configured to talk to your workspace's cache endpoint, including for jobs that run in a `container:`.

```yaml
- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: npm-${{ hashFiles('package-lock.json') }}
```

### Storage and eviction

| Plan    | Included cache storage |
| ------- | ---------------------- |
| Starter | 5 GB                   |
| Team    | 10 GB                  |

Extra storage is $0.20 per GB/month; see [Pricing](https://tenki.cloud/docs/pricing.md). When a workspace is over its quota, the least-recently-used entries are evicted first. Cache entries expire after 7 days, the same window GitHub's hosted cache uses.

The cache can be switched off per workspace in the dashboard settings.

## Dependency mirrors

Downloads from common package registries are cached transparently on Tenki's network, so repeat installs don't cross the public internet:

* npm
* APT (Ubuntu packages)
* Go modules
* Cargo (crates.io sparse index)
* Maven Central and the Gradle Plugin Portal
* CocoaPods and Swift Package Manager
* Docker Hub (pull-through mirror)

You don't configure anything: Tenki points the runner's tooling at the mirrors, and cache misses fall through to the upstream registry.

## Docker images

The Docker daemon and BuildKit (`docker buildx`) on Linux runners are pre-configured to pull public images through the Docker Hub mirror, so `FROM ubuntu:24.04` and `docker pull` hit a warm local copy after the first use. The mirror also avoids Docker Hub's anonymous pull rate limits.

The mirror does not cache build layers between jobs. For layer reuse across runs, use registry-based caching (`--cache-from` / `--cache-to`) or store layers with `actions/cache`, exactly as you would on GitHub-hosted runners.