ioannisa
07/27/2026, 12:16 PMksafe.rotateKeys() re-encrypts every entry under a fresh key and deletes the old one. Android (Keystore/StrongBox), iOS/macOS (Keychain/Secure Enclave), JVM Desktop (OS keychain), js + wasmJs (WebCrypto).
Crash-safe: an interrupted rotation leaves some entries on the old key and some on the new, and everything stays readable — call it again to finish. Concurrent writes always beat the rotation.
KSafeConfig(keyRotationPolicy = MaxAge(90.days)) for scheduled rotation, off by default.
Heads-up: rotated entries can't be read by 2.x, so the first rotation is a one-way door. Flagged at the top of the release notes.
Apache-2.0 · github.com/ioannisa/KSafe