Outputs & caching
Rime persists every node’s output to disk and remembers what produced it. On the next run, anything whose inputs haven’t changed is read straight from disk; the engine only re-executes nodes whose cache key has changed.
Live outputs root
Section titled “Live outputs root”By default, outputs land in outputs/ next to your pipeline.dag.yaml.
outputs/├── <nodeId>/│ ├── <outputName>.parquet # tabular outputs│ ├── <outputName>.parquet.meta.json│ ├── <outputName>.json # stat-node outputs│ └── <outputName>.json.meta.json├── manifest.json # artifact metadata index└── <reportId>.html # built report from `rime build`Operational files live under .rime/:
.rime/├── state.lock # single-writer lock└── tmp/ # atomic-write staging areaBoth outputs/ and .rime/ should be in your .gitignore.
How cache keys are computed
Section titled “How cache keys are computed”A node’s cache key hashes:
- Node content -
kind,inputsorin, expressions, metrics, script source refs, declared outputs, andmetadata.cache - Parent output digests - so any upstream change invalidates downstream
- Spec + runtime versions
- Source file digest (for
sourcenodes, the data file’s content hash) - Language source digest (for
kind: python,kind: r,kind: javascript, andkind: sqlnodes, the source file + its declared requirements)
Two runs produce identical cache keys iff they would produce identical outputs. Outputs are content-addressable.
Read / write controls
Section titled “Read / write controls”| Flag | Effect |
|---|---|
| (default) | Read cache when keys match, write fresh outputs otherwise |
--lean | No cache reads, no cache writes — fully recompute, don’t persist |
--no-cache-read | Recompute everything, but write fresh cache |
--no-cache-write | Read cache when possible, don’t write new entries |
--isolated <dir> | Use <dir> as an isolated outputs root (doesn’t touch the live outputs/) |
Useful patterns:
- Iterating on a script — keep default; the engine re-runs only your changed node and its descendants
- Reproducing someone else’s pipeline —
--leanto verify the result without leaving cache artifacts - CI runs —
--isolated $TMPDIR/ci-runto keep CI outputs from polluting your local cache - Checking current artifacts —
rime verify pipeline.dag.yamlto confirm cache keys and output digests still match
Freezing a snapshot
Section titled “Freezing a snapshot”rime freeze --project ./my-project --to ./snapshots/2026-05-26Copies the entire current outputs/ tree to <dest> as an immutable snapshot. Useful for archiving the exact data behind a published report.
(Freeze requires project mode — a rime.project.yaml marker. Single-file DAGs don’t have a snapshot concept.)