0.1.3 (2026-08-24)
live_stash0.3 works again. 0.1.2 raised the requirement to~> 1.0, which is a major bump for anyone on 0.3 and does not belong in a patch release. LiveStash 1.0 also refusesuse LiveStashinside a nested LiveView, so the upgrade breaks any consumer stashing in one. The requirement is now~> 0.3 or ~> 1.0and the suite runs green against both — pick the version your app wants.
0.1.2 (2026-08-24)
- Recovery no longer starts a session when nothing is in scope to recover. A
view whose keys are all
:reconnecthad no recoverable state on a fresh or disconnected mount, but still read the stored object and wrote one back — so every crawler request to a public form left a stash in the bucket, and the read sat in the HTTP render path. Such a mount now returns:not_foundwithout touching the store. - The
reqversion is no longer forced on your application.reqwas declared here only to hold the tree above a CVE, which a package may not do — Hex refuses to build one that overrides a dependency, andlib/never calledReqin the first place.req_s3now acceptsreq0.6 and 0.7, so the pin it worked around is gone.
0.1.1 (2026-06-22)
- Writes no longer block the calling LiveView on the object-store PUT. Each
stash merged in memory and then ran the S3 round-trip inside the
handle_call, so underauto_stash: trueevery keystroke paid the network latency and the writing view felt sluggish. Writes now reply first and flush in ahandle_continue/2, keeping the LiveView off the round-trip while still persisting each write.
0.1.0 (2026-06-12)
Initial release.
DurableStash— a LiveStash adapter backed by DurableServer: one durable process per browser session, persisted to S3-compatible object storage. State survives live navigation, reconnects, LiveView crashes, and redeploys; recovery happens on every mount.- Per-key diff writes with key-wise merge — concurrent tabs writing different keys cannot clobber each other.
- Per-key recovery scopes:
:session(recover on every mount) and:reconnect(recover only on rejoins — crashes, Wi-Fi drops, deploys — and clear on fresh navigation; right for form drafts). vsn/migrateoptions for versioning the stored shape; mismatches without a migration discard to defaults.JSON-safety guards (
on_invalid_value: :raise | :log) and JSON normalization at stash time, so recovered values are identical in dev and prod.DurableStash.TestBackend— an in-memoryDurableServer.StorageBackendwith faithful etag CAS, for tests and local development without S3.