# Flags SDK changelog > A free, open-source library for using feature flags in Next.js and SvelteKit. - Vendor: Vercel - Category: Frameworks & Libraries - Official site: https://flags-sdk.dev - Tracked by: What's New (https://whatsnew.fyi/product/flags-sdk) - Harvested from: GitHub (vercel/flags) - Entries below: 13 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 4.3.0 - Date: 2026-08-04 - Version: 4.3.0 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.3.0 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.3.0 - **changed** — Replace @vercel/edge-config with @vercel/global-config - **changed** — Rename the Edge Config adapter package to @flags-sdk/global-config - **changed** — Rename repository-owned Edge Config files, exports, types, options, variables, and environment variables to Global Config - **deprecated** — Previous Edge Config names remain available as deprecated aliases ###### Minor Changes - [#452](https://github.com/vercel/flags/pull/452) [`58e1f5b`](https://github.com/vercel/flags/commit/58e1f5bcdf0dd3ef44ce689681882792b31851c4) Thanks [@luismeyer](https://github.com/luismeyer)! - Replace `@vercel/edge-config` with `@vercel/global-config`. Rename the Edge Config adapter package to `@flags-sdk/global-config` and rename repository-owned Edge Config files, exports, types, options, variables, and environment variables to Global Config. The previous Edge Config names remain available as deprecated aliases, and the previous environment variables are still honored as fallbacks, so existing code keeps working without changes. ### 4.2.4 - Date: 2026-07-29 - Version: 4.2.4 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.2.4 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.2.4 - **changed** — Return cache-control: no-store from flags discovery endpoint ###### Patch Changes - [#454](https://github.com/vercel/flags/pull/454) [`dcb74ff`](https://github.com/vercel/flags/commit/dcb74ff9389f93f6d808c674c855ee2e805b4402) Thanks [@dferber90](https://github.com/dferber90)! - return cache-control: no-store from flags discovery endpoint ### 4.2.3 - Date: 2026-07-24 - Version: 4.2.3 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.2.3 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.2.3 - **fixed** — Remove @sveltejs/kit from peer dependencies to prevent ERESOLVE errors in non-SvelteKit projects using Vite 7 ###### Patch Changes - [#442](https://github.com/vercel/flags/pull/442) [`622d56e`](https://github.com/vercel/flags/commit/622d56e608f091a8fbfbda0ee076ea3dcf808e52) Thanks [@dferber90](https://github.com/dferber90)! - Remove `@sveltejs/kit` from peer dependencies. It was declared as an optional peer with a `"*"` range, which caused npm to auto-install the newest `@sveltejs/kit` and drag in its transitive `@sveltejs/vite-plugin-svelte` → `vite` peer chain. In non-SvelteKit projects already on Vite 7 (via Vitest, Storybook, etc.) this produced a hard `ERESOLVE` error requiring `npm install --force`. SvelteKit consumers always have `@sveltejs/kit` installed as the framework, so the `flags/sveltekit` entrypoint continues to resolve it from their own tree. ### 4.2.2 - Date: 2026-07-24 - Version: 4.2.2 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.2.2 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.2.2 - **fixed** — Tracing no longer records Next.js control-flow errors as span errors, instead reporting flag evaluation spans as successful when redirects, notFound, or rejected hanging promises of aborted prerenders are re-thrown for the framework to handle ###### Patch Changes - [#438](https://github.com/vercel/flags/pull/438) [`d23d9d2`](https://github.com/vercel/flags/commit/d23d9d2b7ab04bb72c8682c0811f20dd6699104f) Thanks [@eps1lon](https://github.com/eps1lon)! - Tracing no longer records Next.js control-flow errors as span errors. Redirects, notFound, and the rejected hanging promises of aborted prerenders (`HANGING_PROMISE_REJECTION`) are re-thrown for the framework to handle, but the flag evaluation span previously reported them via `span.setStatus({ code: 2, message })`, polluting traces with errors like "During prerendering, `connection()` rejects when the prerender is complete" on every aborted runtime prefetch. These spans are now reported as successful (status Ok), since the traced function completed as intended and the error is framework control flow, while genuine evaluation failures keep marking spans as errored. ### 4.2.1 - Date: 2026-07-20 - Version: 4.2.1 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.2.1 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.2.1 - **fixed** — Allow passing a NextRequest or Web Request directly to flag(req) and evaluate(flags, req) outside App Router, fixing empty headers when NextRequest was passed to a flag ###### Patch Changes - [#434](https://github.com/vercel/flags/pull/434) [`4d6eb10`](https://github.com/vercel/flags/commit/4d6eb10705ab5aa97baac2fc6f50b85a84c4368a) Thanks [@dferber90](https://github.com/dferber90)! - Allow passing a `NextRequest` / Web `Request` directly to `flag(req)` and `evaluate(flags, req)` outside App Router (e.g. in routing middleware). Previously only a Pages Router `IncomingMessage`, or a manually-flattened headers object, worked when calling a flag directly — passing a `NextRequest` produced empty headers because it wasn't recognized as already having a `Headers` instance. ### 4.1.1 - Date: 2026-06-16 - Version: 4.1.1 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.1.1 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.1.1 - **fixed** — Recognize hanging promise rejection as internal Next.js error ###### Patch Changes - [#399](https://github.com/vercel/flags/pull/399) [`50725a8`](https://github.com/vercel/flags/commit/50725a8dcfaca7b31d89c45c70e3e087366649da) Thanks [@dferber90](https://github.com/dferber90)! - Recognize hanging promise rejection as internal Next.js error ### 4.1.0 - Date: 2026-06-05 - Version: 4.1.0 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.1.0 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.1.0 - **added** — Support bulk evaluation of multiple flags at once through a new `bulkDecide` method in adapters, improving performance by up to 20x when evaluating 100 flags - **changed** — The `evaluate()` and `precompute()` functions now defer bulk evaluation to adapters that support it, falling back to individual flag evaluation otherwise - **changed** — Tracing now emits an `evaluate` span with a `flagCount` attribute, and uses `batch` spans for bulk-evaluated flag groups instead of individual per-flag `run` spans ###### Minor Changes - [#385](https://github.com/vercel/flags/pull/385) [`201f9d5`](https://github.com/vercel/flags/commit/201f9d5988d7fc307511e35638e66769d38cedb3) Thanks [@dferber90](https://github.com/dferber90)! - When applications call `evaluate()` or `precompute()` function from `flags/next` it now defers bulk evaluation to the underlying adapters in case those support it, or otherwise falls back to evaluating each flag individually. This speeds up evaluation for applications that need to evaluate multiple flags at once, as the runtime needs to handle fewer promises and more work is reused. In testing we have seen a 20x improvement when called with 100 flags. ```tsx import { evaluate } from "flags/next"; import { flagA, flagB } from "../flags"; // pass a list of flags const [valueA, valueB] = await evaluate([flagA, flagB]); // pass an object const { a, b } = await evaluate({ a: flagA, b: flagB }); ``` Adapters can opt into bulk evaluation by implementing a `bulkDecide` method and setting a stable `adapterId`. When both are present, flag evaluation groups flags that share the same `adapterId` and `identify` source and invokes `bulkDecide` once per group instead of calling `decide` per flag. Flags without a bulk-capable adapter still resolve through the normal per-flag path inside `evaluate()` and still benefit from now reusing the shared per-request headers, cookies, and overrides reads. Tracing reflects this grouping. `evaluate()` (and therefore `precompute()`) now emits an `evaluate` span carrying a `flagCount` attribute. Within it, bulk-evaluated flags no longer emit an individual per-flag `run` span; instead each adapter group emits a single `batch` span (carrying the `adapterId`, the `keys` evaluated in the batch, and `cachedCount`/`overrideCount`/`decidedCount` attributes summarizing how the batch resolved) so per-flag instrumentation overhead is not reintroduced. Flags that fall back to the per-flag path continue to emit their own `flag` span as before. ### 4.0.6 - Date: 2026-04-03 - Version: 4.0.6 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.6 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.6 - **changed** — Improve performance by caching next/headers imports to avoid unnecessary event loop iterations in Next.js App Router - **changed** — Reduce microtask queue overhead in flag evaluation by replacing async IIFE around decide() with direct call and Promise.resolve() ###### Patch Changes - c08f3e5: Improve performance by caching `next/headers` imports. Previously every flag evaluation in Next.js App Router would run `await import("next/headers")`. The imported module is cached by the runtime, but we would still go through the event loop unnecessarily. Now we cache the resolved module in a local variable so only the first call awaits the dynamic import; subsequent calls skip the microtask entirely. - c08f3e5: Reduce microtask queue overhead in flag evaluation by replacing the async IIFE around `decide()` with a direct call and `Promise.resolve()`. ### 4.0.5 - Date: 2026-03-12 - Version: 4.0.5 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.5 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.5 - **fixed** — Guard internal flag hooks when Vercel does not expose the expected runtime helpers during evaluation ###### Patch Changes - dd1396e: Guard internal flag hooks when Vercel does not expose the expected runtime helpers during evaluation. ### 4.0.4 - Date: 2026-03-09 - Version: 4.0.4 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.4 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.4 - **fixed** — Handle when an app goes from precomputing one or more flags to precomputing none by using __no_flags__ as the serialized value so the app will still rewrite and prerender the page ###### Patch Changes - 77727aa: The Flags SDK now handles when an app goes from precomputing one or more flags to precomputing none. In this case we use `__no_flags__` as the serialized value so the app will still rewrite and prerender the page. `precompute`, `generatePermutations`, `serialize` and `deserialize` were adjusted to generate and parse `__no_flags__` correctly. ### 4.0.3 - Date: 2026-02-11 - Version: 4.0.3 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.3 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.3 - **changed** — Throw an error at declaration time if a feature flag is declared without a decide function or with an adapter that is missing a decide function ###### Patch Changes - 795dfd4: Throw on declaration if flag is missing decide function. When a feature flag is declared without a decide function, or with an adapter that is missing a decide function we will now throw an error at declaration time. ### 4.0.2 - Date: 2025-11-06 - Version: 4.0.2 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.2 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.2 ###### Patch Changes - 5f3757a: drop tsconfig dependency ### 4.0.1 - Date: 2025-05-23 - Version: 4.0.1 - Original notes: https://github.com/vercel/flags/releases/tag/flags%404.0.1 - Permalink: https://whatsnew.fyi/product/flags-sdk/releases/4.0.1 - **added** — expose clearDedupeCacheForCurrentRequest to allow clearing the cache of a deduped function for the current request ###### Patch Changes - d4108c8: - expose `clearDedupeCacheForCurrentRequest` to allow clearing the cache of a deduped function for the current request