NewDebug failed jobs and retry from any step.

Platform / Cache

Product 4.5

Preloop Cache

A pass-through cache on NVMe, with zero changes to your workflows.

Your existing cache steps get faster without a single edit. preloop sits in the path of the cache calls your actions already make and serves them from NVMe beside the runner, backed by replicated object storage.

Workflow files
Unchanged
Availability
Available today
Surface
CLI, API and dashboard
LOOP04beats
01Changesnapshot
02Verifyreplay
03Fixpause
04Mergepublish
A job asks for its cache, NVMe answers, and the save replicates in the background.

Why it exists

GitHub-hosted caches are slow to restore, small, and writable by a forked pull request. Rolling your own means buckets, keys and scripts to maintain. preloop Cache is a drop-in pass-through: same actions, same keys, served from local NVMe and shared across your organization.

What you get.

Each capability is part of the product today.

01

Zero changes to your workflows

An optimized pass-through cache. `actions/cache`, `cache: npm` and the setup actions keep working exactly as written, with your keys and restore keys — they just restore faster.

02

NVMe-backed, replicated

Hot caches live on NVMe right next to the runner, so restores run at local-disk speed instead of over the internet. Everything is replicated to object storage, so a cache survives any single machine.

03

Shared across your organization

Caches are shared across the repositories and members of your organization, so one person's build warms the cache for everyone else. Nothing is ever shared between organizations.

04

Namespaced by repository and branch

Every entry is namespaced by organization, repository and branch, set from the job's identity — not from anything a workflow can claim. A branch restores from its own cache first, then its pull request base, then the default branch.

05

Every cache you use

Dependency caching for npm, pnpm, Yarn, pip, Cargo, Go, Ruby, Java and Bun; build caches for Rust, Go, Turbo and Nx; Docker images and system packages; and toolchains ready before your job starts.

06

Poisoning-resistant writes

Fork pull requests read caches and cannot write them. Untrusted branches write to their own scoped keys, so a poisoned entry can never replace what your default branch restores.

07

Visible decisions

Each lookup shows hit, miss or fallback, the key used and where it was restored from, so a slow restore is never a mystery.

Sample / yaml

Exampleyaml
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm           # unchanged, now served from NVMe
      - uses: Swatinem/rust-cache@v2   # unchanged
      - uses: actions/cache@v4
        with:
          path: ~/.cargo/registry
          key: cargo-${{ hashFiles("**/Cargo.lock") }}

No edits. The same steps, restored from NVMe beside the runner.

Specs.

Storage
NVMe beside every runner, replicated to object storage.
Sharing
Shared across the repositories and members of your organization. Never across organizations.
Namespace
Organization, repository and branch, taken from the job's identity. A workflow cannot override it.
Restore order
Your branch, then the pull request base, then the default branch.
Coverage
Dependency caching, build caches including Turbo and Nx, Docker images, system packages and toolchains.
Fork behavior
Fork pull requests read, never write. Untrusted writes cannot shadow the default branch.
Opt-out
PRELOOP_NATIVE_CACHE=0 disables native paths and keeps stock action behavior.

Preloop Cache questions

Q.01Is the cache shared across my organization?

Yes. Repositories and members of your organization share caches, so one build warms them for everyone. Branch and fork scoping keep untrusted writes away from your default branch, and nothing crosses organizations.

Q.02Does a cache miss fail the job?

No. A miss, corrupt object or unreachable backend is treated as absent, and the job continues. A failed save is logged.

Q.03Can a fork pull request poison my cache?

No. Forks read and cannot write, and low-trust writes land in scoped keys that cannot shadow the base branch.

Q.04Can I turn native caching off?

Yes. Set PRELOOP_NATIVE_CACHE=0 in the job environment to disable native paths and keep stock action behaviour.

Q.05Do I have to change my workflow?

No. setup and cache actions are intercepted by SHA, so cache: npm and actions/cache work as written.

Start

Start with one workflow.

We will set it up with you and show you what changes.