{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Keyv",
  "description": "Simple key-value storage with support for multiple backends",
  "home_page_url": "https://keyv.org/",
  "feed_url": "https://keyv.org/changelog-latest.json",
  "items": [
    {
      "id": "v6-1-0",
      "title": "v6.1.0",
      "url": "https://keyv.org/changelog/v6-1-0/",
      "date_published": "2026-10-06",
      "date_modified": "2026-10-06",
      "summary": "<p>First stable release of Keyv v6, published to npm's <code>latest</code> tag.</p>\n<p><em>All 20 published packages release in lockstep at 6.1.0; there is no 6.0.0. <code>@keyv/website</code> is private and not published.</em></p>\n<p>Coming from v5? Follow the v5 to v6 migration guide, or point your coding agent at <a href=\"https://keyv.org/skills/migrate\">https://keyv.org/skills/migrate</a>. v5 stays in maintenance; install it with <code>keyv@5</code>.</p>\n<p>These are changes since <code>6.0.0-rc.1</code>. Coming from v5, start with the migration guide.</p>",
      "content_html": "<h2 id=\"keyv610--2026-10-06\">keyv@6.1.0 — 2026-10-06</h2>\n<p>First stable release of Keyv v6, published to npm's <code>latest</code> tag.</p>\n<p><em>All 20 published packages release in lockstep at 6.1.0; there is no 6.0.0. <code>@keyv/website</code> is private and not published.</em></p>\n<p>Coming from v5? Follow the <a href=\"https://keyv.org/docs/migration/v5-to-v6/\">v5 to v6 migration guide</a>, or point your coding agent at <a href=\"https://keyv.org/skills/migrate.\">https://keyv.org/skills/migrate.</a> v5 stays in maintenance; install it with <code>keyv@5</code>.</p>\n<h3 id=\"-breaking-changes\">⚠ BREAKING CHANGES</h3>\n<p>These are changes since <code>6.0.0-rc.1</code>. Coming from v5, start with the <a href=\"https://keyv.org/docs/migration/v5-to-v6/\">migration guide</a>.</p>\n<ul>\n<li><strong>keyv, adapters:</strong> the namespace separator option is <code>namespaceSeparator</code> on every adapter that joins the namespace and the key, and it defaults to <code>::</code>; <code>keySeparator</code> and <code>keyPrefixSeparator</code> are gone (d0bc310, #2189)\r\nMigration from rc.1: rename the option. To keep reading namespaced data rc.1 wrote, set <code>namespaceSeparator: ':'</code> on the memory and bridge adapters, <code>@keyv/etcd</code>, <code>@keyv/dynamo</code>, <code>@keyv/cloudflare-kv</code> and <code>@keyv/valkey</code>. <code>@keyv/redis</code> already used <code>::</code> in rc.1.\r\nMigration from v5: v5's Keyv also prefixed every key with <code>&#x3C;namespace>:</code>, so the setting depends on the adapter. A default v5 <code>@keyv/redis</code> setup stored <code>keyv::keyv:foo</code>, which v6 reads with <code>new Keyv(new KeyvRedis(uri, { namespaceSeparator: '::keyv:' }), { namespace: 'keyv' })</code>. If you used <code>createKeyv()</code>, set only the same <code>namespace</code>. For other adapters, see <a href=\"https://keyv.org/docs/migration/v5-to-v6/#the-default-keyv-namespace-was-removed\">The Default <code>keyv</code> Namespace Was Removed</a>.</li>\n<li><strong>keyv:</strong> <code>throwOnErrors</code> is removed; a failed call returns a fallback value when an <code>error</code> listener is attached and rejects when none is (860dba7, #2155)\r\nMigration: remove <code>throwOnErrors</code>, and attach an <code>error</code> listener if you want fallback values instead of rejections.</li>\n<li><strong>keyv:</strong> a namespace set on the storage adapter is used when Keyv has none (c6e88e7, #2156)\r\nMigration: data rc.1 wrote in that setup has no namespace; remove the adapter's namespace to keep reading it, or let it refill.</li>\n<li><strong>keyv:</strong> a namespaced <code>clear()</code> fails instead of wiping a store it can't list (790eb3c, #2186)\r\nMigration: give the store <code>keys()</code> or <code>iterator()</code>, or call <code>clear()</code> on a Keyv instance without a namespace to empty it.</li>\n<li><strong>keyv:</strong> writes fail when an encryption adapter is set and serialization is off; rc.1 stored those values unencrypted (b73ee16, #2176)\r\nMigration: keep serialization on, which is the default, when you use encryption.</li>\n<li><strong>postgres, sqlite, mongo, dynamo, cloudflare-kv, etcd:</strong> keys that start with <code>&#x3C;namespace>:</code> are stored as given instead of being treated as already prefixed (9dec04c, #2159)\r\nMigration: entries rc.1 wrote under such keys read as missing; write them again.</li>\n<li><strong>encrypt-node, encrypt-web:</strong> <code>@keyv/encrypt-node</code> accepts only AES-GCM, AES-CCM and ChaCha20-Poly1305 with <code>base64</code>, <code>base64url</code> or <code>hex</code> output, and <code>@keyv/encrypt-web</code> accepts only AES-GCM; AES-CBC is removed (b06ec8b, #2187)\r\nMigration: the defaults are unchanged; re-encrypt values written with any other algorithm or encoding before you upgrade.</li>\n<li><strong>dynamo:</strong> keys written without a TTL no longer expire, and <code>sixHoursInMilliseconds</code> is removed (476761d, #2161)\r\nMigration: set Keyv's <code>ttl</code> option for a default expiry, as in <code>new Keyv(store, { ttl: 6 * 60 * 60 * 1000 })</code>.</li>\n<li><strong>etcd:</strong> the <code>lease</code> property is removed, and the store <code>ttl</code> applies to each key from its own write (6ba3096, #2160)\r\nMigration: remove code that reads or sets <code>store.lease</code>.</li>\n<li><strong>etcd:</strong> without a namespace, <code>clear()</code> and <code>iterator()</code> only touch entries Keyv wrote without a namespace (8a77946, #2173)\r\nMigration: set <code>noNamespaceAffectsAll: true</code> for the rc.1 behavior, and <code>namespaceSeparator: ':'</code> while etcd still holds namespaced rc.1 entries.</li>\n<li><strong>memcache:</strong> <code>clear()</code> only removes the store's own entries, and values rc.1 wrote read as missing (12415c5, #2179)\r\nMigration: let the cache refill; set <code>noNamespaceAffectsAll: true</code> on a store without a namespace to flush the whole server.</li>\n<li><strong>bigmap:</strong> setting <code>storeSize</code> keeps every entry and no longer emits <code>clear</code> (b80b44d, #2178)\r\nMigration: call <code>clear()</code> yourself if you resized the map to empty it.</li>\n</ul>\n<h3 id=\"features\">Features</h3>\n<ul>\n<li>\n<p>add the <code>keyv-migrate</code> agent skill, which upgrades a project from Keyv v4 or v5 to v6; it is published at <a href=\"https://keyv.org/skills/migrate\">https://keyv.org/skills/migrate</a> (bae30d5, #2171)</p>\n<pre><code class=\"hljs language-bash\">npx skills add jaredwray/keyv --skill keyv-migrate\n</code></pre>\n</li>\n<li>\n<p>add a <code>namespaceSeparator</code> option to every adapter that joins the namespace and the key; it defaults to <code>::</code> (d0bc310, #2189)</p>\n<pre><code class=\"hljs language-ts\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">KeyvEtcd</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'@keyv/etcd'</span>;\r\n\r\n<span class=\"hljs-comment\">// Read keys written with the old ':' separator</span>\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>(<span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">KeyvEtcd</span>(<span class=\"hljs-string\">'etcd://localhost:2379'</span>, { <span class=\"hljs-attr\">namespaceSeparator</span>: <span class=\"hljs-string\">':'</span> }), { <span class=\"hljs-attr\">namespace</span>: <span class=\"hljs-string\">'keyv'</span> });\n</code></pre>\n</li>\n</ul>\n<h3 id=\"bug-fixes\">Bug Fixes</h3>\n<ul>\n<li>keyv: promise-based stores without async methods go through <code>KeyvBridgeAdapter</code> (9c82ca3, #2157)</li>\n<li>keyv: the sanitizer strips patterns until none remain (3462350, #2158)</li>\n<li>keyv, postgres: fractional TTLs no longer fail writes, and postgres <code>disconnect()</code> releases the pool it connected with (82daf5d, #2168)</li>\n<li>postgres, sqlite: a <code>clearExpiredInterval</code> over 24.8 days no longer runs cleanup every millisecond (920ad81, #2164)</li>\n<li>cloudflare-kv: keys with a TTL of 60 seconds or less are removed by KV (ce6efce, #2162)</li>\n<li>etcd: the value envelope uses Keyv's JSON serializer, so <code>Buffer</code> and <code>BigInt</code> values round-trip (9010961, #2041)</li>\n<li>etcd: <code>setMany()</code> reports failed writes as <code>false</code> (c8133f7, #2172)</li>\n<li>memcache: keys memcached can't store now work, and rejected writes return <code>false</code> (365eeba, #2174)</li>\n<li>mongo: add a v6 migration script so documents v5 wrote stay readable (4068b0a, #2152)</li>\n<li>mongo: GridFS reads the newest revision, and <code>delete()</code> removes every revision (8101af5, #2163)</li>\n<li>mysql: tables get a primary key on <code>(namespace, id)</code>, and existing tables are migrated on connect (1bb5d90, #2165)</li>\n<li>mysql: the primary-key migration keeps primary keys you added and finds generated invisible ones (fbbb044, #2170)</li>\n<li>mysql, postgres: the v6 migration scripts ship in the package and run with <code>npx tsx</code> (8ede7f4, #2150)</li>\n<li>mysql, valkey: <code>keyv</code> is a peer dependency instead of a bundled copy (2c72abe, #2149)</li>\n<li>postgres: the migration script drops the legacy primary key first, <code>deleteMany()</code> runs as one statement, and SQL <code>NULL</code> reads as <code>undefined</code> (aa692eb, #2064)</li>\n<li>redis: <code>createKeyv()</code> accepts cluster and sentinel options, replacing the client removes the old client's listeners, and missing values are <code>undefined</code> (cab81d2, #2062)</li>\n<li>redis: concurrent operations during the handshake share one connect instead of failing (bb35d2b, #2105)</li>\n<li>redis: <code>connectionTimeout</code> covers the handshake, and timed-out connects close their sockets (00a48ba, #2108)</li>\n<li>redis: <code>createKeyvNonBlocking()</code> stops reconnecting to a server that is down (0575171, #2167)</li>\n<li>redis: <code>clear()</code> and <code>iterator()</code> match the namespace literally, not as a glob pattern (b91b8bf, #2185)</li>\n<li>sqlite: converting a v5 table runs in a transaction, and the <code>sqlite3</code> driver no longer hangs after a failed statement (90630ee, #2063)</li>\n<li>valkey: reads return <code>undefined</code>, never <code>null</code> (2435715, #2065)</li>\n<li>valkey: <code>clear()</code> removes only its own namespace, not namespaces that share its prefix (4d369be, #2147)</li>\n<li>valkey: <code>clear()</code>, <code>iterator()</code> and <code>useSets</code> work in cluster mode (a4326e9, #2166)</li>\n</ul>\n<h3 id=\"documentation\">Documentation</h3>\n<ul>\n<li>keyv.org moves to the Docula modern template, and the v5 docs are archived at <a href=\"https://keyv.org/v5/\">https://keyv.org/v5/</a> (52f692d, #2066)</li>\n<li>how to keep reading data written by v5, with each adapter's stored key layout (df63ef6, #2151)</li>\n<li>encryption: use a random secret as the key, or derive one with PBKDF2 (b5eeec9, #2188)</li>\n<li>postgres, redis: TLS how-tos for Amazon RDS for PostgreSQL and Redis Cloud (bda7916, #2194)</li>\n<li>migration guide and skill corrections (13c683e, #2169; f1bb9e3, #2175; bec33f4, #2177)</li>\n</ul>\n<h3 id=\"internal\">Internal</h3>\n<ul>\n<li>npm releases are staged and approved with 2FA, with provenance and an Aikido scan gate; stable v6 releases stage under <code>latest</code> (#2057, #2124, #2148)</li>\n<li>runtime dependency upgrades: <code>@redis/client</code> 6.2.1, <code>mongodb</code> 7.6.0, <code>mysql2</code> 3.24.2, <code>pg</code> 8.23.0, <code>better-sqlite3</code> 13.0.3, <code>memcache</code> 1.10.0, AWS SDK DynamoDB 3.1121.0, <code>msgpackr</code> 2.1.0, <code>lz4-napi</code> 2.10.0, <code>hookified</code> 3.0.3 (#2083–#2092)</li>\n</ul>\n<h3 id=\"contributors\">Contributors</h3>\n<ul>\n<li>@jaredwray (99)</li>\n</ul>\n<h3 id=\"full-list-of-changes\">Full List of Changes</h3>\n<ul>\n<li>etcd - fix: Use Keyv default serializer for value envelope by @jaredwray in #2041</li>\n<li>mono - chore: defense - stage npm publishes with Aikido gate by @jaredwray in #2057</li>\n<li>website - docs: migrate to Docula 2 modern template and archive v5 by @jaredwray in #2066</li>\n<li>redis - refactor: v6 client swap, API docs, and test uniformity by @jaredwray in #2062</li>\n<li>postgres - fix: v6 release review (migration, API docs, events) by @jaredwray in #2064</li>\n<li>sqlite - fix: harden v6 sqlite adapter, docs, and tests by @jaredwray in #2063</li>\n<li>valkey - refactor: v6 review cleanup for docs, tests, and events by @jaredwray in #2065</li>\n<li>redis - fix: share in-flight connect so concurrent ops are not dropped by @jaredwray in #2105</li>\n<li>redis - fix: Abort timed-out Redis connects without leaking sockets by @jaredwray in #2108</li>\n<li>mono - chore: release concurrency group + v5 staged publishing docs by @jaredwray in #2124</li>\n<li>valkey - fix: clear() only removes keys in the exact namespace by @jaredwray in #2147</li>\n<li>mono - fix: stage stable v6 releases under latest, not v6-lts by @jaredwray in #2148</li>\n<li>mono - fix: declare keyv as a peer dependency of mysql and valkey by @jaredwray in #2149</li>\n<li>mono - fix: make the mysql and postgres v6 migration scripts runnable by @jaredwray in #2150</li>\n<li>mono - docs: explain how to keep reading data written by v5 by @jaredwray in #2151</li>\n<li>mongo - fix: add a v6 migration script so v5 documents stay readable by @jaredwray in #2152</li>\n<li>keyv - fix: follow the EventEmitter error rule and remove throwOnErrors by @jaredwray in #2155</li>\n<li>keyv - fix: keep a namespace set on the storage adapter by @jaredwray in #2156</li>\n<li>keyv - fix: route promise-based stores without async methods through the bridge by @jaredwray in #2157</li>\n<li>keyv - fix: strip sanitizer patterns until none remain by @jaredwray in #2158</li>\n<li>mono - fix: keys that start with the namespace no longer collide by @jaredwray in #2159</li>\n<li>etcd - fix: default ttl applies per key and keeps working after the first lease expires by @jaredwray in #2160</li>\n<li>dynamo - fix: clear() removes every scan page and keys without a ttl no longer expire by @jaredwray in #2161</li>\n<li>cloudflare-kv - fix: keys with a ttl of 60 seconds or less are removed by KV by @jaredwray in #2162</li>\n<li>mongo - fix: GridFS reads the newest value and delete removes every revision by @jaredwray in #2163</li>\n<li>mono - fix: a clearExpiredInterval over 24.8 days no longer runs cleanup every millisecond by @jaredwray in #2164</li>\n<li>mysql - fix: tables get a primary key on (namespace, id) by @jaredwray in #2165</li>\n<li>valkey - fix: clear, iterator and useSets work in cluster mode by @jaredwray in #2166</li>\n<li>redis - fix: createKeyvNonBlocking stops reconnecting, and failed connects stop adding listeners by @jaredwray in #2167</li>\n<li>mono - fix: fractional TTLs no longer fail writes, and postgres disconnect releases the pool it connected with by @jaredwray in #2168</li>\n<li>mono - docs: drop the removed useKeyPrefix option from dynamo and cloudflare-kv examples by @jaredwray in #2169</li>\n<li>mysql - fix: Primary key migration keeps owner keys, replaces prefix keys, and finds hidden generated keys by @jaredwray in #2170</li>\n<li>etcd - fix: setMany reports failed writes as false by @jaredwray in #2172</li>\n<li>etcd - fix: Without a namespace, clear() and iterator() only touch Keyv's own entries by @jaredwray in #2173</li>\n<li>mono - feat: Add keyv-migrate agent skill at keyv.org/skills/migrate and fix stale v6 docs by @jaredwray in #2171</li>\n<li>memcache - fix: Keys memcached can't store now work, and rejected writes return false by @jaredwray in #2174</li>\n<li>mono - docs: Correct old delete results and etcd clear() in the migration skill by @jaredwray in #2175</li>\n<li>keyv - fix: writes fail with an error when encryption is set without serialization by @jaredwray in #2176</li>\n<li>skills - docs: bound the Redis \"every key\" range to @keyv/redis 2.7 through 3.0 by @jaredwray in #2177</li>\n<li>bigmap - fix: Changing storeSize or storeHashFunction keeps every entry by @jaredwray in #2178</li>\n<li>memcache - fix: clear() only removes the store's own entries by @jaredwray in #2179</li>\n<li>redis - fix: clear() and iterator() match the namespace literally by @jaredwray in #2185</li>\n<li>keyv - fix: a namespaced clear() fails instead of wiping a store it can't scope by @jaredwray in #2186</li>\n<li>mono - fix: authenticated ciphers only, bridge setMany() results, serializer __proto__ by @jaredwray in #2187</li>\n<li>mono - docs: use a random secret as the encryption key, or derive one with PBKDF2 by @jaredwray in #2188</li>\n<li>mono - feat: <code>namespaceSeparator</code> on every adapter, defaulting to <code>::</code> by @jaredwray in #2189</li>\n<li>mono - docs: Amazon RDS for PostgreSQL and Redis Cloud how-tos by @jaredwray in #2194</li>\n<li>mono - chore: Release v6.1.0 by @jaredwray in #2192</li>\n<li>…plus 51 dependency, tooling, CI, test and repo-maintenance PRs; see the full diff.</li>\n</ul>\n<p><strong>Full diff:</strong> <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-rc.1...v6.1.0</p>",
      "content_text": "## keyv@6.1.0 — 2026-10-06\r\n\r\nFirst stable release of Keyv v6, published to npm's `latest` tag.\r\n\r\n_All 20 published packages release in lockstep at 6.1.0; there is no 6.0.0. `@keyv/website` is private and not published._\r\n\r\nComing from v5? Follow the [v5 to v6 migration guide](https://keyv.org/docs/migration/v5-to-v6/), or point your coding agent at [https://keyv.org/skills/migrate.](https://keyv.org/skills/migrate.) v5 stays in maintenance; install it with `keyv@5`.\r\n\r\n### ⚠ BREAKING CHANGES\r\n\r\nThese are changes since `6.0.0-rc.1`. Coming from v5, start with the [migration guide](https://keyv.org/docs/migration/v5-to-v6/).\r\n\r\n- **keyv, adapters:** the namespace separator option is `namespaceSeparator` on every adapter that joins the namespace and the key, and it defaults to `::`; `keySeparator` and `keyPrefixSeparator` are gone (d0bc310, #2189)\r\n  Migration from rc.1: rename the option. To keep reading namespaced data rc.1 wrote, set `namespaceSeparator: ':'` on the memory and bridge adapters, `@keyv/etcd`, `@keyv/dynamo`, `@keyv/cloudflare-kv` and `@keyv/valkey`. `@keyv/redis` already used `::` in rc.1.\r\n  Migration from v5: v5's Keyv also prefixed every key with `<namespace>:`, so the setting depends on the adapter. A default v5 `@keyv/redis` setup stored `keyv::keyv:foo`, which v6 reads with `new Keyv(new KeyvRedis(uri, { namespaceSeparator: '::keyv:' }), { namespace: 'keyv' })`. If you used `createKeyv()`, set only the same `namespace`. For other adapters, see [The Default `keyv` Namespace Was Removed](https://keyv.org/docs/migration/v5-to-v6/#the-default-keyv-namespace-was-removed).\r\n- **keyv:** `throwOnErrors` is removed; a failed call returns a fallback value when an `error` listener is attached and rejects when none is (860dba7, #2155)\r\n  Migration: remove `throwOnErrors`, and attach an `error` listener if you want fallback values instead of rejections.\r\n- **keyv:** a namespace set on the storage adapter is used when Keyv has none (c6e88e7, #2156)\r\n  Migration: data rc.1 wrote in that setup has no namespace; remove the adapter's namespace to keep reading it, or let it refill.\r\n- **keyv:** a namespaced `clear()` fails instead of wiping a store it can't list (790eb3c, #2186)\r\n  Migration: give the store `keys()` or `iterator()`, or call `clear()` on a Keyv instance without a namespace to empty it.\r\n- **keyv:** writes fail when an encryption adapter is set and serialization is off; rc.1 stored those values unencrypted (b73ee16, #2176)\r\n  Migration: keep serialization on, which is the default, when you use encryption.\r\n- **postgres, sqlite, mongo, dynamo, cloudflare-kv, etcd:** keys that start with `<namespace>:` are stored as given instead of being treated as already prefixed (9dec04c, #2159)\r\n  Migration: entries rc.1 wrote under such keys read as missing; write them again.\r\n- **encrypt-node, encrypt-web:** `@keyv/encrypt-node` accepts only AES-GCM, AES-CCM and ChaCha20-Poly1305 with `base64`, `base64url` or `hex` output, and `@keyv/encrypt-web` accepts only AES-GCM; AES-CBC is removed (b06ec8b, #2187)\r\n  Migration: the defaults are unchanged; re-encrypt values written with any other algorithm or encoding before you upgrade.\r\n- **dynamo:** keys written without a TTL no longer expire, and `sixHoursInMilliseconds` is removed (476761d, #2161)\r\n  Migration: set Keyv's `ttl` option for a default expiry, as in `new Keyv(store, { ttl: 6 * 60 * 60 * 1000 })`.\r\n- **etcd:** the `lease` property is removed, and the store `ttl` applies to each key from its own write (6ba3096, #2160)\r\n  Migration: remove code that reads or sets `store.lease`.\r\n- **etcd:** without a namespace, `clear()` and `iterator()` only touch entries Keyv wrote without a namespace (8a77946, #2173)\r\n  Migration: set `noNamespaceAffectsAll: true` for the rc.1 behavior, and `namespaceSeparator: ':'` while etcd still holds namespaced rc.1 entries.\r\n- **memcache:** `clear()` only removes the store's own entries, and values rc.1 wrote read as missing (12415c5, #2179)\r\n  Migration: let the cache refill; set `noNamespaceAffectsAll: true` on a store without a namespace to flush the whole server.\r\n- **bigmap:** setting `storeSize` keeps every entry and no longer emits `clear` (b80b44d, #2178)\r\n  Migration: call `clear()` yourself if you resized the map to empty it.\r\n\r\n### Features\r\n- add the `keyv-migrate` agent skill, which upgrades a project from Keyv v4 or v5 to v6; it is published at [https://keyv.org/skills/migrate](https://keyv.org/skills/migrate) (bae30d5, #2171)\r\n\r\n  ```bash\r\n  npx skills add jaredwray/keyv --skill keyv-migrate\r\n  ```\r\n- add a `namespaceSeparator` option to every adapter that joins the namespace and the key; it defaults to `::` (d0bc310, #2189)\r\n\r\n  ```ts\r\n  import Keyv from 'keyv';\r\n  import KeyvEtcd from '@keyv/etcd';\r\n\r\n  // Read keys written with the old ':' separator\r\n  const keyv = new Keyv(new KeyvEtcd('etcd://localhost:2379', { namespaceSeparator: ':' }), { namespace: 'keyv' });\r\n  ```\r\n\r\n### Bug Fixes\r\n- keyv: promise-based stores without async methods go through `KeyvBridgeAdapter` (9c82ca3, #2157)\r\n- keyv: the sanitizer strips patterns until none remain (3462350, #2158)\r\n- keyv, postgres: fractional TTLs no longer fail writes, and postgres `disconnect()` releases the pool it connected with (82daf5d, #2168)\r\n- postgres, sqlite: a `clearExpiredInterval` over 24.8 days no longer runs cleanup every millisecond (920ad81, #2164)\r\n- cloudflare-kv: keys with a TTL of 60 seconds or less are removed by KV (ce6efce, #2162)\r\n- etcd: the value envelope uses Keyv's JSON serializer, so `Buffer` and `BigInt` values round-trip (9010961, #2041)\r\n- etcd: `setMany()` reports failed writes as `false` (c8133f7, #2172)\r\n- memcache: keys memcached can't store now work, and rejected writes return `false` (365eeba, #2174)\r\n- mongo: add a v6 migration script so documents v5 wrote stay readable (4068b0a, #2152)\r\n- mongo: GridFS reads the newest revision, and `delete()` removes every revision (8101af5, #2163)\r\n- mysql: tables get a primary key on `(namespace, id)`, and existing tables are migrated on connect (1bb5d90, #2165)\r\n- mysql: the primary-key migration keeps primary keys you added and finds generated invisible ones (fbbb044, #2170)\r\n- mysql, postgres: the v6 migration scripts ship in the package and run with `npx tsx` (8ede7f4, #2150)\r\n- mysql, valkey: `keyv` is a peer dependency instead of a bundled copy (2c72abe, #2149)\r\n- postgres: the migration script drops the legacy primary key first, `deleteMany()` runs as one statement, and SQL `NULL` reads as `undefined` (aa692eb, #2064)\r\n- redis: `createKeyv()` accepts cluster and sentinel options, replacing the client removes the old client's listeners, and missing values are `undefined` (cab81d2, #2062)\r\n- redis: concurrent operations during the handshake share one connect instead of failing (bb35d2b, #2105)\r\n- redis: `connectionTimeout` covers the handshake, and timed-out connects close their sockets (00a48ba, #2108)\r\n- redis: `createKeyvNonBlocking()` stops reconnecting to a server that is down (0575171, #2167)\r\n- redis: `clear()` and `iterator()` match the namespace literally, not as a glob pattern (b91b8bf, #2185)\r\n- sqlite: converting a v5 table runs in a transaction, and the `sqlite3` driver no longer hangs after a failed statement (90630ee, #2063)\r\n- valkey: reads return `undefined`, never `null` (2435715, #2065)\r\n- valkey: `clear()` removes only its own namespace, not namespaces that share its prefix (4d369be, #2147)\r\n- valkey: `clear()`, `iterator()` and `useSets` work in cluster mode (a4326e9, #2166)\r\n\r\n### Documentation\r\n- keyv.org moves to the Docula modern template, and the v5 docs are archived at [https://keyv.org/v5/](https://keyv.org/v5/) (52f692d, #2066)\r\n- how to keep reading data written by v5, with each adapter's stored key layout (df63ef6, #2151)\r\n- encryption: use a random secret as the key, or derive one with PBKDF2 (b5eeec9, #2188)\r\n- postgres, redis: TLS how-tos for Amazon RDS for PostgreSQL and Redis Cloud (bda7916, #2194)\r\n- migration guide and skill corrections (13c683e, #2169; f1bb9e3, #2175; bec33f4, #2177)\r\n\r\n### Internal\r\n- npm releases are staged and approved with 2FA, with provenance and an Aikido scan gate; stable v6 releases stage under `latest` (#2057, #2124, #2148)\r\n- runtime dependency upgrades: `@redis/client` 6.2.1, `mongodb` 7.6.0, `mysql2` 3.24.2, `pg` 8.23.0, `better-sqlite3` 13.0.3, `memcache` 1.10.0, AWS SDK DynamoDB 3.1121.0, `msgpackr` 2.1.0, `lz4-napi` 2.10.0, `hookified` 3.0.3 (#2083–#2092)\r\n\r\n### Contributors\r\n- @jaredwray (99)\r\n\r\n### Full List of Changes\r\n- etcd - fix: Use Keyv default serializer for value envelope by @jaredwray in #2041\r\n- mono - chore: defense - stage npm publishes with Aikido gate by @jaredwray in #2057\r\n- website - docs: migrate to Docula 2 modern template and archive v5 by @jaredwray in #2066\r\n- redis - refactor: v6 client swap, API docs, and test uniformity by @jaredwray in #2062\r\n- postgres - fix: v6 release review (migration, API docs, events) by @jaredwray in #2064\r\n- sqlite - fix: harden v6 sqlite adapter, docs, and tests by @jaredwray in #2063\r\n- valkey - refactor: v6 review cleanup for docs, tests, and events by @jaredwray in #2065\r\n- redis - fix: share in-flight connect so concurrent ops are not dropped by @jaredwray in #2105\r\n- redis - fix: Abort timed-out Redis connects without leaking sockets by @jaredwray in #2108\r\n- mono - chore: release concurrency group + v5 staged publishing docs by @jaredwray in #2124\r\n- valkey - fix: clear() only removes keys in the exact namespace by @jaredwray in #2147\r\n- mono - fix: stage stable v6 releases under latest, not v6-lts by @jaredwray in #2148\r\n- mono - fix: declare keyv as a peer dependency of mysql and valkey by @jaredwray in #2149\r\n- mono - fix: make the mysql and postgres v6 migration scripts runnable by @jaredwray in #2150\r\n- mono - docs: explain how to keep reading data written by v5 by @jaredwray in #2151\r\n- mongo - fix: add a v6 migration script so v5 documents stay readable by @jaredwray in #2152\r\n- keyv - fix: follow the EventEmitter error rule and remove throwOnErrors by @jaredwray in #2155\r\n- keyv - fix: keep a namespace set on the storage adapter by @jaredwray in #2156\r\n- keyv - fix: route promise-based stores without async methods through the bridge by @jaredwray in #2157\r\n- keyv - fix: strip sanitizer patterns until none remain by @jaredwray in #2158\r\n- mono - fix: keys that start with the namespace no longer collide by @jaredwray in #2159\r\n- etcd - fix: default ttl applies per key and keeps working after the first lease expires by @jaredwray in #2160\r\n- dynamo - fix: clear() removes every scan page and keys without a ttl no longer expire by @jaredwray in #2161\r\n- cloudflare-kv - fix: keys with a ttl of 60 seconds or less are removed by KV by @jaredwray in #2162\r\n- mongo - fix: GridFS reads the newest value and delete removes every revision by @jaredwray in #2163\r\n- mono - fix: a clearExpiredInterval over 24.8 days no longer runs cleanup every millisecond by @jaredwray in #2164\r\n- mysql - fix: tables get a primary key on (namespace, id) by @jaredwray in #2165\r\n- valkey - fix: clear, iterator and useSets work in cluster mode by @jaredwray in #2166\r\n- redis - fix: createKeyvNonBlocking stops reconnecting, and failed connects stop adding listeners by @jaredwray in #2167\r\n- mono - fix: fractional TTLs no longer fail writes, and postgres disconnect releases the pool it connected with by @jaredwray in #2168\r\n- mono - docs: drop the removed useKeyPrefix option from dynamo and cloudflare-kv examples by @jaredwray in #2169\r\n- mysql - fix: Primary key migration keeps owner keys, replaces prefix keys, and finds hidden generated keys by @jaredwray in #2170\r\n- etcd - fix: setMany reports failed writes as false by @jaredwray in #2172\r\n- etcd - fix: Without a namespace, clear() and iterator() only touch Keyv's own entries by @jaredwray in #2173\r\n- mono - feat: Add keyv-migrate agent skill at keyv.org/skills/migrate and fix stale v6 docs by @jaredwray in #2171\r\n- memcache - fix: Keys memcached can't store now work, and rejected writes return false by @jaredwray in #2174\r\n- mono - docs: Correct old delete results and etcd clear() in the migration skill by @jaredwray in #2175\r\n- keyv - fix: writes fail with an error when encryption is set without serialization by @jaredwray in #2176\r\n- skills - docs: bound the Redis \"every key\" range to @keyv/redis 2.7 through 3.0 by @jaredwray in #2177\r\n- bigmap - fix: Changing storeSize or storeHashFunction keeps every entry by @jaredwray in #2178\r\n- memcache - fix: clear() only removes the store's own entries by @jaredwray in #2179\r\n- redis - fix: clear() and iterator() match the namespace literally by @jaredwray in #2185\r\n- keyv - fix: a namespaced clear() fails instead of wiping a store it can't scope by @jaredwray in #2186\r\n- mono - fix: authenticated ciphers only, bridge setMany() results, serializer \\_\\_proto\\_\\_ by @jaredwray in #2187\r\n- mono - docs: use a random secret as the encryption key, or derive one with PBKDF2 by @jaredwray in #2188\r\n- mono - feat: `namespaceSeparator` on every adapter, defaulting to `::` by @jaredwray in #2189\r\n- mono - docs: Amazon RDS for PostgreSQL and Redis Cloud how-tos by @jaredwray in #2194\r\n- mono - chore: Release v6.1.0 by @jaredwray in #2192\r\n- …plus 51 dependency, tooling, CI, test and repo-maintenance PRs; see the full diff.\r\n\r\n**Full diff:** [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-rc.1...v6.1.0",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-rc-1",
      "title": "v6.0.0-rc.1",
      "url": "https://keyv.org/changelog/v6-0-0-rc-1/",
      "date_published": "2026-08-03",
      "date_modified": "2026-08-03",
      "summary": "<p>Promote 6.0 to release candidate: Cloudflare KV adapter, MySQL fixes, and a full dependency refresh.</p>\n<p><em>All published <code>@keyv/*</code> adapters release in lockstep at this version. <code>@keyv/website</code> is private and not published.</em></p>\n<ul>\n<li><strong>mysql:</strong> keys are now stored as <code>VARBINARY</code> (6e519b4, #2015; f579073, #2016)\r\nMigration: <code>@keyv/mysql</code> tables created under <code>6.0.0-beta.4</code> use the previous key column type. Recreate the keyv table, or <code>ALTER</code> the key column to <code>VARBINARY</code>, before upgrading.</li>\n</ul>",
      "content_html": "<h2 id=\"keyv-v600-rc1--2026-08-03\">keyv v6.0.0-rc.1 — 2026-08-03</h2>\n<p>Promote 6.0 to release candidate: Cloudflare KV adapter, MySQL fixes, and a full dependency refresh.</p>\n<p><em>All published <code>@keyv/*</code> adapters release in lockstep at this version. <code>@keyv/website</code> is private and not published.</em></p>\n<h3 id=\"-breaking-changes\">⚠ BREAKING CHANGES</h3>\n<ul>\n<li><strong>mysql:</strong> keys are now stored as <code>VARBINARY</code> (6e519b4, #2015; f579073, #2016)\r\nMigration: <code>@keyv/mysql</code> tables created under <code>6.0.0-beta.4</code> use the previous key column type. Recreate the keyv table, or <code>ALTER</code> the key column to <code>VARBINARY</code>, before upgrading.</li>\n<li><strong>keyv:</strong> <code>checkExpired</code> now defaults to <code>true</code> (f067213, #1984)\r\nMigration: expired keys are now checked and cleared by default. Pass <code>checkExpired: false</code> to restore the previous behavior.</li>\n<li><strong>keyv:</strong> removed the namespace <code>removeKeyPrefix</code> behavior for v6 (73fd79b, #2013)\r\nMigration: keys are no longer stripped of their namespace prefix on read. If you relied on the stripped form, read the full namespaced key.</li>\n</ul>\n<h3 id=\"features\">Features</h3>\n<ul>\n<li>\n<p>add Cloudflare Workers KV storage adapter (e004467, #1985)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">import</span> { createKeyv } <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\"@keyv/cloudflare-kv\"</span>;\r\n\r\n<span class=\"hljs-comment\">// REST mode — from any Node.js process</span>\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-title function_\">createKeyv</span>({\r\n  <span class=\"hljs-attr\">mode</span>: <span class=\"hljs-string\">\"rest\"</span>,\r\n  <span class=\"hljs-attr\">accountId</span>: process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">CF_ACCOUNT_ID</span>,\r\n  <span class=\"hljs-attr\">namespaceId</span>: process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">CF_KV_NAMESPACE_ID</span>,\r\n  <span class=\"hljs-attr\">apiToken</span>: process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">CF_API_TOKEN</span>,\r\n});\r\n<span class=\"hljs-comment\">// Or \"bind\" mode inside a Worker: createKeyv({ kvNamespace: env.MY_KV })</span>\n</code></pre>\n</li>\n<li>\n<p>mysql: move to async config changes (b775072, #2018)</p>\n</li>\n<li>\n<p>keyv: add the built-in adapters to the docs (2e03276, #1983)</p>\n</li>\n<li>\n<p>mysql: add docs (e07dc4c, #2019)</p>\n</li>\n</ul>\n<h3 id=\"bug-fixes\">Bug Fixes</h3>\n<ul>\n<li>mysql: isolate pooled connection lifecycles (86b61c8, #2012)</li>\n<li>mysql: scheduled cleanup firing (97fa359, #2017)</li>\n<li>mysql: deleting expired keys sometimes fails (6e5aff2, #2014)</li>\n<li>mysql: resolve TypeScript errors (dc563b6, #2011)</li>\n</ul>\n<h3 id=\"documentation\">Documentation</h3>\n<ul>\n<li>add keyv-s3fifo to third-party storage adapters (fb420e7, #2020)</li>\n</ul>\n<h3 id=\"internal\">Internal</h3>\n<ul>\n<li>refactor: add <code>KeyvAny</code>/<code>KeyvAnyArray</code> types and replace explicit <code>any</code> (49ed583, #2010)</li>\n<li>34 dependency and tooling upgrades across the monorepo — highlights: TypeScript 6→7, pnpm 11.5→11.18, better-sqlite3 12→13 (N-API, drops <code>prebuild-install</code>), mongodb 7.4→7.5, mysql2 3.22→3.23, iovalkey 0.3→0.4, <code>@redis/client</code> 6.0→6.1, hookified 3.0.1→3.0.2, <code>actions/setup-node</code> v6→v7, and the Node engines floor raised to ≥ 22.19.0. Full inventory below.</li>\n</ul>\n<h3 id=\"contributors\">Contributors</h3>\n<ul>\n<li>@jaredwray (47)</li>\n<li>@BJS-kr (1)</li>\n</ul>\n<h3 id=\"full-list-of-changes\">Full List of Changes</h3>\n<ul>\n<li>keyv - feat: adding in the built in adapters to docs by @jaredwray in #1983</li>\n<li>keyv - fix: moving checkExpired to default to true by @jaredwray in #1984</li>\n<li>cloudflare-kv - feat: Add Cloudflare Workers KV storage adapter by @jaredwray in #1985</li>\n<li>mono - chore: upgrade code quality dependencies by @jaredwray in #1986</li>\n<li>mono - chore: upgrade TypeScript and build tooling by @jaredwray in #1987</li>\n<li>mono - chore: upgrade js-yaml to v5 (breaking) by @jaredwray in #1988</li>\n<li>keyv - chore: upgrade keyv-file by @jaredwray in #1989</li>\n<li>mono - chore: upgrade GitHub Actions (breaking) by @jaredwray in #1990</li>\n<li>dynamo - chore: upgrade AWS SDK dependencies by @jaredwray in #1991</li>\n<li>mongo - chore: upgrade mongodb by @jaredwray in #1992</li>\n<li>postgres - chore: upgrade pg by @jaredwray in #1993</li>\n<li>sqlite - chore: upgrade better-sqlite3 by @jaredwray in #1994</li>\n<li>redis - chore: upgrade @redis/client by @jaredwray in #1995</li>\n<li>memcache - chore: upgrade memcache by @jaredwray in #1996</li>\n<li>mono - chore: upgrade hookified by @jaredwray in #1997</li>\n<li>serialize - chore: upgrade msgpackr by @jaredwray in #1998</li>\n<li>test-suite - chore: upgrade bignumber.js by @jaredwray in #1999</li>\n<li>bigmap - chore: upgrade hashery (breaking) by @jaredwray in #2000</li>\n<li>compress-gzip - chore: upgrade pako (breaking) by @jaredwray in #2001</li>\n<li>mono - refactor: add KeyvAny/KeyvAnyArray types and replace explicit any by @jaredwray in #2010</li>\n<li>mysql - fix: resolve TypeScript errors by @jaredwray in #2011</li>\n<li>mysql - fix: isolate pooled connection lifecycles by @jaredwray in #2012</li>\n<li>fix: removing the namespace removeKeyPrefix with v6 by @jaredwray in #2013</li>\n<li>mysql - fix: deleting expired keys sometimes fail by @jaredwray in #2014</li>\n<li>mysql - fix: moving to VARBINARY for key by @jaredwray in #2015</li>\n<li>mysql - fix: moving to varbinary for key (fixes) by @jaredwray in #2016</li>\n<li>mysql - fix: scheduled cleanup firing by @jaredwray in #2017</li>\n<li>mysql - feat: moving to async config changes by @jaredwray in #2018</li>\n<li>mysql - feat: adding in docs by @jaredwray in #2019</li>\n<li>docs: add keyv-s3fifo to third-party storage adapters by @BJS-kr in #2020</li>\n<li>mono - chore: upgrade code quality dependencies by @jaredwray in #2021</li>\n<li>mono - chore: upgrade TypeScript and build tooling by @jaredwray in #2022</li>\n<li>mono - chore: upgrade pnpm to 11.18.0 by @jaredwray in #2023</li>\n<li>mono - chore: upgrade GitHub Actions by @jaredwray in #2024</li>\n<li>dynamo - chore: upgrade AWS SDK DynamoDB dependencies by @jaredwray in #2025</li>\n<li>redis - chore: upgrade @redis/client to 6.1.0 by @jaredwray in #2026</li>\n<li>mongo - chore: upgrade mongodb to 7.5.0 by @jaredwray in #2027</li>\n<li>mysql - chore: upgrade mysql2 to 3.23.2 by @jaredwray in #2028</li>\n<li>valkey - chore: upgrade iovalkey to 0.4.0 by @jaredwray in #2029</li>\n<li>memcache - chore: upgrade memcache to 1.9.0 by @jaredwray in #2030</li>\n<li>mono - chore: raise Node engines floor to 22.19.0 by @jaredwray in #2031</li>\n<li>sqlite - chore: upgrade better-sqlite3 to 13.0.2 by @jaredwray in #2032</li>\n<li>mono - chore: upgrade hookified to 3.0.2 by @jaredwray in #2033</li>\n<li>bigmap - chore: upgrade hashery to 3.0.1 by @jaredwray in #2034</li>\n<li>test-suite - chore: upgrade bignumber.js to 11.1.5 by @jaredwray in #2035</li>\n<li>mono - chore: upgrade lz4-napi to 2.9.1 by @jaredwray in #2036</li>\n<li>serialize - chore: upgrade msgpackr to 2.0.5 by @jaredwray in #2037</li>\n<li>compress - chore: upgrade pako to 3.0.1 by @jaredwray in #2038</li>\n</ul>\n<p><strong>Full diff:</strong> <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-beta.4...v6.0.0-rc.1</p>",
      "content_text": "## keyv v6.0.0-rc.1 — 2026-08-03\r\n\r\nPromote 6.0 to release candidate: Cloudflare KV adapter, MySQL fixes, and a full dependency refresh.\r\n\r\n_All published `@keyv/*` adapters release in lockstep at this version. `@keyv/website` is private and not published._\r\n\r\n### ⚠ BREAKING CHANGES\r\n- **mysql:** keys are now stored as `VARBINARY` (6e519b4, #2015; f579073, #2016)\r\n  Migration: `@keyv/mysql` tables created under `6.0.0-beta.4` use the previous key column type. Recreate the keyv table, or `ALTER` the key column to `VARBINARY`, before upgrading.\r\n- **keyv:** `checkExpired` now defaults to `true` (f067213, #1984)\r\n  Migration: expired keys are now checked and cleared by default. Pass `checkExpired: false` to restore the previous behavior.\r\n- **keyv:** removed the namespace `removeKeyPrefix` behavior for v6 (73fd79b, #2013)\r\n  Migration: keys are no longer stripped of their namespace prefix on read. If you relied on the stripped form, read the full namespaced key.\r\n\r\n### Features\r\n- add Cloudflare Workers KV storage adapter (e004467, #1985)\r\n\r\n  ```js\r\n  import { createKeyv } from \"@keyv/cloudflare-kv\";\r\n\r\n  // REST mode — from any Node.js process\r\n  const keyv = createKeyv({\r\n    mode: \"rest\",\r\n    accountId: process.env.CF_ACCOUNT_ID,\r\n    namespaceId: process.env.CF_KV_NAMESPACE_ID,\r\n    apiToken: process.env.CF_API_TOKEN,\r\n  });\r\n  // Or \"bind\" mode inside a Worker: createKeyv({ kvNamespace: env.MY_KV })\r\n  ```\r\n- mysql: move to async config changes (b775072, #2018)\r\n- keyv: add the built-in adapters to the docs (2e03276, #1983)\r\n- mysql: add docs (e07dc4c, #2019)\r\n\r\n### Bug Fixes\r\n- mysql: isolate pooled connection lifecycles (86b61c8, #2012)\r\n- mysql: scheduled cleanup firing (97fa359, #2017)\r\n- mysql: deleting expired keys sometimes fails (6e5aff2, #2014)\r\n- mysql: resolve TypeScript errors (dc563b6, #2011)\r\n\r\n### Documentation\r\n- add keyv-s3fifo to third-party storage adapters (fb420e7, #2020)\r\n\r\n### Internal\r\n- refactor: add `KeyvAny`/`KeyvAnyArray` types and replace explicit `any` (49ed583, #2010)\r\n- 34 dependency and tooling upgrades across the monorepo — highlights: TypeScript 6→7, pnpm 11.5→11.18, better-sqlite3 12→13 (N-API, drops `prebuild-install`), mongodb 7.4→7.5, mysql2 3.22→3.23, iovalkey 0.3→0.4, `@redis/client` 6.0→6.1, hookified 3.0.1→3.0.2, `actions/setup-node` v6→v7, and the Node engines floor raised to ≥ 22.19.0. Full inventory below.\r\n\r\n### Contributors\r\n- @jaredwray (47)\r\n- @BJS-kr (1)\r\n\r\n### Full List of Changes\r\n- keyv - feat: adding in the built in adapters to docs by @jaredwray in #1983\r\n- keyv - fix: moving checkExpired to default to true by @jaredwray in #1984\r\n- cloudflare-kv - feat: Add Cloudflare Workers KV storage adapter by @jaredwray in #1985\r\n- mono - chore: upgrade code quality dependencies by @jaredwray in #1986\r\n- mono - chore: upgrade TypeScript and build tooling by @jaredwray in #1987\r\n- mono - chore: upgrade js-yaml to v5 (breaking) by @jaredwray in #1988\r\n- keyv - chore: upgrade keyv-file by @jaredwray in #1989\r\n- mono - chore: upgrade GitHub Actions (breaking) by @jaredwray in #1990\r\n- dynamo - chore: upgrade AWS SDK dependencies by @jaredwray in #1991\r\n- mongo - chore: upgrade mongodb by @jaredwray in #1992\r\n- postgres - chore: upgrade pg by @jaredwray in #1993\r\n- sqlite - chore: upgrade better-sqlite3 by @jaredwray in #1994\r\n- redis - chore: upgrade @redis/client by @jaredwray in #1995\r\n- memcache - chore: upgrade memcache by @jaredwray in #1996\r\n- mono - chore: upgrade hookified by @jaredwray in #1997\r\n- serialize - chore: upgrade msgpackr by @jaredwray in #1998\r\n- test-suite - chore: upgrade bignumber.js by @jaredwray in #1999\r\n- bigmap - chore: upgrade hashery (breaking) by @jaredwray in #2000\r\n- compress-gzip - chore: upgrade pako (breaking) by @jaredwray in #2001\r\n- mono - refactor: add KeyvAny/KeyvAnyArray types and replace explicit any by @jaredwray in #2010\r\n- mysql - fix: resolve TypeScript errors by @jaredwray in #2011\r\n- mysql - fix: isolate pooled connection lifecycles by @jaredwray in #2012\r\n- fix: removing the namespace removeKeyPrefix with v6 by @jaredwray in #2013\r\n- mysql - fix: deleting expired keys sometimes fail by @jaredwray in #2014\r\n- mysql - fix: moving to VARBINARY for key by @jaredwray in #2015\r\n- mysql - fix: moving to varbinary for key (fixes) by @jaredwray in #2016\r\n- mysql - fix: scheduled cleanup firing by @jaredwray in #2017\r\n- mysql - feat: moving to async config changes by @jaredwray in #2018\r\n- mysql - feat: adding in docs by @jaredwray in #2019\r\n- docs: add keyv-s3fifo to third-party storage adapters by @BJS-kr in #2020\r\n- mono - chore: upgrade code quality dependencies by @jaredwray in #2021\r\n- mono - chore: upgrade TypeScript and build tooling by @jaredwray in #2022\r\n- mono - chore: upgrade pnpm to 11.18.0 by @jaredwray in #2023\r\n- mono - chore: upgrade GitHub Actions by @jaredwray in #2024\r\n- dynamo - chore: upgrade AWS SDK DynamoDB dependencies by @jaredwray in #2025\r\n- redis - chore: upgrade @redis/client to 6.1.0 by @jaredwray in #2026\r\n- mongo - chore: upgrade mongodb to 7.5.0 by @jaredwray in #2027\r\n- mysql - chore: upgrade mysql2 to 3.23.2 by @jaredwray in #2028\r\n- valkey - chore: upgrade iovalkey to 0.4.0 by @jaredwray in #2029\r\n- memcache - chore: upgrade memcache to 1.9.0 by @jaredwray in #2030\r\n- mono - chore: raise Node engines floor to 22.19.0 by @jaredwray in #2031\r\n- sqlite - chore: upgrade better-sqlite3 to 13.0.2 by @jaredwray in #2032\r\n- mono - chore: upgrade hookified to 3.0.2 by @jaredwray in #2033\r\n- bigmap - chore: upgrade hashery to 3.0.1 by @jaredwray in #2034\r\n- test-suite - chore: upgrade bignumber.js to 11.1.5 by @jaredwray in #2035\r\n- mono - chore: upgrade lz4-napi to 2.9.1 by @jaredwray in #2036\r\n- serialize - chore: upgrade msgpackr to 2.0.5 by @jaredwray in #2037\r\n- compress - chore: upgrade pako to 3.0.1 by @jaredwray in #2038\r\n\r\n**Full diff:** [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-beta.4...v6.0.0-rc.1",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-beta-4",
      "title": "v6.0.0-beta.4",
      "url": "https://keyv.org/changelog/v6-0-0-beta-4/",
      "date_published": "2026-06-18",
      "date_modified": "2026-06-18",
      "summary": "<p>Finalize the v6 storage-adapter API (ttl → expires) and complete the cross-adapter code/test review.</p>\n<ul>\n<li>Storage adapters now use <code>expires</code> (absolute epoch-ms timestamp) instead of a relative <code>ttl</code>. (da9c08f, #1981)\r\nMigration: if you call a storage adapter directly or implement a custom one, read the absolute <code>expires</code> value from the entry envelope instead of accepting a <code>ttl</code> argument. The <code>Keyv</code> core API is unchanged — it continues to derive <code>expires</code> from the value envelope, so typical...</li>\n</ul>",
      "content_html": "<h2 id=\"keyv-v600-beta4--2026-06-18\">Keyv v6.0.0-beta.4 — 2026-06-18</h2>\n<p>Finalize the v6 storage-adapter API (ttl → expires) and complete the cross-adapter code/test review.</p>\n<h3 id=\"-breaking-changes\">⚠ BREAKING CHANGES</h3>\n<ul>\n<li>Storage adapters now use <code>expires</code> (absolute epoch-ms timestamp) instead of a relative <code>ttl</code>. (da9c08f, #1981)\r\nMigration: if you call a storage adapter directly or implement a custom one, read the absolute <code>expires</code> value from the entry envelope instead of accepting a <code>ttl</code> argument. The <code>Keyv</code> core API is unchanged — it continues to derive <code>expires</code> from the value envelope, so typical <code>keyv.set(key, value, ttl)</code> usage is unaffected.</li>\n</ul>\n<h3 id=\"features\">Features</h3>\n<ul>\n<li>\n<p><strong>bigmap:</strong> wire up Hookified events — <code>BigMap</code> now emits <code>SET</code>, <code>DELETE</code>, and <code>CLEAR</code> via the new <code>BigMapEvents</code> enum. (b88d03f, #1977)</p>\n<pre><code class=\"hljs language-ts\"><span class=\"hljs-keyword\">import</span> { <span class=\"hljs-title class_\">BigMap</span>, <span class=\"hljs-title class_\">BigMapEvents</span> } <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'@keyv/bigmap'</span>;\r\n\r\n<span class=\"hljs-keyword\">const</span> map = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">BigMap</span>&#x3C;<span class=\"hljs-built_in\">string</span>>();\r\nmap.<span class=\"hljs-title function_\">on</span>(<span class=\"hljs-title class_\">BigMapEvents</span>.<span class=\"hljs-property\">SET</span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">key, value</span>) =></span> <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(<span class=\"hljs-string\">'set'</span>, key, value));\r\nmap.<span class=\"hljs-title function_\">on</span>(<span class=\"hljs-title class_\">BigMapEvents</span>.<span class=\"hljs-property\">DELETE</span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">key</span>) =></span> <span class=\"hljs-variable language_\">console</span>.<span class=\"hljs-title function_\">log</span>(<span class=\"hljs-string\">'deleted'</span>, key));\r\n\r\nmap.<span class=\"hljs-title function_\">set</span>(<span class=\"hljs-string\">'a'</span>, <span class=\"hljs-string\">'1'</span>);  <span class=\"hljs-comment\">// → \"set a 1\"</span>\r\nmap.<span class=\"hljs-title function_\">delete</span>(<span class=\"hljs-string\">'a'</span>);    <span class=\"hljs-comment\">// → \"deleted a\"</span>\n</code></pre>\n<p>Also renames the exported <code>MapInterfacee</code> type to <code>MapInterface</code> (typo fix — safe within the v6 beta).</p>\n</li>\n</ul>\n<h3 id=\"bug-fixes\">Bug Fixes</h3>\n<ul>\n<li><strong>etcd:</strong> support the grpc-gateway v2 error format for etcd 3.6 compatibility. (dcb64bd, #1964)</li>\n<li><strong>dynamo:</strong> strip the namespace prefix in the iterator and align tests/docs. (75198aa, #1965)</li>\n<li><strong>etcd:</strong> return <code>undefined</code> for missing values and align tests/docs. (1e84580, #1966)</li>\n<li><strong>mysql:</strong> return <code>undefined</code> instead of <code>null</code>, guard <code>getMany</code>, and align tests/docs. (d76926b, #1969)</li>\n</ul>\n<h3 id=\"documentation\">Documentation</h3>\n<ul>\n<li><strong>keyv:</strong> fix README API accuracy and strengthen the code/test review. (685bc77, #1979)</li>\n<li><strong>keyv:</strong> add a jsDelivr badge to the README. (418ce7a, #1963)</li>\n</ul>\n<h3 id=\"internal\">Internal</h3>\n<ul>\n<li><strong>dynamo:</strong> code clean up and minor fixes. (9048a87, #1970)</li>\n<li><strong>etcd:</strong> code clean up and documentation. (aed5638, #1972)</li>\n<li><strong>postgres:</strong> code/test review for <code>@keyv/postgres</code>. (9fa6847, #1971)</li>\n<li><strong>redis:</strong> full code and test review cleanup. (480a560, #1974)</li>\n<li><strong>memcache:</strong> add an error handler. (394e254, #1973)</li>\n<li><strong>memcache:</strong> uniform test suite, fix namespace docs, validate API. (95612fc, #1967)</li>\n<li><strong>mongo:</strong> uniform test suite, fix README API docs. (0240400, #1968)</li>\n<li><strong>mongo:</strong> documentation and fixes (includes #1980 review follow-ups). (f31850d, #1976)</li>\n<li><strong>sqlite:</strong> full code and test review cleanup. (8539cfd, #1975)</li>\n<li><strong>valkey:</strong> full code and test review. (e8a3ffa, #1978)</li>\n</ul>\n<h3 id=\"contributors\">Contributors</h3>\n<ul>\n<li>@jaredwray (18)</li>\n</ul>\n<h3 id=\"full-list-of-changes\">Full List of Changes</h3>\n<ul>\n<li>feat: adding in jsDelivr badge for Keyv by @jaredwray in #1963</li>\n<li>etcd - fix: support grpc-gateway v2 error format for etcd 3.6 compatibility by @jaredwray in #1964</li>\n<li>dynamo - fix: strip namespace prefix in iterator and align tests/docs by @jaredwray in #1965</li>\n<li>etcd - fix: return undefined for missing values and align tests/docs by @jaredwray in #1966</li>\n<li>memcache - test: uniform test suite, fix namespace docs, validate API by @jaredwray in #1967</li>\n<li>mongo - test: uniform test suite, fix README API docs by @jaredwray in #1968</li>\n<li>mysql - fix: return undefined not null, guard getMany, and align tests/docs by @jaredwray in #1969</li>\n<li>dynamo - chore: code clean up and minor fixes by @jaredwray in #1970</li>\n<li>etcd - chore: code clean up and documentation by @jaredwray in #1972</li>\n<li>postgres - refactor: code/test review for @keyv/postgres by @jaredwray in #1971</li>\n<li>redis - chore: full code and test review cleanup by @jaredwray in #1974</li>\n<li>memcache - chore: adding in error handler by @jaredwray in #1973</li>\n<li>sqlite - refactor: full code and test review cleanup by @jaredwray in #1975</li>\n<li>keyv - docs: fix README API accuracy and strengthen code/test review by @jaredwray in #1979</li>\n<li>valkey - refactor: full code and test review by @jaredwray in #1978</li>\n<li>bigmap - feat: wire up hookified events and complete code/test review by @jaredwray in #1977</li>\n<li>mongo - chore: documentation and fixes by @jaredwray in #1976</li>\n<li>keyv (breaking) - storage adapters now only use expires instead of ttl by @jaredwray in #1981</li>\n</ul>\n<p><strong>Full diff:</strong> <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-beta.3...v6.0.0-beta.4</p>",
      "content_text": "## Keyv v6.0.0-beta.4 — 2026-06-18\r\n\r\nFinalize the v6 storage-adapter API (ttl → expires) and complete the cross-adapter code/test review.\r\n\r\n### ⚠ BREAKING CHANGES\r\n- Storage adapters now use `expires` (absolute epoch-ms timestamp) instead of a relative `ttl`. (da9c08f, #1981)\r\n  Migration: if you call a storage adapter directly or implement a custom one, read the absolute `expires` value from the entry envelope instead of accepting a `ttl` argument. The `Keyv` core API is unchanged — it continues to derive `expires` from the value envelope, so typical `keyv.set(key, value, ttl)` usage is unaffected.\r\n\r\n### Features\r\n- **bigmap:** wire up Hookified events — `BigMap` now emits `SET`, `DELETE`, and `CLEAR` via the new `BigMapEvents` enum. (b88d03f, #1977)\r\n\r\n  ```ts\r\n  import { BigMap, BigMapEvents } from '@keyv/bigmap';\r\n\r\n  const map = new BigMap<string>();\r\n  map.on(BigMapEvents.SET, (key, value) => console.log('set', key, value));\r\n  map.on(BigMapEvents.DELETE, (key) => console.log('deleted', key));\r\n\r\n  map.set('a', '1');  // → \"set a 1\"\r\n  map.delete('a');    // → \"deleted a\"\r\n  ```\r\n\r\n  Also renames the exported `MapInterfacee` type to `MapInterface` (typo fix — safe within the v6 beta).\r\n\r\n### Bug Fixes\r\n- **etcd:** support the grpc-gateway v2 error format for etcd 3.6 compatibility. (dcb64bd, #1964)\r\n- **dynamo:** strip the namespace prefix in the iterator and align tests/docs. (75198aa, #1965)\r\n- **etcd:** return `undefined` for missing values and align tests/docs. (1e84580, #1966)\r\n- **mysql:** return `undefined` instead of `null`, guard `getMany`, and align tests/docs. (d76926b, #1969)\r\n\r\n### Documentation\r\n- **keyv:** fix README API accuracy and strengthen the code/test review. (685bc77, #1979)\r\n- **keyv:** add a jsDelivr badge to the README. (418ce7a, #1963)\r\n\r\n### Internal\r\n- **dynamo:** code clean up and minor fixes. (9048a87, #1970)\r\n- **etcd:** code clean up and documentation. (aed5638, #1972)\r\n- **postgres:** code/test review for `@keyv/postgres`. (9fa6847, #1971)\r\n- **redis:** full code and test review cleanup. (480a560, #1974)\r\n- **memcache:** add an error handler. (394e254, #1973)\r\n- **memcache:** uniform test suite, fix namespace docs, validate API. (95612fc, #1967)\r\n- **mongo:** uniform test suite, fix README API docs. (0240400, #1968)\r\n- **mongo:** documentation and fixes (includes #1980 review follow-ups). (f31850d, #1976)\r\n- **sqlite:** full code and test review cleanup. (8539cfd, #1975)\r\n- **valkey:** full code and test review. (e8a3ffa, #1978)\r\n\r\n### Contributors\r\n- @jaredwray (18)\r\n\r\n### Full List of Changes\r\n- feat: adding in jsDelivr badge for Keyv by @jaredwray in #1963\r\n- etcd - fix: support grpc-gateway v2 error format for etcd 3.6 compatibility by @jaredwray in #1964\r\n- dynamo - fix: strip namespace prefix in iterator and align tests/docs by @jaredwray in #1965\r\n- etcd - fix: return undefined for missing values and align tests/docs by @jaredwray in #1966\r\n- memcache - test: uniform test suite, fix namespace docs, validate API by @jaredwray in #1967\r\n- mongo - test: uniform test suite, fix README API docs by @jaredwray in #1968\r\n- mysql - fix: return undefined not null, guard getMany, and align tests/docs by @jaredwray in #1969\r\n- dynamo - chore: code clean up and minor fixes by @jaredwray in #1970\r\n- etcd - chore: code clean up and documentation by @jaredwray in #1972\r\n- postgres - refactor: code/test review for @keyv/postgres by @jaredwray in #1971\r\n- redis - chore: full code and test review cleanup by @jaredwray in #1974\r\n- memcache - chore: adding in error handler by @jaredwray in #1973\r\n- sqlite - refactor: full code and test review cleanup by @jaredwray in #1975\r\n- keyv - docs: fix README API accuracy and strengthen code/test review by @jaredwray in #1979\r\n- valkey - refactor: full code and test review by @jaredwray in #1978\r\n- bigmap - feat: wire up hookified events and complete code/test review by @jaredwray in #1977\r\n- mongo - chore: documentation and fixes by @jaredwray in #1976\r\n- keyv (breaking) - storage adapters now only use expires instead of ttl by @jaredwray in #1981\r\n\r\n**Full diff:** [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-beta.3...v6.0.0-beta.4",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-beta-3",
      "title": "v6.0.0-beta.3",
      "url": "https://keyv.org/changelog/v6-0-0-beta-3/",
      "date_published": "2026-06-11",
      "date_modified": "2026-06-11",
      "summary": "<p>This release rolls up the entire v6 beta cycle — everything merged since <code>v6.0.0-alpha.3</code>. v6 is a major, ground-up modernization of Keyv: a leaner core, a new raw-data API, first-class capability detection, telemetry, two new encryption packages, a dependency-free etcd adapter, and a wave of breaking dependency upgrades across the monorepo.</p>\n<blockquote>\n<p><strong>Heads up:</strong> v6 contains a number of breaking changes vs. v5. If you are upgrading from v5, read the v5 → v6 migration guide alongside these...</p>\n</blockquote>",
      "content_html": "<h1 id=\"keyv-v600-beta3\">Keyv v6.0.0-beta.3</h1>\n<p>This release rolls up the entire v6 beta cycle — everything merged since <code>v6.0.0-alpha.3</code>. v6 is a major, ground-up modernization of Keyv: a leaner core, a new raw-data API, first-class capability detection, telemetry, two new encryption packages, a dependency-free etcd adapter, and a wave of breaking dependency upgrades across the monorepo.</p>\n<blockquote>\n<p><strong>Heads up:</strong> v6 contains a number of breaking changes vs. v5. If you are upgrading from v5, read the <a href=\"https://github.com/jaredwray/keyv/blob/main/website/site/docs/migration.md\">v5 → v6 migration guide</a> alongside these notes.</p>\n</blockquote>\n<hr>\n<h2 id=\"highlights\">Highlights</h2>\n<ul>\n<li>🔐 <strong>Two new encryption packages</strong> — <code>@keyv/encrypt-node</code> (Node.js <code>crypto</code>) and <code>@keyv/encrypt-web</code> (Web Crypto API), with a shared wire format so they're cross-compatible.</li>\n<li>🧩 <strong>Raw data API</strong> — <code>getRaw</code> / <code>getManyRaw</code> / <code>setRaw</code> / <code>setManyRaw</code> for working directly with the stored <code>{ value, expires }</code> envelope.</li>\n<li>🔎 <strong>Capability detection</strong> — <code>detectKeyv</code>, <code>detectKeyvStorage</code>, <code>detectKeyvCompression</code>, <code>detectKeyvSerialization</code>, <code>detectKeyvEncryption</code> helpers.</li>\n<li>📊 <strong>Stats / telemetry overhaul</strong> — aggregate counters plus LRU-bounded per-key frequency maps.</li>\n<li>🧼 <strong>Key sanitization</strong> — opt-in protection against SQL/Mongo/path-traversal/control-character injection in keys and namespaces.</li>\n<li>🪝 <strong>Hookified everywhere</strong> — unified events + pre/post hooks across the core and every adapter, now including <code>setMany</code>, <code>deleteMany</code>, <code>clear</code>, and <code>disconnect</code>.</li>\n<li>🌐 <strong>Dependency-free etcd adapter</strong> — talks to etcd v3 over its HTTP/JSON gateway via an in-house client (no <code>etcd3</code>).</li>\n<li>⚙️ <strong>Optional serialization</strong> and <strong>no key-prefixing in core</strong> for a smaller, faster default path.</li>\n<li>🏗️ <strong>Build &#x26; toolchain modernization</strong> — moved to <code>tsdown</code>, TypeScript 6, and a refreshed release pipeline (OIDC publishing).</li>\n<li>📦 <strong>Major dependency upgrades</strong> across Redis, MongoDB, MySQL, Postgres, DynamoDB, msgpackr, hookified, hashery, and more.</li>\n</ul>\n<hr>\n<h2 id=\"️-breaking-changes\">⚠️ Breaking Changes</h2>\n<h3 id=\"core\">Core</h3>\n<ul>\n<li><strong><code>StoredData</code> and <code>StoredDataRaw</code> types removed.</strong> Use the <code>KeyvValue&#x3C;T></code> envelope (<code>{ value, expires? }</code>) and the new raw API instead. (#1929)</li>\n<li><strong>Keys are no longer prefixed in core.</strong> Namespacing/prefixing is now handled by the storage adapters that need it, not the core. (#1899)</li>\n<li><strong><code>get</code> no longer checks expiry by default.</strong> Expiration is evaluated lazily/where appropriate to keep the hot path fast; expired entries still resolve to <code>undefined</code> through the normal read paths. To re-enable core-level expiry checks, set the <code>checkExpired: true</code> option. (#1923)</li>\n<li><strong>Moved to <a href=\"https://github.com/jaredwray/hookified\">Hookified</a> for events + hooks.</strong> Replaces the old <code>EventEmitter</code> base across core and adapters. (#1900)</li>\n<li><strong><code>.set()</code> now returns a boolean</strong> instead of the instance. (#1904)</li>\n<li><strong>Iterator API simplified</strong> and various method signatures cleaned up. (#1902)</li>\n<li><strong><code>setRaw</code> / <code>setManyRaw</code> no longer take a <code>ttl</code> argument</strong> — set <code>expires</code> on the value envelope instead. (#1905)</li>\n<li><strong><code>opts</code> removed from <code>KeyvStorageAdapter</code></strong> and the <code>opts</code> property removed from the <code>Keyv</code> class. (#1906)</li>\n</ul>\n<h3 id=\"adapters--tooling-dependency-bumps-that-change-minimums\">Adapters &#x26; tooling (dependency bumps that change minimums)</h3>\n<ul>\n<li><strong><code>@redis/client</code> upgraded to v6</strong> (breaking). (#1954)</li>\n<li><strong>hookified upgraded to v3</strong> (breaking) across the monorepo. (#1957)</li>\n<li><strong>hashery upgraded to v2</strong> in BigMap (breaking). (#1956)</li>\n<li><strong>msgpackr upgraded to v2</strong> in <code>@keyv/serialize-msgpackr</code> (breaking). (#1958)</li>\n<li><strong>bignumber.js upgraded to v11</strong> in the test-suite (breaking). (#1955)</li>\n<li><strong>docula upgraded to v2</strong> for the website (breaking). (#1947)</li>\n<li><strong>Code-quality deps, GitHub Actions, and build tooling</strong> upgraded (some breaking minimum versions). (#1944, #1946, #1945)</li>\n<li><strong>TypeScript 6</strong> is now used to build the monorepo. (#1933)</li>\n<li><strong>test-suite v6 overhaul</strong> — compliance tests rewritten for the v6 API. If you maintain a third-party adapter against <code>@keyv/test-suite</code>, expect changes. (#1931)</li>\n</ul>\n<hr>\n<h2 id=\"-new-encryption-packages\">🔐 New: Encryption Packages</h2>\n<p>Two new adapters let you encrypt values transparently. They share a wire format, so data written by one can be read by the other (same key + algorithm).</p>\n<h3 id=\"keyvencrypt-node--nodejs-crypto\"><code>@keyv/encrypt-node</code> — Node.js <code>crypto</code></h3>\n<p>Supports AES-GCM (default), AES-CCM, ChaCha20-Poly1305, AES-CBC, and any cipher available in your Node install. (#1927)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">KeyvEncryptNode</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'@keyv/encrypt-node'</span>;\r\n\r\n<span class=\"hljs-keyword\">const</span> encryption = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">KeyvEncryptNode</span>({ <span class=\"hljs-attr\">key</span>: <span class=\"hljs-string\">'your-secret-key'</span> });\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ encryption });\r\n\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">set</span>(<span class=\"hljs-string\">'foo'</span>, <span class=\"hljs-string\">'bar'</span>);\r\n<span class=\"hljs-keyword\">const</span> value = <span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'foo'</span>); <span class=\"hljs-comment\">// 'bar' (decrypted automatically)</span>\n</code></pre>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-comment\">// Pick an algorithm and output encoding</span>\r\n<span class=\"hljs-keyword\">const</span> encryption = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">KeyvEncryptNode</span>({\r\n  <span class=\"hljs-attr\">key</span>: <span class=\"hljs-string\">'your-secret-key'</span>,\r\n  <span class=\"hljs-attr\">algorithm</span>: <span class=\"hljs-string\">'chacha20-poly1305'</span>,\r\n  <span class=\"hljs-attr\">encoding</span>: <span class=\"hljs-string\">'hex'</span>,\r\n});\n</code></pre>\n<h3 id=\"keyvencrypt-web--web-crypto-api\"><code>@keyv/encrypt-web</code> — Web Crypto API</h3>\n<p>Works in browsers, Deno, Cloudflare Workers, and Node.js 18+ with no Node-specific dependencies. Supports AES-GCM (recommended) and AES-CBC. (#1928)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">KeyvEncryptWeb</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'@keyv/encrypt-web'</span>;\r\n\r\n<span class=\"hljs-keyword\">const</span> encryption = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">KeyvEncryptWeb</span>({ <span class=\"hljs-attr\">key</span>: <span class=\"hljs-string\">'your-secret-key'</span> });\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ encryption });\r\n\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">set</span>(<span class=\"hljs-string\">'foo'</span>, <span class=\"hljs-string\">'bar'</span>);\r\n<span class=\"hljs-keyword\">const</span> value = <span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'foo'</span>); <span class=\"hljs-comment\">// 'bar'</span>\n</code></pre>\n<p><strong>Cross-compatibility wire format</strong> (same for both packages):</p>\n<ul>\n<li><strong>AES-GCM:</strong> <code>base64([IV (12 bytes) || AuthTag (16 bytes) || Ciphertext])</code></li>\n<li><strong>AES-CBC:</strong> <code>base64([IV (16 bytes) || Ciphertext])</code></li>\n</ul>\n<hr>\n<h2 id=\"-core-raw-data-api\">🧩 Core: Raw Data API</h2>\n<p>Work directly with the stored envelope (<code>{ value, expires? }</code>) — useful for replication, cache warming, and moving data between stores. (#1897, #1929)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>();\r\n\r\n<span class=\"hljs-comment\">// Write a raw envelope with an absolute expiry timestamp</span>\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">setRaw</span>(<span class=\"hljs-string\">'foo'</span>, { <span class=\"hljs-attr\">value</span>: <span class=\"hljs-string\">'bar'</span>, <span class=\"hljs-attr\">expires</span>: <span class=\"hljs-title class_\">Date</span>.<span class=\"hljs-title function_\">now</span>() + <span class=\"hljs-number\">60_000</span> });\r\n\r\n<span class=\"hljs-comment\">// No expiry</span>\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">setRaw</span>(<span class=\"hljs-string\">'foo'</span>, { <span class=\"hljs-attr\">value</span>: <span class=\"hljs-string\">'bar'</span> });\r\n\r\n<span class=\"hljs-comment\">// Read the raw envelope back</span>\r\n<span class=\"hljs-keyword\">const</span> raw = <span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">getRaw</span>(<span class=\"hljs-string\">'foo'</span>); <span class=\"hljs-comment\">// { value: 'bar', expires: 1234567890 }</span>\r\n\r\n<span class=\"hljs-comment\">// Copy between instances without unwrapping/rewrapping</span>\r\n<span class=\"hljs-keyword\">if</span> (raw) {\r\n  <span class=\"hljs-keyword\">await</span> other.<span class=\"hljs-title function_\">setRaw</span>(<span class=\"hljs-string\">'foo'</span>, raw);\r\n}\r\n\r\n<span class=\"hljs-comment\">// Batch variants</span>\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">setManyRaw</span>([\r\n  { <span class=\"hljs-attr\">key</span>: <span class=\"hljs-string\">'a'</span>, <span class=\"hljs-attr\">value</span>: { <span class=\"hljs-attr\">value</span>: <span class=\"hljs-number\">1</span> } },\r\n  { <span class=\"hljs-attr\">key</span>: <span class=\"hljs-string\">'b'</span>, <span class=\"hljs-attr\">value</span>: { <span class=\"hljs-attr\">value</span>: <span class=\"hljs-number\">2</span>, <span class=\"hljs-attr\">expires</span>: <span class=\"hljs-title class_\">Date</span>.<span class=\"hljs-title function_\">now</span>() + <span class=\"hljs-number\">60_000</span> } },\r\n]);\r\n<span class=\"hljs-keyword\">const</span> many = <span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">getManyRaw</span>([<span class=\"hljs-string\">'a'</span>, <span class=\"hljs-string\">'b'</span>]);\n</code></pre>\n<blockquote>\n<p>The store-level TTL is derived automatically from <code>value.expires</code>, so you no longer pass a separate <code>ttl</code> to the raw setters.</p>\n</blockquote>\n<hr>\n<h2 id=\"-core-capability-detection\">🔎 Core: Capability Detection</h2>\n<p>New helpers report exactly which parts of an interface an object implements. Each returns a <code>compatible</code> flag — <code>true</code> only when the full interface is satisfied — plus a <code>methods</code> map describing whether each method <code>exists</code> and its <code>methodType</code> (<code>\"sync\"</code> / <code>\"async\"</code> / <code>\"none\"</code>). (#1909, #1930)</p>\n<pre><code class=\"hljs language-ts\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span>, {\r\n  detectKeyv,\r\n  detectKeyvStorage,\r\n  detectKeyvCompression,\r\n  detectKeyvSerialization,\r\n  detectKeyvEncryption,\r\n} <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n\r\n<span class=\"hljs-title function_\">detectKeyv</span>(<span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>()).<span class=\"hljs-property\">compatible</span>; <span class=\"hljs-comment\">// true (only when ALL capabilities are present)</span>\r\n<span class=\"hljs-title function_\">detectKeyv</span>(<span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Map</span>()).<span class=\"hljs-property\">compatible</span>;  <span class=\"hljs-comment\">// false — but methods.get.exists is still true</span>\r\n\r\n<span class=\"hljs-comment\">// Storage detection reports the detected store type plus sync/async per method</span>\r\n<span class=\"hljs-keyword\">const</span> r = <span class=\"hljs-title function_\">detectKeyvStorage</span>(<span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Map</span>());\r\nr.<span class=\"hljs-property\">compatible</span>;             <span class=\"hljs-comment\">// true</span>\r\nr.<span class=\"hljs-property\">store</span>;                  <span class=\"hljs-comment\">// \"mapLike\"  (\"keyvStorage\" | \"mapLike\" | \"asyncMap\" | \"none\")</span>\r\nr.<span class=\"hljs-property\">methods</span>.<span class=\"hljs-property\">get</span>.<span class=\"hljs-property\">methodType</span>; <span class=\"hljs-comment\">// \"sync\"</span>\r\n\r\n<span class=\"hljs-title function_\">detectKeyvSerialization</span>(<span class=\"hljs-title class_\">JSON</span>).<span class=\"hljs-property\">compatible</span>;                                    <span class=\"hljs-comment\">// true</span>\r\n<span class=\"hljs-title function_\">detectKeyvCompression</span>({ <span class=\"hljs-attr\">compress</span>: <span class=\"hljs-function\"><span class=\"hljs-params\">d</span> =></span> d, <span class=\"hljs-attr\">decompress</span>: <span class=\"hljs-function\"><span class=\"hljs-params\">d</span> =></span> d }).<span class=\"hljs-property\">compatible</span>;  <span class=\"hljs-comment\">// true</span>\r\n<span class=\"hljs-title function_\">detectKeyvEncryption</span>({ <span class=\"hljs-attr\">encrypt</span>: <span class=\"hljs-function\"><span class=\"hljs-params\">d</span> =></span> d, <span class=\"hljs-attr\">decrypt</span>: <span class=\"hljs-function\"><span class=\"hljs-params\">d</span> =></span> d }).<span class=\"hljs-property\">compatible</span>;       <span class=\"hljs-comment\">// true</span>\n</code></pre>\n<hr>\n<h2 id=\"-core-stats--telemetry\">📊 Core: Stats / Telemetry</h2>\n<p>Opt-in statistics with aggregate counters and LRU-bounded per-key frequency maps. (#1912)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ <span class=\"hljs-attr\">stats</span>: <span class=\"hljs-literal\">true</span> });\r\n\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">set</span>(<span class=\"hljs-string\">'foo'</span>, <span class=\"hljs-string\">'bar'</span>);\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'foo'</span>);          <span class=\"hljs-comment\">// hit</span>\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'nonexistent'</span>);  <span class=\"hljs-comment\">// miss</span>\r\n<span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">delete</span>(<span class=\"hljs-string\">'foo'</span>);\r\n\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">hits</span>;    <span class=\"hljs-comment\">// 1</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">misses</span>;  <span class=\"hljs-comment\">// 1</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">sets</span>;    <span class=\"hljs-comment\">// 1</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">deletes</span>; <span class=\"hljs-comment\">// 1</span>\r\n\r\n<span class=\"hljs-comment\">// Per-key frequency (each map capped at maxEntries, default 1000)</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">hitKeys</span>.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'foo'</span>);           <span class=\"hljs-comment\">// 1</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">missKeys</span>.<span class=\"hljs-title function_\">get</span>(<span class=\"hljs-string\">'nonexistent'</span>);  <span class=\"hljs-comment\">// 1</span>\r\n\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-title function_\">reset</span>();          <span class=\"hljs-comment\">// clears counters and maps</span>\r\nkeyv.<span class=\"hljs-property\">stats</span>.<span class=\"hljs-property\">enabled</span> = <span class=\"hljs-literal\">false</span>;  <span class=\"hljs-comment\">// disable at runtime (auto-unsubscribes)</span>\n</code></pre>\n<hr>\n<h2 id=\"-core-key-sanitization\">🧼 Core: Key Sanitization</h2>\n<p>Opt-in detection that strips dangerous <em>patterns</em> (not harmless characters) from keys and namespaces — guarding against SQL injection, MongoDB operator injection, path traversal, and control-character/CRLF attacks. Results are LRU-cached for speed.</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ <span class=\"hljs-attr\">sanitize</span>: <span class=\"hljs-literal\">true</span> });\r\n<span class=\"hljs-comment\">// or fine-grained:</span>\r\n<span class=\"hljs-keyword\">const</span> keyv2 = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ <span class=\"hljs-attr\">sanitize</span>: { <span class=\"hljs-attr\">sql</span>: <span class=\"hljs-literal\">true</span>, <span class=\"hljs-attr\">mongo</span>: <span class=\"hljs-literal\">true</span>, <span class=\"hljs-attr\">path</span>: <span class=\"hljs-literal\">true</span>, <span class=\"hljs-attr\">escape</span>: <span class=\"hljs-literal\">true</span> } });\n</code></pre>\n<p>Applied to every key-accepting method (<code>get</code>, <code>set</code>, <code>delete</code>, <code>has</code>, the <code>*Many</code> variants, and the raw variants), plus namespaces at construction and on the <code>namespace</code> setter.</p>\n<hr>\n<h2 id=\"-core-events-hooks--error-handling\">🪝 Core: Events, Hooks &#x26; Error Handling</h2>\n<ul>\n<li>\n<p><strong>Hooks for more operations</strong> — added pre/post hooks for <code>setMany</code>, <code>deleteMany</code>, <code>clear</code>, and <code>disconnect</code>, in addition to the existing single-key hooks. (#1918, #1924)</p>\n</li>\n<li>\n<p><strong><code>throwOnErrors</code></strong> — make operations throw instead of emitting <code>'error'</code>, so you can <code>try/catch</code> (great with <code>@keyv/redis</code> connection handling). (#1910)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">Keyv</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'keyv'</span>;\r\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-title class_\">KeyvRedis</span> <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">'@keyv/redis'</span>;\r\n\r\n<span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ <span class=\"hljs-attr\">store</span>: <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">KeyvRedis</span>(<span class=\"hljs-string\">'redis://localhost:6379'</span>), <span class=\"hljs-attr\">throwOnErrors</span>: <span class=\"hljs-literal\">true</span> });\r\n<span class=\"hljs-keyword\">try</span> {\r\n  <span class=\"hljs-keyword\">await</span> keyv.<span class=\"hljs-title function_\">set</span>(<span class=\"hljs-string\">'foo'</span>, <span class=\"hljs-string\">'bar'</span>);\r\n} <span class=\"hljs-keyword\">catch</span> (error) {\r\n  <span class=\"hljs-comment\">// handle connection/timeout errors yourself</span>\r\n}\n</code></pre>\n</li>\n<li>\n<p><strong>Key prefixing moved to adapters.</strong> Prefixing/namespacing is now handled by the storage adapters that need it rather than the core. (#1899)</p>\n</li>\n<li>\n<p><strong>Encode/decode now propagate errors</strong> instead of swallowing them, and several stats/telemetry edge cases were fixed (no <code>STAT_SET</code> on empty set, <code>setRaw</code> telemetry, <code>getManyRaw</code> dead code). (#1922, #1920, #1921, #1919)</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"️-core-optional-serialization\">⚙️ Core: Optional Serialization</h2>\n<p>Serialization is now optional. Disable it to store raw objects (ideal for the default in-memory <code>Map</code>, where string conversion isn't needed). (#1898)</p>\n<pre><code class=\"hljs language-js\"><span class=\"hljs-keyword\">const</span> keyv = <span class=\"hljs-keyword\">new</span> <span class=\"hljs-title class_\">Keyv</span>({ <span class=\"hljs-attr\">serialization</span>: <span class=\"hljs-literal\">false</span> });\n</code></pre>\n<p>Pipeline ordering when serialization/compression are configured:</p>\n<ul>\n<li><strong>On set:</strong> serialize (optional) → compress (optional) → store</li>\n<li><strong>On get:</strong> store → decompress (optional) → parse (optional) → value</li>\n</ul>\n<p>If compression is configured without a serializer, Keyv falls back to <code>JSON.stringify</code>/<code>JSON.parse</code> since compression needs string input.</p>\n<hr>\n<h2 id=\"-storage-adapters\">🌐 Storage Adapters</h2>\n<ul>\n<li><strong>etcd: dependency-free client.</strong> <code>@keyv/etcd</code> now talks to etcd v3 directly over its HTTP/JSON gateway via a small in-house client — the <code>etcd3</code> dependency is gone. Requires etcd v3+ and Node.js 20+ (uses global <code>fetch</code> / <code>AbortSignal.timeout</code>). TTL via etcd leases, namespace isolation, async iterator, and <code>setMany</code>/<code>getMany</code>/<code>deleteMany</code>/<code>hasMany</code> are all supported. (#1936, #1893)</li>\n<li><strong>DynamoDB:</strong> added <code>disconnect()</code> and <code>iterator()</code>; moved to v6 requirements with namespace support; TTL now stored in milliseconds; internal <code>isExpired</code> rename. AWS SDK dependencies upgraded. (#1914, #1894, #1934, #1935, #1948)</li>\n<li><strong>Compression adapters</strong> moved to the <code>KeyvCompressionAdapter</code> standard. (#1901)</li>\n<li><strong>BigMap:</strong> optimized hash function and hot-path performance. (#1915)</li>\n<li><strong>Adapter dependency upgrades:</strong> MongoDB (#1951), MySQL/mysql2 (#1952), Postgres/pg (#1953), memcache (#1950).</li>\n</ul>\n<hr>\n<h2 id=\"️-build-tooling--release\">🏗️ Build, Tooling &#x26; Release</h2>\n<ul>\n<li>Moved the monorepo build to <strong><code>tsdown</code></strong>. (#1926)</li>\n<li>Upgraded to <strong>TypeScript 6</strong>. (#1933)</li>\n<li>New <strong>release management with OIDC</strong> and multi-version publishing, plus a hardened release pipeline. (#1942)</li>\n<li><strong>test-suite:</strong> v6 compliance overhaul, and TTL tests can now specify milliseconds or seconds. (#1931, #1949)</li>\n<li><strong>Stability:</strong> hardened service-backed test suites against timing flakes. (#1960)</li>\n<li><strong>Docs/links:</strong> fixed <code>main</code>-vs-<code>master</code> links and broken logo links in package READMEs. (#1939, #1943)</li>\n</ul>\n<hr>\n<h2 id=\"-notable-dependency-upgrades\">📦 Notable Dependency Upgrades</h2>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Package</th><th>Change</th><th>PR</th></tr></thead><tbody><tr><td><code>@redis/client</code></td><td>→ v6 (breaking)</td><td>#1954</td></tr><tr><td><code>hookified</code></td><td>→ v3 (breaking)</td><td>#1957</td></tr><tr><td><code>hashery</code> (BigMap)</td><td>→ v2 (breaking)</td><td>#1956</td></tr><tr><td><code>msgpackr</code> (serialize)</td><td>→ v2 (breaking)</td><td>#1958</td></tr><tr><td><code>bignumber.js</code> (test-suite)</td><td>→ v11 (breaking)</td><td>#1955</td></tr><tr><td><code>docula</code> (website)</td><td>→ v2 (breaking)</td><td>#1947</td></tr><tr><td><code>mongodb</code></td><td>upgraded</td><td>#1951</td></tr><tr><td><code>mysql2</code></td><td>upgraded</td><td>#1952</td></tr><tr><td><code>pg</code></td><td>upgraded</td><td>#1953</td></tr><tr><td>AWS SDK (dynamo)</td><td>upgraded</td><td>#1948</td></tr><tr><td>memcache</td><td>upgraded</td><td>#1950</td></tr><tr><td>TypeScript</td><td>→ v6</td><td>#1933</td></tr><tr><td>GitHub Actions</td><td>upgraded (breaking)</td><td>#1946</td></tr></tbody></table>\n<hr>\n<h2 id=\"full-changelog-by-release\">Full Changelog by Release</h2>\n<h3 id=\"since-v600-beta1\">Since <code>v6.0.0-beta.1</code></h3>\n<ul>\n<li><code>mono</code> - test: harden service-backed suites against timing flakes (#1960)</li>\n<li><code>serialize-msgpackr</code> - chore: upgrade msgpackr to v2 (breaking) (#1958)</li>\n<li><code>mono</code> - chore: upgrade hookified to v3 (breaking) (#1957)</li>\n<li><code>bigmap</code> - chore: upgrade hashery to v2 (breaking) (#1956)</li>\n<li><code>test-suite</code> - chore: upgrade bignumber.js to v11 (breaking) (#1955)</li>\n<li><code>redis</code> - chore: upgrade @redis/client to v6 (breaking) (#1954)</li>\n<li><code>postgres</code> - chore: upgrade pg (#1953)</li>\n<li><code>mysql</code> - chore: upgrade mysql2 (#1952)</li>\n<li><code>mongo</code> - chore: upgrade mongodb (#1951)</li>\n<li><code>memcache</code> - chore: upgrade memcache (#1950)</li>\n<li><code>dynamo</code> - chore: upgrade AWS SDK dependencies (#1948)</li>\n<li><code>test-suite</code> - feat: allow storage TTL tests to specify milliseconds or seconds (#1949)</li>\n<li><code>website</code> - chore: upgrade docula to v2 (breaking) (#1947)</li>\n<li><code>mono</code> - chore: upgrade GitHub Actions (breaking) (#1946)</li>\n<li><code>mono</code> - chore: upgrade TypeScript and build tooling (#1945)</li>\n<li><code>mono</code> - chore: upgrade code quality dependencies (breaking) (#1944)</li>\n<li><code>mono</code> - docs: fix broken keyv logo link in package READMEs (#1943)</li>\n<li><code>feat</code>: release management with OIDC and multi versions (#1942)</li>\n<li><code>keyv</code> - fix: <code>main</code> branch used instead of <code>master</code> for links (#1939)</li>\n<li><code>etcd</code> - feat: replace etcd3 dependency with built-in HTTP/JSON client (#1936)</li>\n<li><code>dynamo</code> - fix: renaming internal isExpired (#1935)</li>\n<li><code>dynamo</code> - fix: storing ttl in ms now also (#1934)</li>\n<li><code>mono</code> - chore: upgrading to TypeScript 6 (#1933)</li>\n</ul>\n<h3 id=\"v600-beta1\"><code>v6.0.0-beta.1</code></h3>\n<ul>\n<li><code>keyv</code> - feat (breaking) stats / telemetry overhaul (#1912)</li>\n<li><code>keyv</code> - feat: (breaking) memory adapter, bridge adapter, keyv overhaul (#1913)</li>\n<li><code>bigmap</code> - feat: optimize BigMap hash function and hot path performance (#1915)</li>\n<li><code>dynamo</code> - feat: add disconnect and iterator methods to KeyvDynamo (#1914)</li>\n<li><code>keyv</code> - fix: handling has and hasMany better (#1916)</li>\n<li><code>keyv</code> - fix: adding in decode expiring to has (#1917)</li>\n<li><code>keyv</code> - feat: adding hooks for setMany and deleteMany (#1918)</li>\n<li><code>keyv</code> - fix: dead code on getManyRaw (#1919)</li>\n<li><code>keyv</code> - fix: on set with no result do not send telemetry STAT_SET (#1920)</li>\n<li><code>keyv</code> - fix: telemetry issue on setRaw (#1921)</li>\n<li><code>keyv</code> - fix: having encode / decode propagate errors (#1922)</li>\n<li><code>keyv</code> - feat: (breaking) by default keyv no longer checks expires (#1923)</li>\n<li><code>keyv</code> - feat: adding in hooks for clear and disconnect (#1924)</li>\n<li><code>keyv</code> - fix: minor bug fixes on memory, ttl, etc (#1925)</li>\n<li><code>mono</code> - feat: moving to tsdown for build (#1926)</li>\n<li><code>encryption-node</code> - feat: add Node.js encryption adapter for Keyv (#1927)</li>\n<li><code>encrypt-web</code> - feat: adding new web crypto module (#1928)</li>\n<li><code>keyv</code> - feat: (breaking) removing StoredData and StoredDataRaw types (#1929)</li>\n<li><code>keyv</code> - feat: enhancing capabilities (#1930)</li>\n<li><code>test-suite</code> - feat (breaking) overhaul based on v6 changes (#1931)</li>\n</ul>\n<h3 id=\"v600-alpha4\"><code>v6.0.0-alpha.4</code></h3>\n<ul>\n<li><code>keyv</code> - feat: (breaking) moving to Hookified (#1900)</li>\n<li><code>compression</code> - feat: moving to KeyvCompressionAdapter standard (#1901)</li>\n<li><code>keyv</code> - feat: (breaking) api changes and iterator simplification (#1902)</li>\n<li><code>keyv</code> - feat: moving storage setMany to use KeyvEntry (#1903)</li>\n<li><code>keyv</code> - feat: (breaking) moving to boolean return on set (#1904)</li>\n<li><code>keyv</code> - fix: (breaking) setRaw and setMany raw do not need ttl param (#1905)</li>\n<li><code>keyv</code> - feat: (breaking) removing opts from KeyvStorageAdapter (#1906)</li>\n<li><code>keyv</code> - feat: browser compatibility (#1907)</li>\n<li><code>keyv</code> - fix: updating checks for browser tests (#1908)</li>\n<li><code>feat</code>: updating capability helper functions (#1909)</li>\n<li><code>keyv</code> - feat: clean up of code with fixes and helpers (#1910)</li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-alpha.3...v6.0.0-beta.3</p>",
      "content_text": "# Keyv v6.0.0-beta.3\r\n\r\nThis release rolls up the entire v6 beta cycle — everything merged since `v6.0.0-alpha.3`. v6 is a major, ground-up modernization of Keyv: a leaner core, a new raw-data API, first-class capability detection, telemetry, two new encryption packages, a dependency-free etcd adapter, and a wave of breaking dependency upgrades across the monorepo.\r\n\r\n> **Heads up:** v6 contains a number of breaking changes vs. v5. If you are upgrading from v5, read the [v5 → v6 migration guide](https://github.com/jaredwray/keyv/blob/main/website/site/docs/migration.md) alongside these notes.\r\n\r\n---\r\n\r\n## Highlights\r\n\r\n- 🔐 **Two new encryption packages** — `@keyv/encrypt-node` (Node.js `crypto`) and `@keyv/encrypt-web` (Web Crypto API), with a shared wire format so they're cross-compatible.\r\n- 🧩 **Raw data API** — `getRaw` / `getManyRaw` / `setRaw` / `setManyRaw` for working directly with the stored `{ value, expires }` envelope.\r\n- 🔎 **Capability detection** — `detectKeyv`, `detectKeyvStorage`, `detectKeyvCompression`, `detectKeyvSerialization`, `detectKeyvEncryption` helpers.\r\n- 📊 **Stats / telemetry overhaul** — aggregate counters plus LRU-bounded per-key frequency maps.\r\n- 🧼 **Key sanitization** — opt-in protection against SQL/Mongo/path-traversal/control-character injection in keys and namespaces.\r\n- 🪝 **Hookified everywhere** — unified events + pre/post hooks across the core and every adapter, now including `setMany`, `deleteMany`, `clear`, and `disconnect`.\r\n- 🌐 **Dependency-free etcd adapter** — talks to etcd v3 over its HTTP/JSON gateway via an in-house client (no `etcd3`).\r\n- ⚙️ **Optional serialization** and **no key-prefixing in core** for a smaller, faster default path.\r\n- 🏗️ **Build & toolchain modernization** — moved to `tsdown`, TypeScript 6, and a refreshed release pipeline (OIDC publishing).\r\n- 📦 **Major dependency upgrades** across Redis, MongoDB, MySQL, Postgres, DynamoDB, msgpackr, hookified, hashery, and more.\r\n\r\n---\r\n\r\n## ⚠️ Breaking Changes\r\n\r\n### Core\r\n\r\n- **`StoredData` and `StoredDataRaw` types removed.** Use the `KeyvValue<T>` envelope (`{ value, expires? }`) and the new raw API instead. (#1929)\r\n- **Keys are no longer prefixed in core.** Namespacing/prefixing is now handled by the storage adapters that need it, not the core. (#1899)\r\n- **`get` no longer checks expiry by default.** Expiration is evaluated lazily/where appropriate to keep the hot path fast; expired entries still resolve to `undefined` through the normal read paths. To re-enable core-level expiry checks, set the `checkExpired: true` option. (#1923)\r\n- **Moved to [Hookified](https://github.com/jaredwray/hookified) for events + hooks.** Replaces the old `EventEmitter` base across core and adapters. (#1900)\r\n- **`.set()` now returns a boolean** instead of the instance. (#1904)\r\n- **Iterator API simplified** and various method signatures cleaned up. (#1902)\r\n- **`setRaw` / `setManyRaw` no longer take a `ttl` argument** — set `expires` on the value envelope instead. (#1905)\r\n- **`opts` removed from `KeyvStorageAdapter`** and the `opts` property removed from the `Keyv` class. (#1906)\r\n\r\n### Adapters & tooling (dependency bumps that change minimums)\r\n\r\n- **`@redis/client` upgraded to v6** (breaking). (#1954)\r\n- **hookified upgraded to v3** (breaking) across the monorepo. (#1957)\r\n- **hashery upgraded to v2** in BigMap (breaking). (#1956)\r\n- **msgpackr upgraded to v2** in `@keyv/serialize-msgpackr` (breaking). (#1958)\r\n- **bignumber.js upgraded to v11** in the test-suite (breaking). (#1955)\r\n- **docula upgraded to v2** for the website (breaking). (#1947)\r\n- **Code-quality deps, GitHub Actions, and build tooling** upgraded (some breaking minimum versions). (#1944, #1946, #1945)\r\n- **TypeScript 6** is now used to build the monorepo. (#1933)\r\n- **test-suite v6 overhaul** — compliance tests rewritten for the v6 API. If you maintain a third-party adapter against `@keyv/test-suite`, expect changes. (#1931)\r\n\r\n---\r\n\r\n## 🔐 New: Encryption Packages\r\n\r\nTwo new adapters let you encrypt values transparently. They share a wire format, so data written by one can be read by the other (same key + algorithm).\r\n\r\n### `@keyv/encrypt-node` — Node.js `crypto`\r\n\r\nSupports AES-GCM (default), AES-CCM, ChaCha20-Poly1305, AES-CBC, and any cipher available in your Node install. (#1927)\r\n\r\n```js\r\nimport Keyv from 'keyv';\r\nimport KeyvEncryptNode from '@keyv/encrypt-node';\r\n\r\nconst encryption = new KeyvEncryptNode({ key: 'your-secret-key' });\r\nconst keyv = new Keyv({ encryption });\r\n\r\nawait keyv.set('foo', 'bar');\r\nconst value = await keyv.get('foo'); // 'bar' (decrypted automatically)\r\n```\r\n\r\n```js\r\n// Pick an algorithm and output encoding\r\nconst encryption = new KeyvEncryptNode({\r\n  key: 'your-secret-key',\r\n  algorithm: 'chacha20-poly1305',\r\n  encoding: 'hex',\r\n});\r\n```\r\n\r\n### `@keyv/encrypt-web` — Web Crypto API\r\n\r\nWorks in browsers, Deno, Cloudflare Workers, and Node.js 18+ with no Node-specific dependencies. Supports AES-GCM (recommended) and AES-CBC. (#1928)\r\n\r\n```js\r\nimport Keyv from 'keyv';\r\nimport KeyvEncryptWeb from '@keyv/encrypt-web';\r\n\r\nconst encryption = new KeyvEncryptWeb({ key: 'your-secret-key' });\r\nconst keyv = new Keyv({ encryption });\r\n\r\nawait keyv.set('foo', 'bar');\r\nconst value = await keyv.get('foo'); // 'bar'\r\n```\r\n\r\n**Cross-compatibility wire format** (same for both packages):\r\n\r\n- **AES-GCM:** `base64([IV (12 bytes) || AuthTag (16 bytes) || Ciphertext])`\r\n- **AES-CBC:** `base64([IV (16 bytes) || Ciphertext])`\r\n\r\n---\r\n\r\n## 🧩 Core: Raw Data API\r\n\r\nWork directly with the stored envelope (`{ value, expires? }`) — useful for replication, cache warming, and moving data between stores. (#1897, #1929)\r\n\r\n```js\r\nimport Keyv from 'keyv';\r\nconst keyv = new Keyv();\r\n\r\n// Write a raw envelope with an absolute expiry timestamp\r\nawait keyv.setRaw('foo', { value: 'bar', expires: Date.now() + 60_000 });\r\n\r\n// No expiry\r\nawait keyv.setRaw('foo', { value: 'bar' });\r\n\r\n// Read the raw envelope back\r\nconst raw = await keyv.getRaw('foo'); // { value: 'bar', expires: 1234567890 }\r\n\r\n// Copy between instances without unwrapping/rewrapping\r\nif (raw) {\r\n  await other.setRaw('foo', raw);\r\n}\r\n\r\n// Batch variants\r\nawait keyv.setManyRaw([\r\n  { key: 'a', value: { value: 1 } },\r\n  { key: 'b', value: { value: 2, expires: Date.now() + 60_000 } },\r\n]);\r\nconst many = await keyv.getManyRaw(['a', 'b']);\r\n```\r\n\r\n> The store-level TTL is derived automatically from `value.expires`, so you no longer pass a separate `ttl` to the raw setters.\r\n\r\n---\r\n\r\n## 🔎 Core: Capability Detection\r\n\r\nNew helpers report exactly which parts of an interface an object implements. Each returns a `compatible` flag — `true` only when the full interface is satisfied — plus a `methods` map describing whether each method `exists` and its `methodType` (`\"sync\"` / `\"async\"` / `\"none\"`). (#1909, #1930)\r\n\r\n```ts\r\nimport Keyv, {\r\n  detectKeyv,\r\n  detectKeyvStorage,\r\n  detectKeyvCompression,\r\n  detectKeyvSerialization,\r\n  detectKeyvEncryption,\r\n} from 'keyv';\r\n\r\ndetectKeyv(new Keyv()).compatible; // true (only when ALL capabilities are present)\r\ndetectKeyv(new Map()).compatible;  // false — but methods.get.exists is still true\r\n\r\n// Storage detection reports the detected store type plus sync/async per method\r\nconst r = detectKeyvStorage(new Map());\r\nr.compatible;             // true\r\nr.store;                  // \"mapLike\"  (\"keyvStorage\" | \"mapLike\" | \"asyncMap\" | \"none\")\r\nr.methods.get.methodType; // \"sync\"\r\n\r\ndetectKeyvSerialization(JSON).compatible;                                    // true\r\ndetectKeyvCompression({ compress: d => d, decompress: d => d }).compatible;  // true\r\ndetectKeyvEncryption({ encrypt: d => d, decrypt: d => d }).compatible;       // true\r\n```\r\n\r\n---\r\n\r\n## 📊 Core: Stats / Telemetry\r\n\r\nOpt-in statistics with aggregate counters and LRU-bounded per-key frequency maps. (#1912)\r\n\r\n```js\r\nconst keyv = new Keyv({ stats: true });\r\n\r\nawait keyv.set('foo', 'bar');\r\nawait keyv.get('foo');          // hit\r\nawait keyv.get('nonexistent');  // miss\r\nawait keyv.delete('foo');\r\n\r\nkeyv.stats.hits;    // 1\r\nkeyv.stats.misses;  // 1\r\nkeyv.stats.sets;    // 1\r\nkeyv.stats.deletes; // 1\r\n\r\n// Per-key frequency (each map capped at maxEntries, default 1000)\r\nkeyv.stats.hitKeys.get('foo');           // 1\r\nkeyv.stats.missKeys.get('nonexistent');  // 1\r\n\r\nkeyv.stats.reset();          // clears counters and maps\r\nkeyv.stats.enabled = false;  // disable at runtime (auto-unsubscribes)\r\n```\r\n\r\n---\r\n\r\n## 🧼 Core: Key Sanitization\r\n\r\nOpt-in detection that strips dangerous *patterns* (not harmless characters) from keys and namespaces — guarding against SQL injection, MongoDB operator injection, path traversal, and control-character/CRLF attacks. Results are LRU-cached for speed.\r\n\r\n```js\r\nconst keyv = new Keyv({ sanitize: true });\r\n// or fine-grained:\r\nconst keyv2 = new Keyv({ sanitize: { sql: true, mongo: true, path: true, escape: true } });\r\n```\r\n\r\nApplied to every key-accepting method (`get`, `set`, `delete`, `has`, the `*Many` variants, and the raw variants), plus namespaces at construction and on the `namespace` setter.\r\n\r\n---\r\n\r\n## 🪝 Core: Events, Hooks & Error Handling\r\n\r\n- **Hooks for more operations** — added pre/post hooks for `setMany`, `deleteMany`, `clear`, and `disconnect`, in addition to the existing single-key hooks. (#1918, #1924)\r\n- **`throwOnErrors`** — make operations throw instead of emitting `'error'`, so you can `try/catch` (great with `@keyv/redis` connection handling). (#1910)\r\n\r\n  ```js\r\n  import Keyv from 'keyv';\r\n  import KeyvRedis from '@keyv/redis';\r\n\r\n  const keyv = new Keyv({ store: new KeyvRedis('redis://localhost:6379'), throwOnErrors: true });\r\n  try {\r\n    await keyv.set('foo', 'bar');\r\n  } catch (error) {\r\n    // handle connection/timeout errors yourself\r\n  }\r\n  ```\r\n\r\n- **Key prefixing moved to adapters.** Prefixing/namespacing is now handled by the storage adapters that need it rather than the core. (#1899)\r\n- **Encode/decode now propagate errors** instead of swallowing them, and several stats/telemetry edge cases were fixed (no `STAT_SET` on empty set, `setRaw` telemetry, `getManyRaw` dead code). (#1922, #1920, #1921, #1919)\r\n\r\n---\r\n\r\n## ⚙️ Core: Optional Serialization\r\n\r\nSerialization is now optional. Disable it to store raw objects (ideal for the default in-memory `Map`, where string conversion isn't needed). (#1898)\r\n\r\n```js\r\nconst keyv = new Keyv({ serialization: false });\r\n```\r\n\r\nPipeline ordering when serialization/compression are configured:\r\n\r\n- **On set:** serialize (optional) → compress (optional) → store\r\n- **On get:** store → decompress (optional) → parse (optional) → value\r\n\r\nIf compression is configured without a serializer, Keyv falls back to `JSON.stringify`/`JSON.parse` since compression needs string input.\r\n\r\n---\r\n\r\n## 🌐 Storage Adapters\r\n\r\n- **etcd: dependency-free client.** `@keyv/etcd` now talks to etcd v3 directly over its HTTP/JSON gateway via a small in-house client — the `etcd3` dependency is gone. Requires etcd v3+ and Node.js 20+ (uses global `fetch` / `AbortSignal.timeout`). TTL via etcd leases, namespace isolation, async iterator, and `setMany`/`getMany`/`deleteMany`/`hasMany` are all supported. (#1936, #1893)\r\n- **DynamoDB:** added `disconnect()` and `iterator()`; moved to v6 requirements with namespace support; TTL now stored in milliseconds; internal `isExpired` rename. AWS SDK dependencies upgraded. (#1914, #1894, #1934, #1935, #1948)\r\n- **Compression adapters** moved to the `KeyvCompressionAdapter` standard. (#1901)\r\n- **BigMap:** optimized hash function and hot-path performance. (#1915)\r\n- **Adapter dependency upgrades:** MongoDB (#1951), MySQL/mysql2 (#1952), Postgres/pg (#1953), memcache (#1950).\r\n\r\n---\r\n\r\n## 🏗️ Build, Tooling & Release\r\n\r\n- Moved the monorepo build to **`tsdown`**. (#1926)\r\n- Upgraded to **TypeScript 6**. (#1933)\r\n- New **release management with OIDC** and multi-version publishing, plus a hardened release pipeline. (#1942)\r\n- **test-suite:** v6 compliance overhaul, and TTL tests can now specify milliseconds or seconds. (#1931, #1949)\r\n- **Stability:** hardened service-backed test suites against timing flakes. (#1960)\r\n- **Docs/links:** fixed `main`-vs-`master` links and broken logo links in package READMEs. (#1939, #1943)\r\n\r\n---\r\n\r\n## 📦 Notable Dependency Upgrades\r\n\r\n| Package | Change | PR |\r\n|---|---|---|\r\n| `@redis/client` | → v6 (breaking) | #1954 |\r\n| `hookified` | → v3 (breaking) | #1957 |\r\n| `hashery` (BigMap) | → v2 (breaking) | #1956 |\r\n| `msgpackr` (serialize) | → v2 (breaking) | #1958 |\r\n| `bignumber.js` (test-suite) | → v11 (breaking) | #1955 |\r\n| `docula` (website) | → v2 (breaking) | #1947 |\r\n| `mongodb` | upgraded | #1951 |\r\n| `mysql2` | upgraded | #1952 |\r\n| `pg` | upgraded | #1953 |\r\n| AWS SDK (dynamo) | upgraded | #1948 |\r\n| memcache | upgraded | #1950 |\r\n| TypeScript | → v6 | #1933 |\r\n| GitHub Actions | upgraded (breaking) | #1946 |\r\n\r\n---\r\n\r\n## Full Changelog by Release\r\n\r\n### Since `v6.0.0-beta.1`\r\n- `mono` - test: harden service-backed suites against timing flakes (#1960)\r\n- `serialize-msgpackr` - chore: upgrade msgpackr to v2 (breaking) (#1958)\r\n- `mono` - chore: upgrade hookified to v3 (breaking) (#1957)\r\n- `bigmap` - chore: upgrade hashery to v2 (breaking) (#1956)\r\n- `test-suite` - chore: upgrade bignumber.js to v11 (breaking) (#1955)\r\n- `redis` - chore: upgrade @redis/client to v6 (breaking) (#1954)\r\n- `postgres` - chore: upgrade pg (#1953)\r\n- `mysql` - chore: upgrade mysql2 (#1952)\r\n- `mongo` - chore: upgrade mongodb (#1951)\r\n- `memcache` - chore: upgrade memcache (#1950)\r\n- `dynamo` - chore: upgrade AWS SDK dependencies (#1948)\r\n- `test-suite` - feat: allow storage TTL tests to specify milliseconds or seconds (#1949)\r\n- `website` - chore: upgrade docula to v2 (breaking) (#1947)\r\n- `mono` - chore: upgrade GitHub Actions (breaking) (#1946)\r\n- `mono` - chore: upgrade TypeScript and build tooling (#1945)\r\n- `mono` - chore: upgrade code quality dependencies (breaking) (#1944)\r\n- `mono` - docs: fix broken keyv logo link in package READMEs (#1943)\r\n- `feat`: release management with OIDC and multi versions (#1942)\r\n- `keyv` - fix: `main` branch used instead of `master` for links (#1939)\r\n- `etcd` - feat: replace etcd3 dependency with built-in HTTP/JSON client (#1936)\r\n- `dynamo` - fix: renaming internal isExpired (#1935)\r\n- `dynamo` - fix: storing ttl in ms now also (#1934)\r\n- `mono` - chore: upgrading to TypeScript 6 (#1933)\r\n\r\n### `v6.0.0-beta.1`\r\n- `keyv` - feat (breaking) stats / telemetry overhaul (#1912)\r\n- `keyv` - feat: (breaking) memory adapter, bridge adapter, keyv overhaul (#1913)\r\n- `bigmap` - feat: optimize BigMap hash function and hot path performance (#1915)\r\n- `dynamo` - feat: add disconnect and iterator methods to KeyvDynamo (#1914)\r\n- `keyv` - fix: handling has and hasMany better (#1916)\r\n- `keyv` - fix: adding in decode expiring to has (#1917)\r\n- `keyv` - feat: adding hooks for setMany and deleteMany (#1918)\r\n- `keyv` - fix: dead code on getManyRaw (#1919)\r\n- `keyv` - fix: on set with no result do not send telemetry STAT_SET (#1920)\r\n- `keyv` - fix: telemetry issue on setRaw (#1921)\r\n- `keyv` - fix: having encode / decode propagate errors (#1922)\r\n- `keyv` - feat: (breaking) by default keyv no longer checks expires (#1923)\r\n- `keyv` - feat: adding in hooks for clear and disconnect (#1924)\r\n- `keyv` - fix: minor bug fixes on memory, ttl, etc (#1925)\r\n- `mono` - feat: moving to tsdown for build (#1926)\r\n- `encryption-node` - feat: add Node.js encryption adapter for Keyv (#1927)\r\n- `encrypt-web` - feat: adding new web crypto module (#1928)\r\n- `keyv` - feat: (breaking) removing StoredData and StoredDataRaw types (#1929)\r\n- `keyv` - feat: enhancing capabilities (#1930)\r\n- `test-suite` - feat (breaking) overhaul based on v6 changes (#1931)\r\n\r\n### `v6.0.0-alpha.4`\r\n- `keyv` - feat: (breaking) moving to Hookified (#1900)\r\n- `compression` - feat: moving to KeyvCompressionAdapter standard (#1901)\r\n- `keyv` - feat: (breaking) api changes and iterator simplification (#1902)\r\n- `keyv` - feat: moving storage setMany to use KeyvEntry (#1903)\r\n- `keyv` - feat: (breaking) moving to boolean return on set (#1904)\r\n- `keyv` - fix: (breaking) setRaw and setMany raw do not need ttl param (#1905)\r\n- `keyv` - feat: (breaking) removing opts from KeyvStorageAdapter (#1906)\r\n- `keyv` - feat: browser compatibility (#1907)\r\n- `keyv` - fix: updating checks for browser tests (#1908)\r\n- `feat`: updating capability helper functions (#1909)\r\n- `keyv` - feat: clean up of code with fixes and helpers (#1910)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-alpha.3...v6.0.0-beta.3",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-beta-1",
      "title": "v6.0.0-beta.1",
      "url": "https://keyv.org/changelog/v6-0-0-beta-1/",
      "date_published": "2026-04-01",
      "date_modified": "2026-04-01",
      "summary": "<ul>\n<li>keyv - feat (breaking) stats / telemetry overhaul by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1912\">https://github.com/jaredwray/keyv/pull/1912</a></li>\n<li>keyv - feat: (breaking) memory adapter, bridge adapter, keyv overhaul by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1913\">https://github.com/jaredwray/keyv/pull/1913</a></li>\n<li>bigmap - feat: Optimize BigMap hash function and hot path performance by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1915\">https://github.com/jaredwray/keyv/pull/1915</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>keyv - feat (breaking) stats / telemetry overhaul by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1912\">https://github.com/jaredwray/keyv/pull/1912</a></li>\n<li>keyv - feat: (breaking) memory adapter, bridge adapter, keyv overhaul by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1913\">https://github.com/jaredwray/keyv/pull/1913</a></li>\n<li>bigmap - feat: Optimize BigMap hash function and hot path performance by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1915\">https://github.com/jaredwray/keyv/pull/1915</a></li>\n<li>dynamo - feat: Add disconnect and iterator methods to KeyvDynamo by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1914\">https://github.com/jaredwray/keyv/pull/1914</a></li>\n<li>keyv - fix: handling has and hasMany better by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1916\">https://github.com/jaredwray/keyv/pull/1916</a></li>\n<li>keyv - fix: adding in decode expiring to has by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1917\">https://github.com/jaredwray/keyv/pull/1917</a></li>\n<li>keyv - feat: adding hooks for setMany and deleteMany by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1918\">https://github.com/jaredwray/keyv/pull/1918</a></li>\n<li>keyv - fix: dead code on getManyRaw by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1919\">https://github.com/jaredwray/keyv/pull/1919</a></li>\n<li>keyv - fix: on set with no result do not send telemetry STAT_SET by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1920\">https://github.com/jaredwray/keyv/pull/1920</a></li>\n<li>keyv - fix: telemetry issue on setRaw by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1921\">https://github.com/jaredwray/keyv/pull/1921</a></li>\n<li>keyv - fix: having encode / decode propegate errors by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1922\">https://github.com/jaredwray/keyv/pull/1922</a></li>\n<li>keyv - feat: (breaking) by default keyv no longer checks expires by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1923\">https://github.com/jaredwray/keyv/pull/1923</a></li>\n<li>keyv - feat: adding in hooks for clear and disconnect by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1924\">https://github.com/jaredwray/keyv/pull/1924</a></li>\n<li>keyv - fix: minor bug fixes on memory, ttl, etc by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1925\">https://github.com/jaredwray/keyv/pull/1925</a></li>\n<li>mono - feat: moving to tsdown for build by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1926\">https://github.com/jaredwray/keyv/pull/1926</a></li>\n<li>encryption-node - feat: Add Node.js encryption adapter for Keyv by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1927\">https://github.com/jaredwray/keyv/pull/1927</a></li>\n<li>encrypt-web - feat: adding new web crypto module by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1928\">https://github.com/jaredwray/keyv/pull/1928</a></li>\n<li>keyv - feat: (breaking) removing StoredData and StoredDataRaw types by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1929\">https://github.com/jaredwray/keyv/pull/1929</a></li>\n<li>keyv - feat: enhancing capabilities by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1930\">https://github.com/jaredwray/keyv/pull/1930</a></li>\n<li>test-suite - feat (breaking) overhaul based on v6 changes by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1931\">https://github.com/jaredwray/keyv/pull/1931</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-alpha.4...v6.0.0-beta.1</p>",
      "content_text": "## What's Changed\r\n* keyv - feat (breaking) stats / telemetry overhaul by @jaredwray in [https://github.com/jaredwray/keyv/pull/1912](https://github.com/jaredwray/keyv/pull/1912)\r\n* keyv - feat: (breaking) memory adapter, bridge adapter, keyv overhaul by @jaredwray in [https://github.com/jaredwray/keyv/pull/1913](https://github.com/jaredwray/keyv/pull/1913)\r\n* bigmap - feat: Optimize BigMap hash function and hot path performance by @jaredwray in [https://github.com/jaredwray/keyv/pull/1915](https://github.com/jaredwray/keyv/pull/1915)\r\n* dynamo - feat: Add disconnect and iterator methods to KeyvDynamo by @jaredwray in [https://github.com/jaredwray/keyv/pull/1914](https://github.com/jaredwray/keyv/pull/1914)\r\n* keyv - fix: handling has and hasMany better by @jaredwray in [https://github.com/jaredwray/keyv/pull/1916](https://github.com/jaredwray/keyv/pull/1916)\r\n* keyv - fix: adding in decode expiring to has by @jaredwray in [https://github.com/jaredwray/keyv/pull/1917](https://github.com/jaredwray/keyv/pull/1917)\r\n* keyv - feat: adding hooks for setMany and deleteMany by @jaredwray in [https://github.com/jaredwray/keyv/pull/1918](https://github.com/jaredwray/keyv/pull/1918)\r\n* keyv - fix: dead code on getManyRaw by @jaredwray in [https://github.com/jaredwray/keyv/pull/1919](https://github.com/jaredwray/keyv/pull/1919)\r\n* keyv - fix: on set with no result do not send telemetry STAT_SET by @jaredwray in [https://github.com/jaredwray/keyv/pull/1920](https://github.com/jaredwray/keyv/pull/1920)\r\n* keyv - fix: telemetry issue on setRaw by @jaredwray in [https://github.com/jaredwray/keyv/pull/1921](https://github.com/jaredwray/keyv/pull/1921)\r\n* keyv - fix: having encode / decode propegate errors by @jaredwray in [https://github.com/jaredwray/keyv/pull/1922](https://github.com/jaredwray/keyv/pull/1922)\r\n* keyv - feat: (breaking) by default keyv no longer checks expires by @jaredwray in [https://github.com/jaredwray/keyv/pull/1923](https://github.com/jaredwray/keyv/pull/1923)\r\n* keyv - feat: adding in hooks for clear and disconnect by @jaredwray in [https://github.com/jaredwray/keyv/pull/1924](https://github.com/jaredwray/keyv/pull/1924)\r\n* keyv - fix: minor bug fixes on memory, ttl, etc by @jaredwray in [https://github.com/jaredwray/keyv/pull/1925](https://github.com/jaredwray/keyv/pull/1925)\r\n* mono - feat: moving to tsdown for build by @jaredwray in [https://github.com/jaredwray/keyv/pull/1926](https://github.com/jaredwray/keyv/pull/1926)\r\n* encryption-node - feat: Add Node.js encryption adapter for Keyv by @jaredwray in [https://github.com/jaredwray/keyv/pull/1927](https://github.com/jaredwray/keyv/pull/1927)\r\n* encrypt-web - feat: adding new web crypto module by @jaredwray in [https://github.com/jaredwray/keyv/pull/1928](https://github.com/jaredwray/keyv/pull/1928)\r\n* keyv - feat: (breaking) removing StoredData and StoredDataRaw types by @jaredwray in [https://github.com/jaredwray/keyv/pull/1929](https://github.com/jaredwray/keyv/pull/1929)\r\n* keyv - feat: enhancing capabilities by @jaredwray in [https://github.com/jaredwray/keyv/pull/1930](https://github.com/jaredwray/keyv/pull/1930)\r\n* test-suite - feat (breaking) overhaul based on v6 changes by @jaredwray in [https://github.com/jaredwray/keyv/pull/1931](https://github.com/jaredwray/keyv/pull/1931)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-alpha.4...v6.0.0-beta.1",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-alpha-4",
      "title": "v6.0.0-alpha.4",
      "url": "https://keyv.org/changelog/v6-0-0-alpha-4/",
      "date_published": "2026-03-27",
      "date_modified": "2026-03-27",
      "summary": "<ul>\n<li>keyv - feat: (breaking) moving to Hookified by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1900\">https://github.com/jaredwray/keyv/pull/1900</a></li>\n<li>compression - feat: moving to KeyvCompressionAdapter standard by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1901\">https://github.com/jaredwray/keyv/pull/1901</a></li>\n<li>keyv - feat: (breaking) api changes and iterator simplification by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1902\">https://github.com/jaredwray/keyv/pull/1902</a></li>\n<li>keyv - feat: moving storage setMany to use KeyvEntry by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1903\">https://github.com/jaredwray/keyv/pull/1903</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>keyv - feat: (breaking) moving to Hookified by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1900\">https://github.com/jaredwray/keyv/pull/1900</a></li>\n<li>compression - feat: moving to KeyvCompressionAdapter standard by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1901\">https://github.com/jaredwray/keyv/pull/1901</a></li>\n<li>keyv - feat: (breaking) api changes and iterator simplification by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1902\">https://github.com/jaredwray/keyv/pull/1902</a></li>\n<li>keyv - feat: moving storage setMany to use KeyvEntry by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1903\">https://github.com/jaredwray/keyv/pull/1903</a></li>\n<li>keyv - feat: (breaking) moving to boolean return on set by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1904\">https://github.com/jaredwray/keyv/pull/1904</a></li>\n<li>keyv - fix: (breaking) setRaw and setMany raw do not need ttl param by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1905\">https://github.com/jaredwray/keyv/pull/1905</a></li>\n<li>keyv - feat: (breaking) removing opts from KeyvStorageAdapter by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1906\">https://github.com/jaredwray/keyv/pull/1906</a></li>\n<li>keyv - feat: browser compatability by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1907\">https://github.com/jaredwray/keyv/pull/1907</a></li>\n<li>keyv - fix: updating checks for browser tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1908\">https://github.com/jaredwray/keyv/pull/1908</a></li>\n<li>feat: updating capability helper functions by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1909\">https://github.com/jaredwray/keyv/pull/1909</a></li>\n<li>keyv - feat: clean up of code with fixes and helpers by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1910\">https://github.com/jaredwray/keyv/pull/1910</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-alpha.3...v6.0.0-alpha.4</p>",
      "content_text": "## What's Changed\r\n* keyv - feat: (breaking) moving to Hookified by @jaredwray in [https://github.com/jaredwray/keyv/pull/1900](https://github.com/jaredwray/keyv/pull/1900)\r\n* compression - feat: moving to KeyvCompressionAdapter standard by @jaredwray in [https://github.com/jaredwray/keyv/pull/1901](https://github.com/jaredwray/keyv/pull/1901)\r\n* keyv - feat: (breaking) api changes and iterator simplification by @jaredwray in [https://github.com/jaredwray/keyv/pull/1902](https://github.com/jaredwray/keyv/pull/1902)\r\n* keyv - feat: moving storage setMany to use KeyvEntry by @jaredwray in [https://github.com/jaredwray/keyv/pull/1903](https://github.com/jaredwray/keyv/pull/1903)\r\n* keyv - feat: (breaking) moving to boolean return on set by @jaredwray in [https://github.com/jaredwray/keyv/pull/1904](https://github.com/jaredwray/keyv/pull/1904)\r\n* keyv - fix: (breaking) setRaw and setMany raw do not need ttl param by @jaredwray in [https://github.com/jaredwray/keyv/pull/1905](https://github.com/jaredwray/keyv/pull/1905)\r\n* keyv - feat: (breaking) removing opts from KeyvStorageAdapter by @jaredwray in [https://github.com/jaredwray/keyv/pull/1906](https://github.com/jaredwray/keyv/pull/1906)\r\n* keyv - feat: browser compatability by @jaredwray in [https://github.com/jaredwray/keyv/pull/1907](https://github.com/jaredwray/keyv/pull/1907)\r\n* keyv - fix: updating checks for browser tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1908](https://github.com/jaredwray/keyv/pull/1908)\r\n* feat: updating capability helper functions by @jaredwray in [https://github.com/jaredwray/keyv/pull/1909](https://github.com/jaredwray/keyv/pull/1909)\r\n* keyv - feat: clean up of code with fixes and helpers by @jaredwray in [https://github.com/jaredwray/keyv/pull/1910](https://github.com/jaredwray/keyv/pull/1910)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-alpha.3...v6.0.0-alpha.4",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-alpha-3",
      "title": "v6.0.0-alpha.3",
      "url": "https://keyv.org/changelog/v6-0-0-alpha-3/",
      "date_published": "2026-03-22",
      "date_modified": "2026-03-22",
      "summary": "<ul>\n<li>sqlite - feat: moving to namespace and modern adapter methods by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1884\">https://github.com/jaredwray/keyv/pull/1884</a></li>\n<li>sqlite - feat: adding in benchmarks by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1885\">https://github.com/jaredwray/keyv/pull/1885</a></li>\n<li>sqlite - feat: adding in driver for sqlite3 for legacy by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1886\">https://github.com/jaredwray/keyv/pull/1886</a></li>\n<li>sqlite - feat: major clean up of drivers and code base by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1887\">https://github.com/jaredwray/keyv/pull/1887</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>sqlite - feat: moving to namespace and modern adapter methods by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1884\">https://github.com/jaredwray/keyv/pull/1884</a></li>\n<li>sqlite - feat: adding in benchmarks by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1885\">https://github.com/jaredwray/keyv/pull/1885</a></li>\n<li>sqlite - feat: adding in driver for sqlite3 for legacy by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1886\">https://github.com/jaredwray/keyv/pull/1886</a></li>\n<li>sqlite - feat: major clean up of drivers and code base by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1887\">https://github.com/jaredwray/keyv/pull/1887</a></li>\n<li>memcache - feat: moving to using faker for unit tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1888\">https://github.com/jaredwray/keyv/pull/1888</a></li>\n<li>redis - chore: updating tests with faker by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1889\">https://github.com/jaredwray/keyv/pull/1889</a></li>\n<li>dynamo - chore: moving to using faker for tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1890\">https://github.com/jaredwray/keyv/pull/1890</a></li>\n<li>etcd - chore: moving to faker for tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1891\">https://github.com/jaredwray/keyv/pull/1891</a></li>\n<li>bigmap - feat: moving this to core folder as it Map interface by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1892\">https://github.com/jaredwray/keyv/pull/1892</a></li>\n<li>etcd - feat: moving to v6 functionality by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1893\">https://github.com/jaredwray/keyv/pull/1893</a></li>\n<li>dynamo - feat: moving to v6 requirements many functions and namespace by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1894\">https://github.com/jaredwray/keyv/pull/1894</a></li>\n<li>mono - fix: working to speed up actions by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1895\">https://github.com/jaredwray/keyv/pull/1895</a></li>\n<li>memcache - fix: handling namespace support better by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1896\">https://github.com/jaredwray/keyv/pull/1896</a></li>\n<li>keyv - feat: adding raw set features by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1897\">https://github.com/jaredwray/keyv/pull/1897</a></li>\n<li>keyv - feat: moving to serialization optional by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1898\">https://github.com/jaredwray/keyv/pull/1898</a></li>\n<li>keyv - feat: (breaking) no longer supporting key prefixing in core by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1899\">https://github.com/jaredwray/keyv/pull/1899</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/v6.0.0\">https://github.com/jaredwray/keyv/compare/v6.0.0</a>-alpha.2...v6.0.0-alpha.3</p>",
      "content_text": "## What's Changed\r\n* sqlite - feat: moving to namespace and modern adapter methods by @jaredwray in [https://github.com/jaredwray/keyv/pull/1884](https://github.com/jaredwray/keyv/pull/1884)\r\n* sqlite - feat: adding in benchmarks by @jaredwray in [https://github.com/jaredwray/keyv/pull/1885](https://github.com/jaredwray/keyv/pull/1885)\r\n* sqlite - feat: adding in driver for sqlite3 for legacy by @jaredwray in [https://github.com/jaredwray/keyv/pull/1886](https://github.com/jaredwray/keyv/pull/1886)\r\n* sqlite - feat: major clean up of drivers and code base by @jaredwray in [https://github.com/jaredwray/keyv/pull/1887](https://github.com/jaredwray/keyv/pull/1887)\r\n* memcache - feat: moving to using faker for unit tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1888](https://github.com/jaredwray/keyv/pull/1888)\r\n* redis - chore: updating tests with faker by @jaredwray in [https://github.com/jaredwray/keyv/pull/1889](https://github.com/jaredwray/keyv/pull/1889)\r\n* dynamo - chore: moving to using faker for tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1890](https://github.com/jaredwray/keyv/pull/1890)\r\n* etcd - chore: moving to faker for tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1891](https://github.com/jaredwray/keyv/pull/1891)\r\n* bigmap - feat: moving this to core folder as it Map interface by @jaredwray in [https://github.com/jaredwray/keyv/pull/1892](https://github.com/jaredwray/keyv/pull/1892)\r\n* etcd - feat: moving to v6 functionality by @jaredwray in [https://github.com/jaredwray/keyv/pull/1893](https://github.com/jaredwray/keyv/pull/1893)\r\n* dynamo - feat: moving to v6 requirements many functions and namespace by @jaredwray in [https://github.com/jaredwray/keyv/pull/1894](https://github.com/jaredwray/keyv/pull/1894)\r\n* mono - fix: working to speed up actions by @jaredwray in [https://github.com/jaredwray/keyv/pull/1895](https://github.com/jaredwray/keyv/pull/1895)\r\n* memcache - fix: handling namespace support better by @jaredwray in [https://github.com/jaredwray/keyv/pull/1896](https://github.com/jaredwray/keyv/pull/1896)\r\n* keyv - feat: adding raw set features by @jaredwray in [https://github.com/jaredwray/keyv/pull/1897](https://github.com/jaredwray/keyv/pull/1897)\r\n* keyv - feat: moving to serialization optional by @jaredwray in [https://github.com/jaredwray/keyv/pull/1898](https://github.com/jaredwray/keyv/pull/1898)\r\n* keyv - feat: (breaking) no longer supporting key prefixing in core by @jaredwray in [https://github.com/jaredwray/keyv/pull/1899](https://github.com/jaredwray/keyv/pull/1899)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/v6.0.0](https://github.com/jaredwray/keyv/compare/v6.0.0)-alpha.2...v6.0.0-alpha.3",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "v6-0-0-alpha-2",
      "title": "v6.0.0-alpha.2",
      "url": "https://keyv.org/changelog/v6-0-0-alpha-2/",
      "date_published": "2026-03-04",
      "date_modified": "2026-03-04",
      "summary": "<ul>\n<li>valkey - feat: moving options to properties by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1876\">https://github.com/jaredwray/keyv/pull/1876</a></li>\n<li>valkey - feat: adding in getMany, setMany, deleteMany, etc by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1877\">https://github.com/jaredwray/keyv/pull/1877</a></li>\n<li>valkey - feat: (breaking) moving to client instead of redis name by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1878\">https://github.com/jaredwray/keyv/pull/1878</a></li>\n<li>mono - feat: migrating to hookified v2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1879\">https://github.com/jaredwray/keyv/pull/1879</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>valkey - feat: moving options to properties by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1876\">https://github.com/jaredwray/keyv/pull/1876</a></li>\n<li>valkey - feat: adding in getMany, setMany, deleteMany, etc by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1877\">https://github.com/jaredwray/keyv/pull/1877</a></li>\n<li>valkey - feat: (breaking) moving to client instead of redis name by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1878\">https://github.com/jaredwray/keyv/pull/1878</a></li>\n<li>mono - feat: migrating to hookified v2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1879\">https://github.com/jaredwray/keyv/pull/1879</a></li>\n<li>mysql - chore: moving to faker-js for tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1881\">https://github.com/jaredwray/keyv/pull/1881</a></li>\n<li>test-suite - feat: moving to using faker-js by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1882\">https://github.com/jaredwray/keyv/pull/1882</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/6.0.0\">https://github.com/jaredwray/keyv/compare/6.0.0</a>-alpha.1...v6.0.0-alpha.2</p>",
      "content_text": "## What's Changed\r\n* valkey - feat: moving options to properties by @jaredwray in [https://github.com/jaredwray/keyv/pull/1876](https://github.com/jaredwray/keyv/pull/1876)\r\n* valkey - feat: adding in getMany, setMany, deleteMany, etc by @jaredwray in [https://github.com/jaredwray/keyv/pull/1877](https://github.com/jaredwray/keyv/pull/1877)\r\n* valkey - feat: (breaking) moving to client instead of redis name by @jaredwray in [https://github.com/jaredwray/keyv/pull/1878](https://github.com/jaredwray/keyv/pull/1878)\r\n* mono - feat: migrating to hookified v2 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1879](https://github.com/jaredwray/keyv/pull/1879)\r\n* mysql - chore: moving to faker-js for tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1881](https://github.com/jaredwray/keyv/pull/1881)\r\n* test-suite - feat: moving to using faker-js by @jaredwray in [https://github.com/jaredwray/keyv/pull/1882](https://github.com/jaredwray/keyv/pull/1882)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/6.0.0](https://github.com/jaredwray/keyv/compare/6.0.0)-alpha.1...v6.0.0-alpha.2",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "6-0-0-alpha-1",
      "title": "6.0.0-alpha.1",
      "url": "https://keyv.org/changelog/6-0-0-alpha-1/",
      "date_published": "2026-02-26",
      "date_modified": "2026-02-26",
      "summary": "<ul>\n<li>redis - feat: exporting RedisSentinelOptions by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1823\">https://github.com/jaredwray/keyv/pull/1823</a></li>\n<li>redis - feat: exporting redis sentinel options with updated documentation by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1824\">https://github.com/jaredwray/keyv/pull/1824</a></li>\n<li>mono - chore: upgrading vitest to 4.0.18 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1827\">https://github.com/jaredwray/keyv/pull/1827</a></li>\n<li>keyv - chore: upgrading vitest and supporting modules to latest by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1828\">https://github.com/jaredwray/keyv/pull/1828</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>redis - feat: exporting RedisSentinelOptions by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1823\">https://github.com/jaredwray/keyv/pull/1823</a></li>\n<li>redis - feat: exporting redis sentinel options with updated documentation by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1824\">https://github.com/jaredwray/keyv/pull/1824</a></li>\n<li>mono - chore: upgrading vitest to 4.0.18 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1827\">https://github.com/jaredwray/keyv/pull/1827</a></li>\n<li>keyv - chore: upgrading vitest and supporting modules to latest by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1828\">https://github.com/jaredwray/keyv/pull/1828</a></li>\n<li>serialize - chore: upgrading vitest to 4.0.18 and supporting packages by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1829\">https://github.com/jaredwray/keyv/pull/1829</a></li>\n<li>sqlite - feat: Add WAL (Write-Ahead Logging) mode support by @snomiao in <a href=\"https://github.com/jaredwray/keyv/pull/1826\">https://github.com/jaredwray/keyv/pull/1826</a></li>\n<li>compress-brotli - chore: upgrading vitest to 4.0.18 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1830\">https://github.com/jaredwray/keyv/pull/1830</a></li>\n<li>compress-gzip - chore: upgrading vitest to 4.0.18 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1831\">https://github.com/jaredwray/keyv/pull/1831</a></li>\n<li>sqlite - feat: Add warning for WAL mode with in-memory SQLite databases by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1832\">https://github.com/jaredwray/keyv/pull/1832</a></li>\n<li>docs: Add v5 to v6 migration guide by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1833\">https://github.com/jaredwray/keyv/pull/1833</a></li>\n<li>memcache - docs: Add memjs to memcache migration to v5-to-v6 guide by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1836\">https://github.com/jaredwray/keyv/pull/1836</a></li>\n<li>mono - chore: moving keyv to better mono structure by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1838\">https://github.com/jaredwray/keyv/pull/1838</a></li>\n<li>mono - feat: adding in version sync across all packages by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1839\">https://github.com/jaredwray/keyv/pull/1839</a></li>\n<li>mono - fix: tsconfig moving to esnext by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1840\">https://github.com/jaredwray/keyv/pull/1840</a></li>\n<li>compress-brotli - feat: moving to native zlib brotli engine by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1841\">https://github.com/jaredwray/keyv/pull/1841</a></li>\n<li>mono - refactor: remove ttlSupport property from all storage adapters by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1842\">https://github.com/jaredwray/keyv/pull/1842</a></li>\n<li>keyv - refactor: remove opts property from Keyv class by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1843\">https://github.com/jaredwray/keyv/pull/1843</a></li>\n<li>keyv - chore: remove cyclic workspace dependencies by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1844\">https://github.com/jaredwray/keyv/pull/1844</a></li>\n<li>keyv - chore: adding tests for code coverage by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1845\">https://github.com/jaredwray/keyv/pull/1845</a></li>\n<li>memcache - feat: migrating from memjs to memcache by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1846\">https://github.com/jaredwray/keyv/pull/1846</a></li>\n<li>memcache - feat: adding in createKeyv helper function by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1847\">https://github.com/jaredwray/keyv/pull/1847</a></li>\n<li>memcache - fix: removing serialization as not needed by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1848\">https://github.com/jaredwray/keyv/pull/1848</a></li>\n<li>memcache - feat: (breaking) moving to nodes based on memcache options by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1849\">https://github.com/jaredwray/keyv/pull/1849</a></li>\n<li>memcache - feat: moving eventemitter to hookified by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1850\">https://github.com/jaredwray/keyv/pull/1850</a></li>\n<li>memcache - feat: adding constructor documentation by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1851\">https://github.com/jaredwray/keyv/pull/1851</a></li>\n<li>keyv - docs: Move Bun Support section lower in README by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1853\">https://github.com/jaredwray/keyv/pull/1853</a></li>\n<li>postgres - feat: adding in table of contents by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1856\">https://github.com/jaredwray/keyv/pull/1856</a></li>\n<li>postgres - feat: migrating to hookified and advanced functions by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1857\">https://github.com/jaredwray/keyv/pull/1857</a></li>\n<li>postgres - feat: moving to properties by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1858\">https://github.com/jaredwray/keyv/pull/1858</a></li>\n<li>postgres - feat: adding in native namespace support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1860\">https://github.com/jaredwray/keyv/pull/1860</a></li>\n<li>postgres - feat: better ttl support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1861\">https://github.com/jaredwray/keyv/pull/1861</a></li>\n<li>mysql - chore: adding table of contents by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1862\">https://github.com/jaredwray/keyv/pull/1862</a></li>\n<li>mysql - feat: adding setMany and hasMany by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1863\">https://github.com/jaredwray/keyv/pull/1863</a></li>\n<li>mysql - feat: moving to native namespacing by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1864\">https://github.com/jaredwray/keyv/pull/1864</a></li>\n<li>mysql - feat: removing dialect as no longer needed by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1865\">https://github.com/jaredwray/keyv/pull/1865</a></li>\n<li>mysql - feat: (breaking) moving from keySize to keyLength by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1866\">https://github.com/jaredwray/keyv/pull/1866</a></li>\n<li>mysql - feat: moving from eventemitter to hookified by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1867\">https://github.com/jaredwray/keyv/pull/1867</a></li>\n<li>mysql - feat: createKeyv helper and options cleanup by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1868\">https://github.com/jaredwray/keyv/pull/1868</a></li>\n<li>mongo - feat: migrating to hookified from eventemitter by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1869\">https://github.com/jaredwray/keyv/pull/1869</a></li>\n<li>mongo - feat: adding createKeyv helper by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1871\">https://github.com/jaredwray/keyv/pull/1871</a></li>\n<li>mongo - feat: moving to more robust options and properties by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1872\">https://github.com/jaredwray/keyv/pull/1872</a></li>\n<li>mongo - fix: moving gridFS property to read only by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1873\">https://github.com/jaredwray/keyv/pull/1873</a></li>\n<li>mongo - feat: adding hasMany and setMany by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1874\">https://github.com/jaredwray/keyv/pull/1874</a></li>\n<li>mono - feat: adding in release action by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1875\">https://github.com/jaredwray/keyv/pull/1875</a></li>\n</ul>\n<h2 id=\"new-contributors\">New Contributors</h2>\n<ul>\n<li>@snomiao made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1826\">https://github.com/jaredwray/keyv/pull/1826</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2026\">https://github.com/jaredwray/keyv/compare/2026</a>-01-20...6.0.0-alpha.1</p>",
      "content_text": "## What's Changed\r\n* redis - feat: exporting RedisSentinelOptions by @jaredwray in [https://github.com/jaredwray/keyv/pull/1823](https://github.com/jaredwray/keyv/pull/1823)\r\n* redis - feat: exporting redis sentinel options with updated documentation by @jaredwray in [https://github.com/jaredwray/keyv/pull/1824](https://github.com/jaredwray/keyv/pull/1824)\r\n* mono - chore: upgrading vitest to 4.0.18 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1827](https://github.com/jaredwray/keyv/pull/1827)\r\n* keyv - chore: upgrading vitest and supporting modules to latest by @jaredwray in [https://github.com/jaredwray/keyv/pull/1828](https://github.com/jaredwray/keyv/pull/1828)\r\n* serialize - chore: upgrading vitest to 4.0.18 and supporting packages by @jaredwray in [https://github.com/jaredwray/keyv/pull/1829](https://github.com/jaredwray/keyv/pull/1829)\r\n* sqlite - feat: Add WAL (Write-Ahead Logging) mode support by @snomiao in [https://github.com/jaredwray/keyv/pull/1826](https://github.com/jaredwray/keyv/pull/1826)\r\n* compress-brotli - chore: upgrading vitest to 4.0.18 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1830](https://github.com/jaredwray/keyv/pull/1830)\r\n* compress-gzip - chore: upgrading vitest to 4.0.18 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1831](https://github.com/jaredwray/keyv/pull/1831)\r\n* sqlite - feat: Add warning for WAL mode with in-memory SQLite databases by @jaredwray in [https://github.com/jaredwray/keyv/pull/1832](https://github.com/jaredwray/keyv/pull/1832)\r\n* docs: Add v5 to v6 migration guide by @jaredwray in [https://github.com/jaredwray/keyv/pull/1833](https://github.com/jaredwray/keyv/pull/1833)\r\n* memcache - docs: Add memjs to memcache migration to v5-to-v6 guide by @jaredwray in [https://github.com/jaredwray/keyv/pull/1836](https://github.com/jaredwray/keyv/pull/1836)\r\n* mono - chore: moving keyv to better mono structure by @jaredwray in [https://github.com/jaredwray/keyv/pull/1838](https://github.com/jaredwray/keyv/pull/1838)\r\n* mono - feat: adding in version sync across all packages by @jaredwray in [https://github.com/jaredwray/keyv/pull/1839](https://github.com/jaredwray/keyv/pull/1839)\r\n* mono - fix: tsconfig moving to esnext by @jaredwray in [https://github.com/jaredwray/keyv/pull/1840](https://github.com/jaredwray/keyv/pull/1840)\r\n* compress-brotli - feat: moving to native zlib brotli engine by @jaredwray in [https://github.com/jaredwray/keyv/pull/1841](https://github.com/jaredwray/keyv/pull/1841)\r\n* mono - refactor: remove ttlSupport property from all storage adapters by @jaredwray in [https://github.com/jaredwray/keyv/pull/1842](https://github.com/jaredwray/keyv/pull/1842)\r\n* keyv - refactor: remove opts property from Keyv class by @jaredwray in [https://github.com/jaredwray/keyv/pull/1843](https://github.com/jaredwray/keyv/pull/1843)\r\n* keyv - chore: remove cyclic workspace dependencies by @jaredwray in [https://github.com/jaredwray/keyv/pull/1844](https://github.com/jaredwray/keyv/pull/1844)\r\n* keyv - chore: adding tests for code coverage by @jaredwray in [https://github.com/jaredwray/keyv/pull/1845](https://github.com/jaredwray/keyv/pull/1845)\r\n* memcache - feat: migrating from memjs to memcache by @jaredwray in [https://github.com/jaredwray/keyv/pull/1846](https://github.com/jaredwray/keyv/pull/1846)\r\n* memcache - feat: adding in createKeyv helper function by @jaredwray in [https://github.com/jaredwray/keyv/pull/1847](https://github.com/jaredwray/keyv/pull/1847)\r\n* memcache - fix: removing serialization as not needed by @jaredwray in [https://github.com/jaredwray/keyv/pull/1848](https://github.com/jaredwray/keyv/pull/1848)\r\n* memcache - feat: (breaking) moving to nodes based on memcache options by @jaredwray in [https://github.com/jaredwray/keyv/pull/1849](https://github.com/jaredwray/keyv/pull/1849)\r\n* memcache - feat: moving eventemitter to hookified by @jaredwray in [https://github.com/jaredwray/keyv/pull/1850](https://github.com/jaredwray/keyv/pull/1850)\r\n* memcache - feat: adding constructor documentation by @jaredwray in [https://github.com/jaredwray/keyv/pull/1851](https://github.com/jaredwray/keyv/pull/1851)\r\n* keyv - docs: Move Bun Support section lower in README by @jaredwray in [https://github.com/jaredwray/keyv/pull/1853](https://github.com/jaredwray/keyv/pull/1853)\r\n* postgres - feat: adding in table of contents by @jaredwray in [https://github.com/jaredwray/keyv/pull/1856](https://github.com/jaredwray/keyv/pull/1856)\r\n* postgres - feat: migrating to hookified and advanced functions by @jaredwray in [https://github.com/jaredwray/keyv/pull/1857](https://github.com/jaredwray/keyv/pull/1857)\r\n* postgres - feat: moving to properties by @jaredwray in [https://github.com/jaredwray/keyv/pull/1858](https://github.com/jaredwray/keyv/pull/1858)\r\n* postgres - feat: adding in native namespace support by @jaredwray in [https://github.com/jaredwray/keyv/pull/1860](https://github.com/jaredwray/keyv/pull/1860)\r\n* postgres - feat: better ttl support by @jaredwray in [https://github.com/jaredwray/keyv/pull/1861](https://github.com/jaredwray/keyv/pull/1861)\r\n* mysql - chore: adding table of contents by @jaredwray in [https://github.com/jaredwray/keyv/pull/1862](https://github.com/jaredwray/keyv/pull/1862)\r\n* mysql - feat: adding setMany and hasMany by @jaredwray in [https://github.com/jaredwray/keyv/pull/1863](https://github.com/jaredwray/keyv/pull/1863)\r\n* mysql - feat: moving to native namespacing by @jaredwray in [https://github.com/jaredwray/keyv/pull/1864](https://github.com/jaredwray/keyv/pull/1864)\r\n* mysql - feat: removing dialect as no longer needed by @jaredwray in [https://github.com/jaredwray/keyv/pull/1865](https://github.com/jaredwray/keyv/pull/1865)\r\n* mysql - feat: (breaking) moving from keySize to keyLength by @jaredwray in [https://github.com/jaredwray/keyv/pull/1866](https://github.com/jaredwray/keyv/pull/1866)\r\n* mysql - feat: moving from eventemitter to hookified by @jaredwray in [https://github.com/jaredwray/keyv/pull/1867](https://github.com/jaredwray/keyv/pull/1867)\r\n* mysql - feat: createKeyv helper and options cleanup by @jaredwray in [https://github.com/jaredwray/keyv/pull/1868](https://github.com/jaredwray/keyv/pull/1868)\r\n* mongo - feat: migrating to hookified from eventemitter by @jaredwray in [https://github.com/jaredwray/keyv/pull/1869](https://github.com/jaredwray/keyv/pull/1869)\r\n* mongo - feat: adding createKeyv helper by @jaredwray in [https://github.com/jaredwray/keyv/pull/1871](https://github.com/jaredwray/keyv/pull/1871)\r\n* mongo - feat: moving to more robust options and properties by @jaredwray in [https://github.com/jaredwray/keyv/pull/1872](https://github.com/jaredwray/keyv/pull/1872)\r\n* mongo - fix: moving gridFS property to read only by @jaredwray in [https://github.com/jaredwray/keyv/pull/1873](https://github.com/jaredwray/keyv/pull/1873)\r\n* mongo - feat: adding hasMany and setMany by @jaredwray in [https://github.com/jaredwray/keyv/pull/1874](https://github.com/jaredwray/keyv/pull/1874)\r\n* mono - feat: adding in release action by @jaredwray in [https://github.com/jaredwray/keyv/pull/1875](https://github.com/jaredwray/keyv/pull/1875)\r\n\r\n## New Contributors\r\n* @snomiao made their first contribution in [https://github.com/jaredwray/keyv/pull/1826](https://github.com/jaredwray/keyv/pull/1826)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2026](https://github.com/jaredwray/keyv/compare/2026)-01-20...6.0.0-alpha.1",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2026-01-20",
      "title": "2026-01-20",
      "url": "https://keyv.org/changelog/2026-01-20/",
      "date_published": "2026-01-21",
      "date_modified": "2026-01-21",
      "summary": "<ul>\n<li>website - feat: centralizing third party storage adapters by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1789\">https://github.com/jaredwray/keyv/pull/1789</a></li>\n<li>keyv - feat: validating bun support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1790\">https://github.com/jaredwray/keyv/pull/1790</a></li>\n<li>keyv - feat: adding readme on bun support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1792\">https://github.com/jaredwray/keyv/pull/1792</a></li>\n<li>keyv - feat: adding in jsDoc to KeyvGenericStore by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1793\">https://github.com/jaredwray/keyv/pull/1793</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>website - feat: centralizing third party storage adapters by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1789\">https://github.com/jaredwray/keyv/pull/1789</a></li>\n<li>keyv - feat: validating bun support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1790\">https://github.com/jaredwray/keyv/pull/1790</a></li>\n<li>keyv - feat: adding readme on bun support by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1792\">https://github.com/jaredwray/keyv/pull/1792</a></li>\n<li>keyv - feat: adding in jsDoc to KeyvGenericStore by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1793\">https://github.com/jaredwray/keyv/pull/1793</a></li>\n<li>keyv - feat: implementing generic iterator by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1794\">https://github.com/jaredwray/keyv/pull/1794</a></li>\n<li>keyv - chore: moving to nodejs24 tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1796\">https://github.com/jaredwray/keyv/pull/1796</a></li>\n<li>keyv - feat: adding in integration tests with generic store by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1797\">https://github.com/jaredwray/keyv/pull/1797</a></li>\n<li>redis - fix: adding in error event from redis by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1799\">https://github.com/jaredwray/keyv/pull/1799</a></li>\n<li>redis - fix: adding in the error from redis client attempt 2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1801\">https://github.com/jaredwray/keyv/pull/1801</a></li>\n<li>redis - chore: upgrading redis to 4.0.16 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1802\">https://github.com/jaredwray/keyv/pull/1802</a></li>\n<li>redis - chore: upgrading @faker-js/faker to 10.2.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1803\">https://github.com/jaredwray/keyv/pull/1803</a></li>\n<li>redis - fix: move client initialization to constructor to prevent connection on module load (#1805) by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1806\">https://github.com/jaredwray/keyv/pull/1806</a></li>\n<li>mono - feat: adding in agents.md by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1808\">https://github.com/jaredwray/keyv/pull/1808</a></li>\n<li>mysql - chore: upgrading vitest to 4.0.17 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1809\">https://github.com/jaredwray/keyv/pull/1809</a></li>\n<li>mysql - chore: upgrading mysql2 to 3.16.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1810\">https://github.com/jaredwray/keyv/pull/1810</a></li>\n<li>mysql - fix: iterator with cursor by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1818\">https://github.com/jaredwray/keyv/pull/1818</a></li>\n<li>mysql - fix: documentation and error checking fixes by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1819\">https://github.com/jaredwray/keyv/pull/1819</a></li>\n<li>sqlite - chore: upgrading vitest to 4.0.17 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1811\">https://github.com/jaredwray/keyv/pull/1811</a></li>\n<li>postgres - fix: iteration with more resiliency by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1784\">https://github.com/jaredwray/keyv/pull/1784</a></li>\n<li>postgres - fix: fixing tests typing issue by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1795\">https://github.com/jaredwray/keyv/pull/1795</a></li>\n<li>postgres - chore: upgrading vitest to 4.0.17 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1812\">https://github.com/jaredwray/keyv/pull/1812</a></li>\n<li>postgres - chore: upgrading pg to 8.17.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1813\">https://github.com/jaredwray/keyv/pull/1813</a></li>\n<li>postgres - fix: moving to faker for unique tests by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1814\">https://github.com/jaredwray/keyv/pull/1814</a></li>\n<li>bigmap - chore: upgrading vitest to 4.0.17 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1815\">https://github.com/jaredwray/keyv/pull/1815</a></li>\n<li>bigmap - chore: upgrading hashery to 1.4.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1816\">https://github.com/jaredwray/keyv/pull/1816</a></li>\n<li>bigmap - chore: upgrading hookified to 1.15.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1817\">https://github.com/jaredwray/keyv/pull/1817</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-12-26...2025-01-20</p>",
      "content_text": "## What's Changed\r\n* website - feat: centralizing third party storage adapters by @jaredwray in [https://github.com/jaredwray/keyv/pull/1789](https://github.com/jaredwray/keyv/pull/1789)\r\n* keyv - feat: validating bun support by @jaredwray in [https://github.com/jaredwray/keyv/pull/1790](https://github.com/jaredwray/keyv/pull/1790)\r\n* keyv - feat: adding readme on bun support by @jaredwray in [https://github.com/jaredwray/keyv/pull/1792](https://github.com/jaredwray/keyv/pull/1792)\r\n* keyv - feat: adding in jsDoc to KeyvGenericStore by @jaredwray in [https://github.com/jaredwray/keyv/pull/1793](https://github.com/jaredwray/keyv/pull/1793)\r\n* keyv - feat: implementing generic iterator by @jaredwray in [https://github.com/jaredwray/keyv/pull/1794](https://github.com/jaredwray/keyv/pull/1794)\r\n* keyv - chore: moving to nodejs24 tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1796](https://github.com/jaredwray/keyv/pull/1796)\r\n* keyv - feat: adding in integration tests with generic store by @jaredwray in [https://github.com/jaredwray/keyv/pull/1797](https://github.com/jaredwray/keyv/pull/1797)\r\n* redis - fix: adding in error event from redis by @jaredwray in [https://github.com/jaredwray/keyv/pull/1799](https://github.com/jaredwray/keyv/pull/1799)\r\n* redis - fix: adding in the error from redis client attempt 2 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1801](https://github.com/jaredwray/keyv/pull/1801)\r\n* redis - chore: upgrading redis to 4.0.16 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1802](https://github.com/jaredwray/keyv/pull/1802)\r\n* redis - chore: upgrading @faker-js/faker to 10.2.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1803](https://github.com/jaredwray/keyv/pull/1803)\r\n* redis - fix: move client initialization to constructor to prevent connection on module load (#1805) by @jaredwray in [https://github.com/jaredwray/keyv/pull/1806](https://github.com/jaredwray/keyv/pull/1806)\r\n* mono - feat: adding in agents.md by @jaredwray in [https://github.com/jaredwray/keyv/pull/1808](https://github.com/jaredwray/keyv/pull/1808)\r\n* mysql - chore: upgrading vitest to 4.0.17 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1809](https://github.com/jaredwray/keyv/pull/1809)\r\n* mysql - chore: upgrading mysql2 to 3.16.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1810](https://github.com/jaredwray/keyv/pull/1810)\r\n* mysql - fix: iterator with cursor by @jaredwray in [https://github.com/jaredwray/keyv/pull/1818](https://github.com/jaredwray/keyv/pull/1818)\r\n* mysql - fix: documentation and error checking fixes by @jaredwray in [https://github.com/jaredwray/keyv/pull/1819](https://github.com/jaredwray/keyv/pull/1819)\r\n* sqlite - chore: upgrading vitest to 4.0.17 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1811](https://github.com/jaredwray/keyv/pull/1811)\r\n* postgres - fix: iteration with more resiliency by @jaredwray in [https://github.com/jaredwray/keyv/pull/1784](https://github.com/jaredwray/keyv/pull/1784)\r\n* postgres - fix: fixing tests typing issue by @jaredwray in [https://github.com/jaredwray/keyv/pull/1795](https://github.com/jaredwray/keyv/pull/1795)\r\n* postgres - chore: upgrading vitest to 4.0.17 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1812](https://github.com/jaredwray/keyv/pull/1812)\r\n* postgres - chore: upgrading pg to 8.17.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1813](https://github.com/jaredwray/keyv/pull/1813)\r\n* postgres - fix: moving to faker for unique tests by @jaredwray in [https://github.com/jaredwray/keyv/pull/1814](https://github.com/jaredwray/keyv/pull/1814)\r\n* bigmap - chore: upgrading vitest to 4.0.17 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1815](https://github.com/jaredwray/keyv/pull/1815)\r\n* bigmap - chore: upgrading hashery to 1.4.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1816](https://github.com/jaredwray/keyv/pull/1816)\r\n* bigmap - chore: upgrading hookified to 1.15.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1817](https://github.com/jaredwray/keyv/pull/1817)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-12-26...2025-01-20",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-12-26",
      "title": "2025-12-26",
      "url": "https://keyv.org/changelog/2025-12-26/",
      "date_published": "2025-12-26",
      "date_modified": "2025-12-26",
      "summary": "<ul>\n<li>mysql - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1763\">https://github.com/jaredwray/keyv/pull/1763</a></li>\n<li>mysql - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1764\">https://github.com/jaredwray/keyv/pull/1764</a></li>\n<li>sqlite - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1765\">https://github.com/jaredwray/keyv/pull/1765</a></li>\n<li>sqlite - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1766\">https://github.com/jaredwray/keyv/pull/1766</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>mysql - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1763\">https://github.com/jaredwray/keyv/pull/1763</a></li>\n<li>mysql - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1764\">https://github.com/jaredwray/keyv/pull/1764</a></li>\n<li>sqlite - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1765\">https://github.com/jaredwray/keyv/pull/1765</a></li>\n<li>sqlite - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1766\">https://github.com/jaredwray/keyv/pull/1766</a></li>\n<li>postgres - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1767\">https://github.com/jaredwray/keyv/pull/1767</a></li>\n<li>bigmap - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1768\">https://github.com/jaredwray/keyv/pull/1768</a></li>\n<li>bigmap - chore: upgrading hashery to 1.3.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1769\">https://github.com/jaredwray/keyv/pull/1769</a></li>\n<li>bigmap - chore: upgrading hookified to 1.14.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1770\">https://github.com/jaredwray/keyv/pull/1770</a></li>\n<li>keyv - fix: prevent duplicate namespace prefixing and add iterator test for delete stats by @jorovipe97 in <a href=\"https://github.com/jaredwray/keyv/pull/1772\">https://github.com/jaredwray/keyv/pull/1772</a></li>\n<li>keyv - fix: updating to return when more specific by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1773\">https://github.com/jaredwray/keyv/pull/1773</a></li>\n<li>chore: upgrading vitest to 4.0.16 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1774\">https://github.com/jaredwray/keyv/pull/1774</a></li>\n<li>chore: upgrading @biomejs/biome to 2.3.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1775\">https://github.com/jaredwray/keyv/pull/1775</a></li>\n<li>etcd - chore: upgrading vitest to 4.0.16 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1776\">https://github.com/jaredwray/keyv/pull/1776</a></li>\n<li>etcd - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1777\">https://github.com/jaredwray/keyv/pull/1777</a></li>\n<li>dynamo - chore: upgrading vitest to 4.0.16 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1778\">https://github.com/jaredwray/keyv/pull/1778</a></li>\n<li>dynamo - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1779\">https://github.com/jaredwray/keyv/pull/1779</a></li>\n<li>dynamo - chore: upgrading @aws-sdk to 3.958.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1780\">https://github.com/jaredwray/keyv/pull/1780</a></li>\n<li>mongo - chore: upgrading vitest to 4.0.16 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1781\">https://github.com/jaredwray/keyv/pull/1781</a></li>\n<li>mongo - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1782\">https://github.com/jaredwray/keyv/pull/1782</a></li>\n<li>mongo - chore: upgrading mongodb to 7.0.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1783\">https://github.com/jaredwray/keyv/pull/1783</a></li>\n</ul>\n<h2 id=\"new-contributors\">New Contributors</h2>\n<ul>\n<li>@jorovipe97 made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1772\">https://github.com/jaredwray/keyv/pull/1772</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-12-10...2025-12-26</p>",
      "content_text": "## What's Changed\r\n* mysql - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1763](https://github.com/jaredwray/keyv/pull/1763)\r\n* mysql - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1764](https://github.com/jaredwray/keyv/pull/1764)\r\n* sqlite - chore: upgrading @biomejs/biome to 2.3.9 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1765](https://github.com/jaredwray/keyv/pull/1765)\r\n* sqlite - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1766](https://github.com/jaredwray/keyv/pull/1766)\r\n* postgres - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1767](https://github.com/jaredwray/keyv/pull/1767)\r\n* bigmap - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1768](https://github.com/jaredwray/keyv/pull/1768)\r\n* bigmap - chore: upgrading hashery to 1.3.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1769](https://github.com/jaredwray/keyv/pull/1769)\r\n* bigmap - chore: upgrading hookified to 1.14.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1770](https://github.com/jaredwray/keyv/pull/1770)\r\n* keyv - fix: prevent duplicate namespace prefixing and add iterator test for delete stats by @jorovipe97 in [https://github.com/jaredwray/keyv/pull/1772](https://github.com/jaredwray/keyv/pull/1772)\r\n* keyv - fix: updating to return when more specific by @jaredwray in [https://github.com/jaredwray/keyv/pull/1773](https://github.com/jaredwray/keyv/pull/1773)\r\n* chore: upgrading vitest to 4.0.16 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1774](https://github.com/jaredwray/keyv/pull/1774)\r\n* chore: upgrading @biomejs/biome to 2.3.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1775](https://github.com/jaredwray/keyv/pull/1775)\r\n* etcd - chore: upgrading vitest to 4.0.16 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1776](https://github.com/jaredwray/keyv/pull/1776)\r\n* etcd - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1777](https://github.com/jaredwray/keyv/pull/1777)\r\n* dynamo - chore: upgrading vitest to 4.0.16 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1778](https://github.com/jaredwray/keyv/pull/1778)\r\n* dynamo - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1779](https://github.com/jaredwray/keyv/pull/1779)\r\n* dynamo - chore: upgrading @aws-sdk to 3.958.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1780](https://github.com/jaredwray/keyv/pull/1780)\r\n* mongo - chore: upgrading vitest to 4.0.16 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1781](https://github.com/jaredwray/keyv/pull/1781)\r\n* mongo - chore: upgrading @biomejs/biome to 2.3.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1782](https://github.com/jaredwray/keyv/pull/1782)\r\n* mongo - chore: upgrading mongodb to 7.0.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1783](https://github.com/jaredwray/keyv/pull/1783)\r\n\r\n## New Contributors\r\n* @jorovipe97 made their first contribution in [https://github.com/jaredwray/keyv/pull/1772](https://github.com/jaredwray/keyv/pull/1772)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-12-10...2025-12-26",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-12-10",
      "title": "2025-12-10",
      "url": "https://keyv.org/changelog/2025-12-10/",
      "date_published": "2025-12-10",
      "date_modified": "2025-12-10",
      "summary": "<ul>\n<li>redis - feat: updating readme on why namespaces cause memory bloat by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1726\">https://github.com/jaredwray/keyv/pull/1726</a></li>\n<li>memcache - chore: upgrading @biomejs/biome to 2.3.7 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1728\">https://github.com/jaredwray/keyv/pull/1728</a></li>\n<li>memcache - chore: upgrading tsup to 8.5.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1729\">https://github.com/jaredwray/keyv/pull/1729</a></li>\n<li>memcache - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1730\">https://github.com/jaredwray/keyv/pull/1730</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>redis - feat: updating readme on why namespaces cause memory bloat by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1726\">https://github.com/jaredwray/keyv/pull/1726</a></li>\n<li>memcache - chore: upgrading @biomejs/biome to 2.3.7 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1728\">https://github.com/jaredwray/keyv/pull/1728</a></li>\n<li>memcache - chore: upgrading tsup to 8.5.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1729\">https://github.com/jaredwray/keyv/pull/1729</a></li>\n<li>memcache - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1730\">https://github.com/jaredwray/keyv/pull/1730</a></li>\n<li>etcd - chore: upgrading @biomejs/biome to 2.3.7 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1731\">https://github.com/jaredwray/keyv/pull/1731</a></li>\n<li>etcd - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1732\">https://github.com/jaredwray/keyv/pull/1732</a></li>\n<li>dynamo - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1733\">https://github.com/jaredwray/keyv/pull/1733</a></li>\n<li>dynamo - chore: upgrading aws-sdk to 3.940.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1734\">https://github.com/jaredwray/keyv/pull/1734</a></li>\n<li>mono - feat: moving to minimum release ago to 5 days for updating mod… by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1736\">https://github.com/jaredwray/keyv/pull/1736</a></li>\n<li>serialize - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1737\">https://github.com/jaredwray/keyv/pull/1737</a></li>\n<li>serialize - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1738\">https://github.com/jaredwray/keyv/pull/1738</a></li>\n<li>keyv - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1739\">https://github.com/jaredwray/keyv/pull/1739</a></li>\n<li>keyv - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1740\">https://github.com/jaredwray/keyv/pull/1740</a></li>\n<li>compress-brotli - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1741\">https://github.com/jaredwray/keyv/pull/1741</a></li>\n<li>compress-brotli - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1742\">https://github.com/jaredwray/keyv/pull/1742</a></li>\n<li>compress-gzip - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1743\">https://github.com/jaredwray/keyv/pull/1743</a></li>\n<li>compress-gzip - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1744\">https://github.com/jaredwray/keyv/pull/1744</a></li>\n<li>compress-lz4 - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1745\">https://github.com/jaredwray/keyv/pull/1745</a></li>\n<li>compress-lz4 - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1746\">https://github.com/jaredwray/keyv/pull/1746</a></li>\n<li>mono - chore: upgrading tsup to 8.5.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1747\">https://github.com/jaredwray/keyv/pull/1747</a></li>\n<li>mono - chore: upgrading vitest to 4.0.14 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1748\">https://github.com/jaredwray/keyv/pull/1748</a></li>\n<li>keyv - fix: updating namespace adapter interface to be more permissive by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1749\">https://github.com/jaredwray/keyv/pull/1749</a></li>\n<li>redis - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1752\">https://github.com/jaredwray/keyv/pull/1752</a></li>\n<li>redis - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1753\">https://github.com/jaredwray/keyv/pull/1753</a></li>\n<li>redis - upgrading hookified to 1.13.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1754\">https://github.com/jaredwray/keyv/pull/1754</a></li>\n<li>redis - chore: upgrading @redis/client to 5.10.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1755\">https://github.com/jaredwray/keyv/pull/1755</a></li>\n<li>valkey - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1756\">https://github.com/jaredwray/keyv/pull/1756</a></li>\n<li>valkey - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1757\">https://github.com/jaredwray/keyv/pull/1757</a></li>\n<li>test-suite - chore: upgrading vitest to 4.0.15 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1758\">https://github.com/jaredwray/keyv/pull/1758</a></li>\n<li>test-suite - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1759\">https://github.com/jaredwray/keyv/pull/1759</a></li>\n<li>website - chore: upgrading docula to 0.31.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1760\">https://github.com/jaredwray/keyv/pull/1760</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-11-20...2025-12-10</p>",
      "content_text": "## What's Changed\r\n* redis - feat: updating readme on why namespaces cause memory bloat by @jaredwray in [https://github.com/jaredwray/keyv/pull/1726](https://github.com/jaredwray/keyv/pull/1726)\r\n* memcache - chore: upgrading @biomejs/biome to 2.3.7 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1728](https://github.com/jaredwray/keyv/pull/1728)\r\n* memcache - chore: upgrading tsup to 8.5.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1729](https://github.com/jaredwray/keyv/pull/1729)\r\n* memcache - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1730](https://github.com/jaredwray/keyv/pull/1730)\r\n* etcd - chore: upgrading @biomejs/biome to 2.3.7 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1731](https://github.com/jaredwray/keyv/pull/1731)\r\n* etcd - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1732](https://github.com/jaredwray/keyv/pull/1732)\r\n* dynamo - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1733](https://github.com/jaredwray/keyv/pull/1733)\r\n* dynamo - chore: upgrading aws-sdk to 3.940.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1734](https://github.com/jaredwray/keyv/pull/1734)\r\n* mono - feat: moving to minimum release ago to 5 days for updating mod… by @jaredwray in [https://github.com/jaredwray/keyv/pull/1736](https://github.com/jaredwray/keyv/pull/1736)\r\n* serialize - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1737](https://github.com/jaredwray/keyv/pull/1737)\r\n* serialize - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1738](https://github.com/jaredwray/keyv/pull/1738)\r\n* keyv - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1739](https://github.com/jaredwray/keyv/pull/1739)\r\n* keyv - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1740](https://github.com/jaredwray/keyv/pull/1740)\r\n* compress-brotli - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1741](https://github.com/jaredwray/keyv/pull/1741)\r\n* compress-brotli - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1742](https://github.com/jaredwray/keyv/pull/1742)\r\n* compress-gzip - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1743](https://github.com/jaredwray/keyv/pull/1743)\r\n* compress-gzip - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1744](https://github.com/jaredwray/keyv/pull/1744)\r\n* compress-lz4 - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1745](https://github.com/jaredwray/keyv/pull/1745)\r\n* compress-lz4 - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1746](https://github.com/jaredwray/keyv/pull/1746)\r\n* mono - chore: upgrading tsup to 8.5.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1747](https://github.com/jaredwray/keyv/pull/1747)\r\n* mono - chore: upgrading vitest to 4.0.14 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1748](https://github.com/jaredwray/keyv/pull/1748)\r\n* keyv - fix: updating namespace adapter interface to be more permissive by @jaredwray in [https://github.com/jaredwray/keyv/pull/1749](https://github.com/jaredwray/keyv/pull/1749)\r\n* redis - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1752](https://github.com/jaredwray/keyv/pull/1752)\r\n* redis - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1753](https://github.com/jaredwray/keyv/pull/1753)\r\n* redis - upgrading hookified to 1.13.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1754](https://github.com/jaredwray/keyv/pull/1754)\r\n* redis - chore: upgrading @redis/client to 5.10.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1755](https://github.com/jaredwray/keyv/pull/1755)\r\n* valkey - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1756](https://github.com/jaredwray/keyv/pull/1756)\r\n* valkey - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1757](https://github.com/jaredwray/keyv/pull/1757)\r\n* test-suite - chore: upgrading vitest to 4.0.15 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1758](https://github.com/jaredwray/keyv/pull/1758)\r\n* test-suite - chore: upgrading @biomejs/biome to 2.3.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1759](https://github.com/jaredwray/keyv/pull/1759)\r\n* website - chore: upgrading docula to 0.31.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1760](https://github.com/jaredwray/keyv/pull/1760)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-11-20...2025-12-10",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-11-20",
      "title": "2025-11-20",
      "url": "https://keyv.org/changelog/2025-11-20/",
      "date_published": "2025-11-21",
      "date_modified": "2025-11-21",
      "summary": "<ul>\n<li>postgres - feat: setMany support by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1723\">https://github.com/jaredwray/keyv/pull/1723</a></li>\n<li>mysql - fix: resolving security concern with has method by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1724\">https://github.com/jaredwray/keyv/pull/1724</a></li>\n<li>mysql - feat: adding in jsDocs by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1725\">https://github.com/jaredwray/keyv/pull/1725</a></li>\n</ul>\n<p><strong>Full Changelog</strong>:...</p>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>postgres - feat: setMany support by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1723\">https://github.com/jaredwray/keyv/pull/1723</a></li>\n<li>mysql - fix: resolving security concern with has method by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1724\">https://github.com/jaredwray/keyv/pull/1724</a></li>\n<li>mysql - feat: adding in jsDocs by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1725\">https://github.com/jaredwray/keyv/pull/1725</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-11-17...2025-11-20</p>",
      "content_text": "## What's Changed\r\n* postgres - feat: setMany support by @darky in [https://github.com/jaredwray/keyv/pull/1723](https://github.com/jaredwray/keyv/pull/1723)\r\n* mysql - fix: resolving security concern with has method by @jaredwray in [https://github.com/jaredwray/keyv/pull/1724](https://github.com/jaredwray/keyv/pull/1724)\r\n* mysql - feat: adding in jsDocs by @jaredwray in [https://github.com/jaredwray/keyv/pull/1725](https://github.com/jaredwray/keyv/pull/1725)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-11-17...2025-11-20",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-11-17",
      "title": "2025-11-17",
      "url": "https://keyv.org/changelog/2025-11-17/",
      "date_published": "2025-11-18",
      "date_modified": "2025-11-18",
      "summary": "<ul>\n<li>bigmap - feat: moving to hashery for hashing by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1694\">https://github.com/jaredwray/keyv/pull/1694</a></li>\n<li>postgres - perf: getMany O(n^2) -> O(2n) by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1695\">https://github.com/jaredwray/keyv/pull/1695</a></li>\n<li>keyv - fix: setting the exports correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1697\">https://github.com/jaredwray/keyv/pull/1697</a></li>\n<li>bigmap - fix: fixing exports to be correct by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1698\">https://github.com/jaredwray/keyv/pull/1698</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>bigmap - feat: moving to hashery for hashing by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1694\">https://github.com/jaredwray/keyv/pull/1694</a></li>\n<li>postgres - perf: getMany O(n^2) -> O(2n) by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1695\">https://github.com/jaredwray/keyv/pull/1695</a></li>\n<li>keyv - fix: setting the exports correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1697\">https://github.com/jaredwray/keyv/pull/1697</a></li>\n<li>bigmap - fix: fixing exports to be correct by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1698\">https://github.com/jaredwray/keyv/pull/1698</a></li>\n<li>compress-brotli - fix: fixing the exports by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1699\">https://github.com/jaredwray/keyv/pull/1699</a></li>\n<li>compress-gzip - fix: updating exports to work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1700\">https://github.com/jaredwray/keyv/pull/1700</a></li>\n<li>compress-lz4 - fix: getting exports to work better by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1701\">https://github.com/jaredwray/keyv/pull/1701</a></li>\n<li>dynamo - fix: updating exports to work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1702\">https://github.com/jaredwray/keyv/pull/1702</a></li>\n<li>etcd - fix: making exports work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1703\">https://github.com/jaredwray/keyv/pull/1703</a></li>\n<li>memcache - fix: making exports work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1704\">https://github.com/jaredwray/keyv/pull/1704</a></li>\n<li>mongo - fix: getting exports to work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1705\">https://github.com/jaredwray/keyv/pull/1705</a></li>\n<li>mysql - fix: exports are working correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1706\">https://github.com/jaredwray/keyv/pull/1706</a></li>\n<li>postgres - fix: exports working correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1707\">https://github.com/jaredwray/keyv/pull/1707</a></li>\n<li>redis - fix: exports are now working correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1708\">https://github.com/jaredwray/keyv/pull/1708</a></li>\n<li>serialize - fix: getting exports to work better by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1709\">https://github.com/jaredwray/keyv/pull/1709</a></li>\n<li>sqlite - fix: exports now work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1710\">https://github.com/jaredwray/keyv/pull/1710</a></li>\n<li>test-suite - fix: exports need to work correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1711\">https://github.com/jaredwray/keyv/pull/1711</a></li>\n<li>valkey - fix: exports working correctly by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1712\">https://github.com/jaredwray/keyv/pull/1712</a></li>\n<li>mysql - chore: upgrading vitest to 4.0.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1713\">https://github.com/jaredwray/keyv/pull/1713</a></li>\n<li>mysql - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1714\">https://github.com/jaredwray/keyv/pull/1714</a></li>\n<li>mysql - chore: upgrading mysql2 to 3.15.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1715\">https://github.com/jaredwray/keyv/pull/1715</a></li>\n<li>sqlite - chore: upgrading vitest to 4.0.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1716\">https://github.com/jaredwray/keyv/pull/1716</a></li>\n<li>sqlite - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1717\">https://github.com/jaredwray/keyv/pull/1717</a></li>\n<li>postgres - chore: upgrading vitest to 4.0.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1718\">https://github.com/jaredwray/keyv/pull/1718</a></li>\n<li>postgres - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1719\">https://github.com/jaredwray/keyv/pull/1719</a></li>\n<li>bigmap - chore: upgrading vitest to 4.0.10 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1720\">https://github.com/jaredwray/keyv/pull/1720</a></li>\n<li>bigmap - chore: upgrading hookified to 1.13.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1721\">https://github.com/jaredwray/keyv/pull/1721</a></li>\n<li>bigmap - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1722\">https://github.com/jaredwray/keyv/pull/1722</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-11-11...2025-11-17</p>",
      "content_text": "## What's Changed\r\n* bigmap - feat: moving to hashery for hashing by @jaredwray in [https://github.com/jaredwray/keyv/pull/1694](https://github.com/jaredwray/keyv/pull/1694)\r\n* postgres - perf: getMany O(n^2) -> O(2n) by @darky in [https://github.com/jaredwray/keyv/pull/1695](https://github.com/jaredwray/keyv/pull/1695)\r\n* keyv - fix: setting the exports correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1697](https://github.com/jaredwray/keyv/pull/1697)\r\n* bigmap - fix: fixing exports to be correct by @jaredwray in [https://github.com/jaredwray/keyv/pull/1698](https://github.com/jaredwray/keyv/pull/1698)\r\n* compress-brotli - fix: fixing the exports by @jaredwray in [https://github.com/jaredwray/keyv/pull/1699](https://github.com/jaredwray/keyv/pull/1699)\r\n* compress-gzip - fix: updating exports to work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1700](https://github.com/jaredwray/keyv/pull/1700)\r\n* compress-lz4 - fix: getting exports to work better by @jaredwray in [https://github.com/jaredwray/keyv/pull/1701](https://github.com/jaredwray/keyv/pull/1701)\r\n* dynamo - fix: updating exports to work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1702](https://github.com/jaredwray/keyv/pull/1702)\r\n* etcd - fix: making exports work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1703](https://github.com/jaredwray/keyv/pull/1703)\r\n* memcache - fix: making exports work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1704](https://github.com/jaredwray/keyv/pull/1704)\r\n* mongo - fix: getting exports to work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1705](https://github.com/jaredwray/keyv/pull/1705)\r\n* mysql - fix: exports are working correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1706](https://github.com/jaredwray/keyv/pull/1706)\r\n* postgres - fix: exports working correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1707](https://github.com/jaredwray/keyv/pull/1707)\r\n* redis - fix: exports are now working correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1708](https://github.com/jaredwray/keyv/pull/1708)\r\n* serialize - fix: getting exports to work better by @jaredwray in [https://github.com/jaredwray/keyv/pull/1709](https://github.com/jaredwray/keyv/pull/1709)\r\n* sqlite - fix: exports now work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1710](https://github.com/jaredwray/keyv/pull/1710)\r\n* test-suite - fix: exports need to work correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1711](https://github.com/jaredwray/keyv/pull/1711)\r\n* valkey - fix: exports working correctly by @jaredwray in [https://github.com/jaredwray/keyv/pull/1712](https://github.com/jaredwray/keyv/pull/1712)\r\n* mysql - chore: upgrading vitest to 4.0.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1713](https://github.com/jaredwray/keyv/pull/1713)\r\n* mysql - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1714](https://github.com/jaredwray/keyv/pull/1714)\r\n* mysql - chore: upgrading mysql2 to 3.15.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1715](https://github.com/jaredwray/keyv/pull/1715)\r\n* sqlite - chore: upgrading vitest to 4.0.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1716](https://github.com/jaredwray/keyv/pull/1716)\r\n* sqlite - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1717](https://github.com/jaredwray/keyv/pull/1717)\r\n* postgres - chore: upgrading vitest to 4.0.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1718](https://github.com/jaredwray/keyv/pull/1718)\r\n* postgres - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1719](https://github.com/jaredwray/keyv/pull/1719)\r\n* bigmap - chore: upgrading vitest to 4.0.10 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1720](https://github.com/jaredwray/keyv/pull/1720)\r\n* bigmap - chore: upgrading hookified to 1.13.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1721](https://github.com/jaredwray/keyv/pull/1721)\r\n* bigmap - chore: upgrading @biomejs/biome to 2.3.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1722](https://github.com/jaredwray/keyv/pull/1722)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-11-11...2025-11-17",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-11-11",
      "title": "2025-11-11",
      "url": "https://keyv.org/changelog/2025-11-11/",
      "date_published": "2025-11-11",
      "date_modified": "2025-11-11",
      "summary": "<ul>\n<li>postgres - feat: connect method as public by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1681\">https://github.com/jaredwray/keyv/pull/1681</a></li>\n<li>redis - chore: upgrading vitest to 4.0.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1682\">https://github.com/jaredwray/keyv/pull/1682</a></li>\n<li>redis - chore: upgrading hookified to 1.12.2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1683\">https://github.com/jaredwray/keyv/pull/1683</a></li>\n<li>redis - chore: upgrading @redis/client to 5.9.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1684\">https://github.com/jaredwray/keyv/pull/1684</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>postgres - feat: connect method as public by @darky in <a href=\"https://github.com/jaredwray/keyv/pull/1681\">https://github.com/jaredwray/keyv/pull/1681</a></li>\n<li>redis - chore: upgrading vitest to 4.0.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1682\">https://github.com/jaredwray/keyv/pull/1682</a></li>\n<li>redis - chore: upgrading hookified to 1.12.2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1683\">https://github.com/jaredwray/keyv/pull/1683</a></li>\n<li>redis - chore: upgrading @redis/client to 5.9.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1684\">https://github.com/jaredwray/keyv/pull/1684</a></li>\n<li>redis - feat: moving all the types to a types file by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1685\">https://github.com/jaredwray/keyv/pull/1685</a></li>\n<li>redis - feat: moving create helper functions to create.ts by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1686\">https://github.com/jaredwray/keyv/pull/1686</a></li>\n<li>valkey - chore: upgrading vitest to 4.0.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1687\">https://github.com/jaredwray/keyv/pull/1687</a></li>\n<li>valkey - chore: upgrading @biomejs/biome to 2.3.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1689\">https://github.com/jaredwray/keyv/pull/1689</a></li>\n<li>test-suite - chore: upgrading @biomejs/biome to 2.3.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1690\">https://github.com/jaredwray/keyv/pull/1690</a></li>\n<li>test-suite - chore: upgrading vitest to 4.0.8 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1691\">https://github.com/jaredwray/keyv/pull/1691</a></li>\n<li>website - chore: upgrading docula to 0.31.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1692\">https://github.com/jaredwray/keyv/pull/1692</a></li>\n<li>keyv - fix: POST_GET hook should fire on a miss by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1693\">https://github.com/jaredwray/keyv/pull/1693</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-11-04...2025-11-11</p>",
      "content_text": "## What's Changed\r\n* postgres - feat: connect method as public by @darky in [https://github.com/jaredwray/keyv/pull/1681](https://github.com/jaredwray/keyv/pull/1681)\r\n* redis - chore: upgrading vitest to 4.0.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1682](https://github.com/jaredwray/keyv/pull/1682)\r\n* redis - chore: upgrading hookified to 1.12.2 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1683](https://github.com/jaredwray/keyv/pull/1683)\r\n* redis - chore: upgrading @redis/client to 5.9.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1684](https://github.com/jaredwray/keyv/pull/1684)\r\n* redis - feat: moving all the types to a types file by @jaredwray in [https://github.com/jaredwray/keyv/pull/1685](https://github.com/jaredwray/keyv/pull/1685)\r\n* redis - feat: moving create helper functions to create.ts by @jaredwray in [https://github.com/jaredwray/keyv/pull/1686](https://github.com/jaredwray/keyv/pull/1686)\r\n* valkey - chore: upgrading vitest to 4.0.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1687](https://github.com/jaredwray/keyv/pull/1687)\r\n* valkey - chore: upgrading @biomejs/biome to 2.3.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1689](https://github.com/jaredwray/keyv/pull/1689)\r\n* test-suite - chore: upgrading @biomejs/biome to 2.3.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1690](https://github.com/jaredwray/keyv/pull/1690)\r\n* test-suite - chore: upgrading vitest to 4.0.8 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1691](https://github.com/jaredwray/keyv/pull/1691)\r\n* website - chore: upgrading docula to 0.31.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1692](https://github.com/jaredwray/keyv/pull/1692)\r\n* keyv - fix: POST_GET hook should fire on a miss by @jaredwray in [https://github.com/jaredwray/keyv/pull/1693](https://github.com/jaredwray/keyv/pull/1693)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-11-04...2025-11-11",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-11-04",
      "title": "2025-11-04",
      "url": "https://keyv.org/changelog/2025-11-04/",
      "date_published": "2025-11-04",
      "date_modified": "2025-11-04",
      "summary": "<ul>\n<li>mono - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1659\">https://github.com/jaredwray/keyv/pull/1659</a></li>\n<li>mono - chore: upgrading typescript to 5.9.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1660\">https://github.com/jaredwray/keyv/pull/1660</a></li>\n<li>mono - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1661\">https://github.com/jaredwray/keyv/pull/1661</a></li>\n<li>mono - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1662\">https://github.com/jaredwray/keyv/pull/1662</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>mono - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1659\">https://github.com/jaredwray/keyv/pull/1659</a></li>\n<li>mono - chore: upgrading typescript to 5.9.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1660\">https://github.com/jaredwray/keyv/pull/1660</a></li>\n<li>mono - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1661\">https://github.com/jaredwray/keyv/pull/1661</a></li>\n<li>mono - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1662\">https://github.com/jaredwray/keyv/pull/1662</a></li>\n<li>keyv - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1663\">https://github.com/jaredwray/keyv/pull/1663</a></li>\n<li>keyv - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1664\">https://github.com/jaredwray/keyv/pull/1664</a></li>\n<li>keyv - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1665\">https://github.com/jaredwray/keyv/pull/1665</a></li>\n<li>keyv - chore: upgrading @faker-js/faker to 10.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1666\">https://github.com/jaredwray/keyv/pull/1666</a></li>\n<li>serialize - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1667\">https://github.com/jaredwray/keyv/pull/1667</a></li>\n<li>serialize - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1668\">https://github.com/jaredwray/keyv/pull/1668</a></li>\n<li>serialize - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1670\">https://github.com/jaredwray/keyv/pull/1670</a></li>\n<li>compress-brotli - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1671\">https://github.com/jaredwray/keyv/pull/1671</a></li>\n<li>Update JSDoc and main docs to clarify that TTL is in milliseconds by @natesilva in <a href=\"https://github.com/jaredwray/keyv/pull/1669\">https://github.com/jaredwray/keyv/pull/1669</a></li>\n<li>compres-brotli - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1672\">https://github.com/jaredwray/keyv/pull/1672</a></li>\n<li>compress-gzip - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1673\">https://github.com/jaredwray/keyv/pull/1673</a></li>\n<li>compress-gzip - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1674\">https://github.com/jaredwray/keyv/pull/1674</a></li>\n<li>compress-gzip - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1675\">https://github.com/jaredwray/keyv/pull/1675</a></li>\n<li>compress-lz4 - chore: upgrading vitest to 4.0.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1676\">https://github.com/jaredwray/keyv/pull/1676</a></li>\n<li>compress-gzip - chore: upgrading rimraf to 6.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1677\">https://github.com/jaredwray/keyv/pull/1677</a></li>\n<li>compress-lz4 - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1678\">https://github.com/jaredwray/keyv/pull/1678</a></li>\n</ul>\n<h2 id=\"new-contributors\">New Contributors</h2>\n<ul>\n<li>@natesilva made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1669\">https://github.com/jaredwray/keyv/pull/1669</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-10-25...2025-11-04</p>",
      "content_text": "## What's Changed\r\n* mono - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1659](https://github.com/jaredwray/keyv/pull/1659)\r\n* mono - chore: upgrading typescript to 5.9.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1660](https://github.com/jaredwray/keyv/pull/1660)\r\n* mono - chore: upgrading rimraf to 6.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1661](https://github.com/jaredwray/keyv/pull/1661)\r\n* mono - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1662](https://github.com/jaredwray/keyv/pull/1662)\r\n* keyv - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1663](https://github.com/jaredwray/keyv/pull/1663)\r\n* keyv - chore: upgrading rimraf to 6.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1664](https://github.com/jaredwray/keyv/pull/1664)\r\n* keyv - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1665](https://github.com/jaredwray/keyv/pull/1665)\r\n* keyv - chore: upgrading @faker-js/faker to 10.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1666](https://github.com/jaredwray/keyv/pull/1666)\r\n* serialize - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1667](https://github.com/jaredwray/keyv/pull/1667)\r\n* serialize - chore: upgrading rimraf to 6.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1668](https://github.com/jaredwray/keyv/pull/1668)\r\n* serialize - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1670](https://github.com/jaredwray/keyv/pull/1670)\r\n* compress-brotli - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1671](https://github.com/jaredwray/keyv/pull/1671)\r\n* Update JSDoc and main docs to clarify that TTL is in milliseconds by @natesilva in [https://github.com/jaredwray/keyv/pull/1669](https://github.com/jaredwray/keyv/pull/1669)\r\n* compres-brotli - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1672](https://github.com/jaredwray/keyv/pull/1672)\r\n* compress-gzip - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1673](https://github.com/jaredwray/keyv/pull/1673)\r\n* compress-gzip - chore: upgrading rimraf to 6.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1674](https://github.com/jaredwray/keyv/pull/1674)\r\n* compress-gzip - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1675](https://github.com/jaredwray/keyv/pull/1675)\r\n* compress-lz4 - chore: upgrading vitest to 4.0.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1676](https://github.com/jaredwray/keyv/pull/1676)\r\n* compress-gzip - chore: upgrading rimraf to 6.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1677](https://github.com/jaredwray/keyv/pull/1677)\r\n* compress-lz4 - chore: upgrading @biomejs/biome to 2.3.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1678](https://github.com/jaredwray/keyv/pull/1678)\r\n\r\n## New Contributors\r\n* @natesilva made their first contribution in [https://github.com/jaredwray/keyv/pull/1669](https://github.com/jaredwray/keyv/pull/1669)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-10-25...2025-11-04",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-10-25",
      "title": "2025-10-25",
      "url": "https://keyv.org/changelog/2025-10-25/",
      "date_published": "2025-10-25",
      "date_modified": "2025-10-25",
      "summary": "<ul>\n<li>website - feat: Add explanation caching nestjs docs by @junghyunbak in <a href=\"https://github.com/jaredwray/keyv/pull/1645\">https://github.com/jaredwray/keyv/pull/1645</a></li>\n<li>memcache - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1646\">https://github.com/jaredwray/keyv/pull/1646</a></li>\n<li>memcache - chore: upgrading typescript to 5.9.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1647\">https://github.com/jaredwray/keyv/pull/1647</a></li>\n<li>memcache - chore: upgrading vitest to 4.0.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1648\">https://github.com/jaredwray/keyv/pull/1648</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>website - feat: Add explanation caching nestjs docs by @junghyunbak in <a href=\"https://github.com/jaredwray/keyv/pull/1645\">https://github.com/jaredwray/keyv/pull/1645</a></li>\n<li>memcache - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1646\">https://github.com/jaredwray/keyv/pull/1646</a></li>\n<li>memcache - chore: upgrading typescript to 5.9.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1647\">https://github.com/jaredwray/keyv/pull/1647</a></li>\n<li>memcache - chore: upgrading vitest to 4.0.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1648\">https://github.com/jaredwray/keyv/pull/1648</a></li>\n<li>etcd - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1649\">https://github.com/jaredwray/keyv/pull/1649</a></li>\n<li>etcd - chore: upgrading typescript to 5.9.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1650\">https://github.com/jaredwray/keyv/pull/1650</a></li>\n<li>etcd - chore: upgrading vitest to 4.0.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1651\">https://github.com/jaredwray/keyv/pull/1651</a></li>\n<li>dynamo - chore: upgrading vitest to 4.0.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1652\">https://github.com/jaredwray/keyv/pull/1652</a></li>\n<li>dynamo - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1653\">https://github.com/jaredwray/keyv/pull/1653</a></li>\n<li>dynamo - chore: upgrading @aws-sdk to 3.917.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1654\">https://github.com/jaredwray/keyv/pull/1654</a></li>\n<li>mongo - chore: upgrading vitest to 4.0.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1655\">https://github.com/jaredwray/keyv/pull/1655</a></li>\n<li>compress-brotli - fix: removing c8 as no longer needed by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1656\">https://github.com/jaredwray/keyv/pull/1656</a></li>\n<li>keyv - feat: adding in BigMap in Keyv documentation by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1657\">https://github.com/jaredwray/keyv/pull/1657</a></li>\n<li>bigmap - feat: updating documentation by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1658\">https://github.com/jaredwray/keyv/pull/1658</a></li>\n</ul>\n<h2 id=\"new-contributors\">New Contributors</h2>\n<ul>\n<li>@junghyunbak made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1645\">https://github.com/jaredwray/keyv/pull/1645</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-10-18...2025-10-25</p>",
      "content_text": "## What's Changed\r\n* website - feat: Add explanation caching nestjs docs by @junghyunbak in [https://github.com/jaredwray/keyv/pull/1645](https://github.com/jaredwray/keyv/pull/1645)\r\n* memcache - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1646](https://github.com/jaredwray/keyv/pull/1646)\r\n* memcache - chore: upgrading typescript to 5.9.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1647](https://github.com/jaredwray/keyv/pull/1647)\r\n* memcache - chore: upgrading vitest to 4.0.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1648](https://github.com/jaredwray/keyv/pull/1648)\r\n* etcd - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1649](https://github.com/jaredwray/keyv/pull/1649)\r\n* etcd - chore: upgrading typescript to 5.9.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1650](https://github.com/jaredwray/keyv/pull/1650)\r\n* etcd - chore: upgrading vitest to 4.0.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1651](https://github.com/jaredwray/keyv/pull/1651)\r\n* dynamo - chore: upgrading vitest to 4.0.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1652](https://github.com/jaredwray/keyv/pull/1652)\r\n* dynamo - chore: upgrading @biomejs/biome to 2.3.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1653](https://github.com/jaredwray/keyv/pull/1653)\r\n* dynamo - chore: upgrading @aws-sdk to 3.917.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1654](https://github.com/jaredwray/keyv/pull/1654)\r\n* mongo - chore: upgrading vitest to 4.0.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1655](https://github.com/jaredwray/keyv/pull/1655)\r\n* compress-brotli - fix: removing c8 as no longer needed by @jaredwray in [https://github.com/jaredwray/keyv/pull/1656](https://github.com/jaredwray/keyv/pull/1656)\r\n* keyv - feat: adding in BigMap in Keyv documentation by @jaredwray in [https://github.com/jaredwray/keyv/pull/1657](https://github.com/jaredwray/keyv/pull/1657)\r\n* bigmap - feat: updating documentation by @jaredwray in [https://github.com/jaredwray/keyv/pull/1658](https://github.com/jaredwray/keyv/pull/1658)\r\n\r\n## New Contributors\r\n* @junghyunbak made their first contribution in [https://github.com/jaredwray/keyv/pull/1645](https://github.com/jaredwray/keyv/pull/1645)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-10-18...2025-10-25",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-10-18",
      "title": "2025-10-18",
      "url": "https://keyv.org/changelog/2025-10-18/",
      "date_published": "2025-10-18",
      "date_modified": "2025-10-18",
      "summary": "<ul>\n<li>mysql - chore: upgrading mysql2 to 3.15.2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1633\">https://github.com/jaredwray/keyv/pull/1633</a></li>\n<li>mysql - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1634\">https://github.com/jaredwray/keyv/pull/1634</a></li>\n<li>sqlite - chore: upgrading sqlite to 10.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1635\">https://github.com/jaredwray/keyv/pull/1635</a></li>\n<li>sqlite - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1636\">https://github.com/jaredwray/keyv/pull/1636</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>mysql - chore: upgrading mysql2 to 3.15.2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1633\">https://github.com/jaredwray/keyv/pull/1633</a></li>\n<li>mysql - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1634\">https://github.com/jaredwray/keyv/pull/1634</a></li>\n<li>sqlite - chore: upgrading sqlite to 10.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1635\">https://github.com/jaredwray/keyv/pull/1635</a></li>\n<li>sqlite - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1636\">https://github.com/jaredwray/keyv/pull/1636</a></li>\n<li>postgres - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1637\">https://github.com/jaredwray/keyv/pull/1637</a></li>\n<li>bigmap - chore: upgrading hookified to 1.12.2 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1638\">https://github.com/jaredwray/keyv/pull/1638</a></li>\n<li>bigmap - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1639\">https://github.com/jaredwray/keyv/pull/1639</a></li>\n<li>bigmap - chore: upgrading @faker-js/faker to 10.1.0 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1640\">https://github.com/jaredwray/keyv/pull/1640</a></li>\n<li>bigmap - feat: updating readme by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1641\">https://github.com/jaredwray/keyv/pull/1641</a></li>\n<li>bigmap - feat: adding in createKeyv function by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1642\">https://github.com/jaredwray/keyv/pull/1642</a></li>\n<li>keyv - feat: adding in capabilities checker by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1643\">https://github.com/jaredwray/keyv/pull/1643</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-10-09...2025-10-18</p>",
      "content_text": "## What's Changed\r\n* mysql - chore: upgrading mysql2 to 3.15.2 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1633](https://github.com/jaredwray/keyv/pull/1633)\r\n* mysql - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1634](https://github.com/jaredwray/keyv/pull/1634)\r\n* sqlite - chore: upgrading sqlite to 10.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1635](https://github.com/jaredwray/keyv/pull/1635)\r\n* sqlite - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1636](https://github.com/jaredwray/keyv/pull/1636)\r\n* postgres - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1637](https://github.com/jaredwray/keyv/pull/1637)\r\n* bigmap - chore: upgrading hookified to 1.12.2 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1638](https://github.com/jaredwray/keyv/pull/1638)\r\n* bigmap - chore: upgrading @biomejs/biome to 2.2.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1639](https://github.com/jaredwray/keyv/pull/1639)\r\n* bigmap - chore: upgrading @faker-js/faker to 10.1.0 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1640](https://github.com/jaredwray/keyv/pull/1640)\r\n* bigmap - feat: updating readme by @jaredwray in [https://github.com/jaredwray/keyv/pull/1641](https://github.com/jaredwray/keyv/pull/1641)\r\n* bigmap - feat: adding in createKeyv function by @jaredwray in [https://github.com/jaredwray/keyv/pull/1642](https://github.com/jaredwray/keyv/pull/1642)\r\n* keyv - feat: adding in capabilities checker by @jaredwray in [https://github.com/jaredwray/keyv/pull/1643](https://github.com/jaredwray/keyv/pull/1643)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-10-09...2025-10-18",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-10-09",
      "title": "2025-10-09",
      "url": "https://keyv.org/changelog/2025-10-09/",
      "date_published": "2025-10-10",
      "date_modified": "2025-10-10",
      "summary": "<ul>\n<li>sqlite - fix: adding in better filtering on table input by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1622\">https://github.com/jaredwray/keyv/pull/1622</a></li>\n<li>bigmap - fix: adding in forEach code that works by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1623\">https://github.com/jaredwray/keyv/pull/1623</a></li>\n<li>valkey - fix: removing console.log that was added by accident by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1624\">https://github.com/jaredwray/keyv/pull/1624</a></li>\n<li>valkey - chore: adding in iterator test on functionality by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1625\">https://github.com/jaredwray/keyv/pull/1625</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>sqlite - fix: adding in better filtering on table input by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1622\">https://github.com/jaredwray/keyv/pull/1622</a></li>\n<li>bigmap - fix: adding in forEach code that works by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1623\">https://github.com/jaredwray/keyv/pull/1623</a></li>\n<li>valkey - fix: removing console.log that was added by accident by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1624\">https://github.com/jaredwray/keyv/pull/1624</a></li>\n<li>valkey - chore: adding in iterator test on functionality by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1625\">https://github.com/jaredwray/keyv/pull/1625</a></li>\n<li>redis - fix: redis docs by @ATGardner in <a href=\"https://github.com/jaredwray/keyv/pull/1626\">https://github.com/jaredwray/keyv/pull/1626</a></li>\n<li>redis - chore: upgrading @biomejs/biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1628\">https://github.com/jaredwray/keyv/pull/1628</a></li>\n<li>redis - chore: upgrading hookified to 1.12.1 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1629\">https://github.com/jaredwray/keyv/pull/1629</a></li>\n<li>redis - chore: upgrading @redis/client to 5.8.3 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1630\">https://github.com/jaredwray/keyv/pull/1630</a></li>\n<li>test-suite - chore: upgrading @biomejs/biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1631\">https://github.com/jaredwray/keyv/pull/1631</a></li>\n<li>website - chore: upgrading tsx to 4.20.6 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1632\">https://github.com/jaredwray/keyv/pull/1632</a></li>\n<li>mono - feat: Sort adapters &#x26; add Cloudflare KV adapter. by @ariesclark in <a href=\"https://github.com/jaredwray/keyv/pull/1627\">https://github.com/jaredwray/keyv/pull/1627</a></li>\n</ul>\n<h2 id=\"new-contributors\">New Contributors</h2>\n<ul>\n<li>@ATGardner made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1626\">https://github.com/jaredwray/keyv/pull/1626</a></li>\n<li>@ariesclark made their first contribution in <a href=\"https://github.com/jaredwray/keyv/pull/1627\">https://github.com/jaredwray/keyv/pull/1627</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-10-03...2025-10-09</p>",
      "content_text": "## What's Changed\r\n* sqlite - fix: adding in better filtering on table input by @jaredwray in [https://github.com/jaredwray/keyv/pull/1622](https://github.com/jaredwray/keyv/pull/1622)\r\n* bigmap - fix: adding in forEach code that works by @jaredwray in [https://github.com/jaredwray/keyv/pull/1623](https://github.com/jaredwray/keyv/pull/1623)\r\n* valkey - fix: removing console.log that was added by accident by @jaredwray in [https://github.com/jaredwray/keyv/pull/1624](https://github.com/jaredwray/keyv/pull/1624)\r\n* valkey - chore: adding in iterator test on functionality by @jaredwray in [https://github.com/jaredwray/keyv/pull/1625](https://github.com/jaredwray/keyv/pull/1625)\r\n* redis - fix: redis docs by @ATGardner in [https://github.com/jaredwray/keyv/pull/1626](https://github.com/jaredwray/keyv/pull/1626)\r\n* redis - chore: upgrading @biomejs/biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1628](https://github.com/jaredwray/keyv/pull/1628)\r\n* redis - chore: upgrading hookified to 1.12.1 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1629](https://github.com/jaredwray/keyv/pull/1629)\r\n* redis - chore: upgrading @redis/client to 5.8.3 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1630](https://github.com/jaredwray/keyv/pull/1630)\r\n* test-suite - chore: upgrading @biomejs/biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1631](https://github.com/jaredwray/keyv/pull/1631)\r\n* website - chore: upgrading tsx to 4.20.6 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1632](https://github.com/jaredwray/keyv/pull/1632)\r\n* mono - feat: Sort adapters & add Cloudflare KV adapter. by @ariesclark in [https://github.com/jaredwray/keyv/pull/1627](https://github.com/jaredwray/keyv/pull/1627)\r\n\r\n## New Contributors\r\n* @ATGardner made their first contribution in [https://github.com/jaredwray/keyv/pull/1626](https://github.com/jaredwray/keyv/pull/1626)\r\n* @ariesclark made their first contribution in [https://github.com/jaredwray/keyv/pull/1627](https://github.com/jaredwray/keyv/pull/1627)\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-10-03...2025-10-09",
      "tags": [
        "Release"
      ]
    },
    {
      "id": "2025-10-03",
      "title": "2025-10-03",
      "url": "https://keyv.org/changelog/2025-10-03/",
      "date_published": "2025-10-03",
      "date_modified": "2025-10-03",
      "summary": "<ul>\n<li>valkey - fix: removing sets namespace as it is not needed by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1613\">https://github.com/jaredwray/keyv/pull/1613</a></li>\n<li>keyv - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1614\">https://github.com/jaredwray/keyv/pull/1614</a></li>\n<li>serialize - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1616\">https://github.com/jaredwray/keyv/pull/1616</a></li>\n<li>mono - chore: removing webpack as unneeded by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1617\">https://github.com/jaredwray/keyv/pull/1617</a></li>\n</ul>",
      "content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>valkey - fix: removing sets namespace as it is not needed by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1613\">https://github.com/jaredwray/keyv/pull/1613</a></li>\n<li>keyv - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1614\">https://github.com/jaredwray/keyv/pull/1614</a></li>\n<li>serialize - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1616\">https://github.com/jaredwray/keyv/pull/1616</a></li>\n<li>mono - chore: removing webpack as unneeded by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1617\">https://github.com/jaredwray/keyv/pull/1617</a></li>\n<li>compress-brotli - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1618\">https://github.com/jaredwray/keyv/pull/1618</a></li>\n<li>compress-gzip - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1619\">https://github.com/jaredwray/keyv/pull/1619</a></li>\n<li>compress-lz4 - chore: upgrading biome to 2.2.5 by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1620\">https://github.com/jaredwray/keyv/pull/1620</a></li>\n<li>mongo - fix: possible nosql injection attack on gridfs by @jaredwray in <a href=\"https://github.com/jaredwray/keyv/pull/1621\">https://github.com/jaredwray/keyv/pull/1621</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/keyv/compare/2025\">https://github.com/jaredwray/keyv/compare/2025</a>-09-27...2025-10-03</p>",
      "content_text": "## What's Changed\r\n* valkey - fix: removing sets namespace as it is not needed by @jaredwray in [https://github.com/jaredwray/keyv/pull/1613](https://github.com/jaredwray/keyv/pull/1613)\r\n* keyv - chore: upgrading biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1614](https://github.com/jaredwray/keyv/pull/1614)\r\n* serialize - chore: upgrading biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1616](https://github.com/jaredwray/keyv/pull/1616)\r\n* mono - chore: removing webpack as unneeded by @jaredwray in [https://github.com/jaredwray/keyv/pull/1617](https://github.com/jaredwray/keyv/pull/1617)\r\n* compress-brotli - chore: upgrading biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1618](https://github.com/jaredwray/keyv/pull/1618)\r\n* compress-gzip - chore: upgrading biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1619](https://github.com/jaredwray/keyv/pull/1619)\r\n* compress-lz4 - chore: upgrading biome to 2.2.5 by @jaredwray in [https://github.com/jaredwray/keyv/pull/1620](https://github.com/jaredwray/keyv/pull/1620)\r\n* mongo - fix: possible nosql injection attack on gridfs by @jaredwray in [https://github.com/jaredwray/keyv/pull/1621](https://github.com/jaredwray/keyv/pull/1621)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/keyv/compare/2025](https://github.com/jaredwray/keyv/compare/2025)-09-27...2025-10-03",
      "tags": [
        "Release"
      ]
    }
  ]
}