Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0] - 2026-06-03

### Added

- `TieredStorage<Hot, Cold>`, a `CacheStorage` that layers a fast hot tier over a durable cold
tier — for example an `InMemoryStorage` working set in front of a `FileSystemStorage` durable
set, though any two backends compose. Lookups check the hot tier first; a cold hit is promoted
into the hot tier as it is read, so a hot tier emptied by a restart repopulates from cold on
demand. Writes populate the hot tier as the body streams and are flushed to the cold tier by a
background task, so evicting an entry from the hot tier only drops a fast-path copy while the
entry stays served from cold. Because the flush runs in the background, construct it with the
two backends and the runtime the surrounding server or client already uses:
`TieredStorage::new(hot, cold, runtime)`.

- `FileSystemStorage`, a disk-backed `CacheStorage` that persists cached responses under a
root directory so they survive process restarts. Bodies stream to and from disk rather than
being buffered. Each response is stored as a compact rkyv-encoded metadata sidecar plus a
raw body file; the metadata is optimized for fast loading rather than being human-readable.
Enable it with the `fs` feature and select an async runtime with one of `smol`, `tokio`, or
`async-std`. A byte cap (1 GiB by default) bounds total stored body size, evicting
least-recently-used entries and deleting their files once it is reached; override it with
`with_max_capacity_bytes` or remove it with `unbounded`. The cap is enforced across
restarts and trims a directory that grew beyond it under an earlier configuration.

## [0.1.1] - 2026-05-26

### Fixed
Expand Down
Loading
Loading