---
title: "Changelog | Netlify"
description: "Stay updated with the latest features, fixes, and improvements. Realize the speed, agility and performance of a scalable, composable web architecture with Netlify. Explore the composable web platform now!"
source: "https://preview--www.netlify.app/changelog/page/2/"
last_updated: "2026-10-29T12:15:29.000Z"
---
# Changelog

All Tags Agent-runners AI Ai-gateway Angular Astro AX Billing Build CLI Database Design Devtools Domains E-commerce Edge-functions Extensions Forms Framework Functions Logs Next.js Nuxt.js Remix SDK Security Sveltekit Updates Workflow  [Subscribe to feed](https://www.netlify.com/changelog/feed.xml)

-   [
    
    ## Meta Models Now Available in AI Gateway
    
    ](/changelog/meta-muse-models-ai-gateway/)
    
    October 12, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    -   [ai](/changelog/tag/ai/)
    
    Meta’s Muse Spark and Muse Wonder models are now available through Netlify’s AI Gateway with zero configuration required. Choose `muse-spark-1.1` for coding, computer use, and multimodal perception; `muse-spark-1.2` for coding-optimized agentic workflows; `muse-spark-1.3` for long-horizon coding and agentic work with cleaner code and fewer tokens; or `muse-wonder-1.0` for complex coding tasks, long-running agents, and advanced computer use.
    
    Use the OpenAI SDK directly in your Netlify Functions without managing API keys or authentication. AI Gateway takes care of the setup automatically. Here’s an example using Muse Wonder with the Responses API:
    
    ```
    import OpenAI from 'openai';
    export default async () => {    const meta = new OpenAI();
        const response = await meta.responses.create({        model: 'muse-wonder-1.0',        input: 'How can AI improve my coding?'    });
        return Response.json(response);};
    ```
    
    These Meta models also work in Scheduled Functions, Background Functions, and Edge Functions, with Netlify’s caching, rate limiting, and authentication infrastructure available automatically.
    
    Learn more in the [AI Gateway documentation](https://docs.netlify.com/build/ai-gateway/overview/) and explore the models on [Meta’s developer site](https://dev.meta.ai/).
    
    [Permalink to Meta Models Now Available in AI Gateway Permalink](/changelog/meta-muse-models-ai-gateway/)
    
-   [
    
    ## Know who is visiting your protected site, right from your functions
    
    ](/changelog/2026-10-07-context-user-in-functions/)
    
    October 7, 2026
    
    -   [functions](/changelog/tag/functions/)
    -   [edge functions](/changelog/tag/edge-functions/)
    -   [security](/changelog/tag/security/)
    
    On private projects and sites protected with Netlify team login, your Netlify Functions and Edge Functions can now see who is making the request. The signed-in Netlify user is available as `context.user`, with their user ID, email address, and when their access expires.
    
    This function returns the signed-in user’s ID, email address, and access expiry as JSON at `/whoami`, and responds with a `401` when `context.user` isn’t set:
    
    netlify/functions/whoami.ts
    
    ```
    import type { Config, Context } from '@netlify/functions'
    export default async (req: Request, context: Context) => {  if (!context.user) {    return new Response('Unauthorized', { status: 401 })  }
      return Response.json({    id: context.user.id,    email: context.user.email,    expiresAt: context.user.expiresAt.toISOString(),  })}
    export const config: Config = { path: '/whoami' }
    ```
    
    Previously, protecting a site meant Netlify checked who could visit, but your code couldn’t tell who they were. Knowing who’s on the other end meant adding a second login of your own on top.
    
    Now Netlify verifies the visitor at the edge and passes their identity to your code. Because `context.user` comes from Netlify and not from the request, a visitor can’t impersonate someone else by sending their own headers.
    
    With `context.user`, you can build on the login your team already uses. Examples like:
    
    -   Internal dashboards and admin tools that show each person their own data
    -   Audit logs that record who made a change or triggered an action
    -   Approval and review workflows that know who approved what
    -   Per-person settings, permissions, or feature access inside an internal app
    
    Learn more in the Netlify documentation:
    
    -   [`context.user` in Netlify Functions](https://docs.netlify.com/build/functions/api/#user)
    -   [`context.user` in Edge Functions](https://docs.netlify.com/build/edge-functions/api/#user)
    -   [Private projects](https://docs.netlify.com/manage/security/secure-access-to-sites/project-visibility/)
    -   [Team login protection](https://docs.netlify.com/manage/security/secure-access-to-sites/password-protection/#basic-password-protection-versus-team-login-protection)
    
    [Permalink to Know who is visiting your protected site, right from your functions Permalink](/changelog/2026-10-07-context-user-in-functions/)
    
-   [
    
    ## Subscribe to Netlify events from ChatGPT
    
    ](/changelog/2026-10-07-subscribe-to-netlify-events-from-chatgpt/)
    
    October 7, 2026
    
    -   [ai](/changelog/tag/ai/)
    -   [workflow](/changelog/tag/workflow/)
    -   [extensions](/changelog/tag/extensions/)
    
    You can now subscribe to Netlify events from ChatGPT and set up automations that respond to what’s happening on your sites.
    
    Instead of checking the Netlify dashboard or waiting on an email, you can have ChatGPT act as soon as something happens. Events you can subscribe to include:
    
    -   A deploy succeeded
    -   A build failed
    -   A form submission came in
    
    For more events to subscribe to, check out our [deploy events](https://docs.netlify.com/deploy/deploy-notifications/).
    
    ## Combine events with Netlify plugin and MCP server
    
    Events get more useful when you pair them with everything else you can already do through the [Netlify ChatGPT plugin](https://openai.com/business/plugins/netlify/) and [Netlify MCP server](https://docs.netlify.com/build/build-with-ai/agent-setup-guides/agent-setup-overview/#mcp-server-support). For example, you could set up an automation that:
    
    -   Reviews new form submissions and flags the ones that need a follow-up
    -   Summarizes what changed when a production deploy succeeds
    
    Because these automations live in ChatGPT, you can describe what you want in plain language and adjust it as your workflow changes.
    
    ## Get started
    
    Connect Netlify in ChatGPT, then ask it to subscribe to the events you care about for your project. Learn more in our guide to [using Netlify with ChatGPT](https://docs.netlify.com/build/build-with-ai/agent-setup-guides/use-netlify-with-chatgpt/).
    
    [Permalink to Subscribe to Netlify events from ChatGPT Permalink](/changelog/2026-10-07-subscribe-to-netlify-events-from-chatgpt/)
    
-   [
    
    ## Claude Haiku 5.5 now available in AI Gateway and Agent Runners
    
    ](/changelog/claude-haiku-5-5-ai-gateway-agent-runners/)
    
    October 7, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    -   [agent runners](/changelog/tag/agent-runners/)
    
    Anthropic’s Claude Haiku 5.5 model is now available through Netlify’s AI Gateway and Agent Runners with zero configuration required.
    
    Use the Anthropic SDK directly in your Netlify Functions without managing API keys or authentication. AI Gateway handles everything automatically. Here’s an example using Claude Haiku 5.5 with the Messages API:
    
    ```
    import Anthropic from '@anthropic-ai/sdk';
    export default async () => {    const anthropic = new Anthropic();
        const response = await anthropic.messages.create({        model: 'claude-haiku-5-5',        max_tokens: 1024,        messages: [            { role: 'user', content: 'Give a concise explanation of how AI works.' }        ],    });
        return Response.json(response);};
    ```
    
    Claude Haiku 5.5 is also available across Scheduled Functions, Background Functions, and Edge Functions. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
    
    Learn more in the [AI Gateway documentation](https://docs.netlify.com/build/ai-gateway/overview/) and [Agent Runners documentation](https://docs.netlify.com/build/build-with-ai/agent-runners/overview/).
    
    [Permalink to Claude Haiku 5.5 now available in AI Gateway and Agent Runners Permalink](/changelog/claude-haiku-5-5-ai-gateway-agent-runners/)
    
-   [
    
    ## OpenAI Decisions API now available in AI Gateway
    
    ](/changelog/openai-decisions-api-ai-gateway/)
    
    October 7, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    -   [ai](/changelog/tag/ai/)
    
    OpenAI’s Decisions API is now available through Netlify’s AI Gateway with zero configuration required.
    
    Use the OpenAI SDK directly in your Netlify Functions to classify, route, and score inputs without managing API keys. Instead of generating prose, the Decisions API answers questions you define about an input, and `choice` answers are always one of the options you declared. That means there’s no output to parse and nothing unexpected to handle before you branch on the result. The Decisions API is in beta and currently runs on `gpt-6-luna`.
    
    Here’s a Function for an online store that sorts incoming return requests by reason:
    
    ```
    import type { Config } from "@netlify/functions";import OpenAI from "openai";
    export default async (req: Request) => {  const openai = new OpenAI();
      const { answers } = await openai.decisions.create({    model: "gpt-6-luna",    input: await req.text(),    questions: [      {        type: "choice",        name: "reason",        instructions: "Why is the customer returning this item?",        choices: [          { value: "wrong_size" },          { value: "defective" },          { value: "not_as_described" },          { value: "changed_mind" },        ],      },    ],  });
      return Response.json(answers[0]);};
    export const config: Config = { path: "/api/returns", method: "POST" };
    ```
    
    Send it “The jacket fits well, but the zipper came off the second time I wore it” and you get back:
    
    ```
    {  "type": "choice",  "name": "reason",  "choice": "defective",  "probabilities": [    { "value": "wrong_size", "probability": 0.01 },    { "value": "defective", "probability": 0.95 },    { "value": "not_as_described", "probability": 0.03 },    { "value": "changed_mind", "probability": 0.01 }  ],  "confidence": 0.93}
    ```
    
    `choice` is safe to branch on directly, so you can send a prepaid label for defective items or offer an exchange for the wrong size, and use `confidence` to pass unclear requests to your support team.
    
    Learn more in the [AI Gateway documentation](https://docs.netlify.com/build/ai-gateway/overview/) and the [OpenAI API reference](https://platform.openai.com/docs/api-reference/decisions).
    
    [Permalink to OpenAI Decisions API now available in AI Gateway Permalink](/changelog/openai-decisions-api-ai-gateway/)
    
-   [
    
    ## Comment on specific lines of code in Agent Runners
    
    ](/changelog/2026-10-06-agent-runners-diff-line-comments/)
    
    October 6, 2026
    
    -   [agent runners](/changelog/tag/agent-runners/)
    -   [ai](/changelog/tag/ai/)
    -   [workflow](/changelog/tag/workflow/)
    
    You can now add comments to individual lines in the diff on the **Code** tab of Agent Runners, so you can give your agent precise feedback on the code it generated.
    
    Previously, asking for a fix meant describing where the problem was in your prompt, such as naming the file, quoting the code, or explaining which function you meant.
    
    Now you can pinpoint exactly where you want changes. Open the **Code** tab for an agent run, select the **+** next to a line in the diff, and leave a comment about what you want changed. Your comments are sent along with your next prompt, so the agent knows exactly which code lines you’re referring to.
    
    ![Agent Runners Code tab showing a diff of index.html with a comment box open on line 278 that reads “use class name subdued instead” and an Add comment button](/images/changelog/agent-runners-diff-line-comment.png)
    
    This makes follow-up prompts more useful when you want to:
    
    -   Correct a specific bug or edge case without rewriting the whole request
    -   Ask for a different approach in one part of a change while keeping the rest
    -   Flag naming, styling, or structure issues right where they appear
    -   Leave feedback on several spots across multiple files in a single follow-up run
    
    Try it on your next [agent run](https://app.netlify.com/start), or learn more about [making changes with Agent Runners](https://docs.netlify.com/build/build-with-ai/agent-runners/make-changes-with-agent-runners/).
    
    [Permalink to Comment on specific lines of code in Agent Runners Permalink](/changelog/2026-10-06-agent-runners-diff-line-comments/)
    
-   [
    
    ## Google’s Gemini Nano Banana 2.1 now available in AI Gateway
    
    ](/changelog/gemini-nano-banana-2-1-ai-gateway/)
    
    October 6, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    
    Google’s Gemini Nano Banana 2.1 is now available through Netlify AI Gateway. You can call this image generation model from Netlify Functions without configuring API keys; AI Gateway provides the connection to Google for you.
    
    Use the Google Gen AI SDK with the model ID `gemini-nano-banana-2.1`. Here’s an example that generates an image from a prompt and returns it directly from a Function:
    
    ```
    import { GoogleGenAI } from '@google/genai';
    // Netlify Function: Generate an image with Gemini Nano Banana 2.1 and return it directly.// Usage (GET): /.netlify/functions/nano-banana-2-1?prompt=Your+prompt+here// Returns: binary image (PNG/JPEG/etc) with proper content-type. If no image, JSON error.
    export default async (request: Request) => {    const url = new URL(request.url);    const prompt = url.searchParams.get('prompt') || 'two happy bananas holding flashlights';    const ai = new GoogleGenAI({});
        try {        const response = await ai.models.generateContent({            model: 'gemini-nano-banana-2.1',            contents: prompt,            config: {                imageConfig: {                    aspectRatio: '16:9',                    imageSize: '1K'                }            }        });
            let imagePart = null;        for (const part of response.candidates[0].content.parts) {            if (part.inlineData) {                imagePart = part.inlineData;                break;            }        }
            const bytes = Buffer.from(imagePart.data, 'base64');        const mimeType = imagePart.mimeType || 'image/png';
            return new Response(bytes, {            status: 200,            headers: {                'Content-Type': mimeType,                'Cache-Control': 'no-store'            }        });    } catch (err) {        return new Response(JSON.stringify({ error: String(err), prompt }), {            status: 500,            headers: { 'Content-Type': 'application/json' }        });    }};
    ```
    
    Gemini Nano Banana 2.1 is also available across Scheduled Functions, Background Functions, and Edge Functions. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
    
    Learn more in the [AI Gateway documentation](https://docs.netlify.com/build/ai-gateway/overview/).
    
    [Permalink to Google’s Gemini Nano Banana 2.1 now available in AI Gateway Permalink](/changelog/gemini-nano-banana-2-1-ai-gateway/)
    
-   [
    
    ## SvelteKit 3 just works on Netlify
    
    ](/changelog/2026-10-01-sveltekit-3/)
    
    October 2, 2026
    
    -   [framework](/changelog/tag/framework/)
    -   [sveltekit](/changelog/tag/sveltekit/)
    
    [SvelteKit 3](https://svelte.dev/blog/sveltekit-3-is-here) is out today, and it just works on Netlify on day one. To upgrade, run:
    
    ```
    npx sv migrate sveltekit-3
    ```
    
    The migration tool handles most of the mechanical changes for you, including moving your config and updating imports. You can also check out the [official migration guide](https://svelte.dev/docs/kit/migrating-to-sveltekit-3).
    
    ## What’s new
    
    Some highlights include:
    
    -   **Vite 8** — SvelteKit 3 requires Vite 8, bringing faster builds powered by Rolldown.
    -   **Config lives in `vite.config.ts`** — SvelteKit configuration moves out of `svelte.config.js` and into your Vite config, so Vite plugins can read it right away.
    -   **Explicit environment variables are stable** — Declare the environment variables your app depends on in `src/env.ts`, and specify whether each one is public and whether it’s resolved at build time or when the app boots. You get validation and type safety out of the box.
    -   **`$lib` is now `#lib`** — The `$lib` alias is replaced by `#lib`, using Node’s subpath imports. Imports need to be unambiguous, so write `#lib/foo.ts` or `#lib/foo/index.ts`.
    -   **Shallow routing is built into `goto`** — Use `goto()` with `shallow: true` instead of `pushState` and `replaceState`.
    -   **Consistent error handling** — All errors, including ones you throw with `error(...)`, now go through your `handleError` hook.
    -   **New service worker modules** — `$service-worker` is replaced by imports from `$app/env`, `$app/paths`, and `$app/manifest`, with better type checking in service workers.
    -   **Tracing is stable** — Tracing support has moved out of the experimental namespace.
    
    Check the full [migration guide](https://svelte.dev/docs/kit/migrating-to-sveltekit-3) for all the details.
    
    ## Watch out for the `#lib` alias
    
    Nearly every SvelteKit project imports from `$lib`, so this is the change you’re most likely to run into. The migration tool rewrites these imports for you, but because `#lib` relies on Node’s subpath imports, directory imports without an explicit file no longer resolve:
    
    ```
    // Beforeimport { formatDate } from '$lib/utils';
    // Afterimport { formatDate } from '#lib/utils/index.ts';
    ```
    
    If a build fails after upgrading with a module resolution error, look for `#lib` imports that point to a directory or leave off the file extension.
    
    ## Deploy a SvelteKit 3 site on Netlify
    
    If you want to get started with a new site, start with the [SvelteKit on Netlify](https://docs.netlify.com/build/frameworks/framework-setup-guides/sveltekit/) doc, or just click this button:
    
    [![Deploy to Netlify](/_astro/button_L4WOr.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/netlify-templates/sveltekit-netlify-starter)
    
    [Permalink to SvelteKit 3 just works on Netlify Permalink](/changelog/2026-10-01-sveltekit-3/)
    
-   [
    
    ## Security Update: Multiple vulnerabilities in Next.js
    
    ](/changelog/2026-09-30-nextjs-react-security-vulnerabilities/)
    
    September 30, 2026
    
    -   [security](/changelog/tag/security/)
    -   [next.js](/changelog/tag/next-js/)
    
    The Next.js team has disclosed [seven security vulnerabilities](https://github.com/vercel/next.js/security) in Next.js (one high, five medium, one low), patched on September 30, 2026 in 15.5.27 and 16.3.8. The issues span server-side request forgery (SSRF), cache poisoning, and information disclosure. Several of them do not affect apps hosted on Netlify. Here’s what Netlify customers need to know.
    
    ## Summary
    
    Some of these vulnerabilities affect Next.js sites hosted on Netlify (details in [Impact on Netlify](#impact-on-netlify)), so if you run Next.js on Netlify, **we strongly recommend upgrading `next` to 15.5.27 or 16.3.8** and redeploying. The OpenNext Netlify Next.js adapter must also be updated to `@netlify/plugin-nextjs` 5.16.1; it’s auto-installed by default, so a redeploy picks it up (a manual upgrade is only needed if you pin the version). See [What should I do?](#what-should-i-do) for full steps.
    
    ## Vulnerabilities
    
    All issues are patched in **15.5.27** and **16.3.8**.
    
    Vulnerability
    
    Severity
    
    Affected
    
    [GHSA-cjq9-62q9-8jv4](https://github.com/vercel/next.js/security/advisories/GHSA-cjq9-62q9-8jv4) / [CVE-2026-94483](https://www.cve.org/CVERecord?id=CVE-2026-94483) — Image optimizer SSRF
    
    High
    
    16.x with an attacker-controlled remote host in `images.remotePatterns`
    
    [GHSA-4jqv-mc3x-m676](https://github.com/vercel/next.js/security/advisories/GHSA-4jqv-mc3x-m676) / [CVE-2026-94543](https://www.cve.org/CVERecord?id=CVE-2026-94543) — Cache poisoning of SSG/ISR pages (cross-route)
    
    Medium
    
    15.x/16.x Pages Router apps with SSG/ISR and a root catch-all route
    
    [GHSA-mcj8-r9mp-w47p](https://github.com/vercel/next.js/security/advisories/GHSA-mcj8-r9mp-w47p) / [CVE-2026-94484](https://www.cve.org/CVERecord?id=CVE-2026-94484) — Cache poisoning via encoded paths / `/index` (SSG/ISR)
    
    Medium
    
    15.x/16.x apps combining a root catch-all with SSG/ISR routes
    
    [GHSA-f87g-xv8r-7p7x](https://github.com/vercel/next.js/security/advisories/GHSA-f87g-xv8r-7p7x) / [CVE-2026-94485](https://www.cve.org/CVERecord?id=CVE-2026-94485) — Metadata image `dynamicParams` bypass (information disclosure)
    
    Medium
    
    16.x App Router **Webpack** builds using metadata image routes
    
    [GHSA-h694-7cp9-m8p3](https://github.com/vercel/next.js/security/advisories/GHSA-h694-7cp9-m8p3) — Cache leak across root param values in nested `use cache`
    
    Medium
    
    16.3.x with Cache Components + nested `use cache` reading root params
    
    [GHSA-3w37-wq28-93x7](https://github.com/vercel/next.js/security/advisories/GHSA-3w37-wq28-93x7) / [CVE-2026-94544](https://www.cve.org/CVERecord?id=CVE-2026-94544) — Draft Mode `use cache` content leak
    
    Medium
    
    16.3.x with Cache Components / `useCache`, Draft Mode, and draft-dependent cached content
    
    [GHSA-39w2-rjm5-chcv](https://github.com/vercel/next.js/security/advisories/GHSA-39w2-rjm5-chcv) / [CVE-2026-94486](https://www.cve.org/CVERecord?id=CVE-2026-94486) — Development MCP information disclosure
    
    Low
    
    16.x **development** servers (`next dev`) with the MCP endpoint
    
    ## Impact on Netlify
    
    ### Not affected on Netlify
    
    -   [GHSA-cjq9-62q9-8jv4](https://github.com/vercel/next.js/security/advisories/GHSA-cjq9-62q9-8jv4) (Image optimizer SSRF): Netlify projects are **not affected**. Image optimization on Netlify is handled by [Netlify Image CDN](https://docs.netlify.com/build/image-cdn/overview/) — a separate service outside your project’s functions — so the vulnerable Next.js image-optimizer code path is not used, and the Image CDN has its own protections against this class of SSRF.
    -   [GHSA-3w37-wq28-93x7](https://github.com/vercel/next.js/security/advisories/GHSA-3w37-wq28-93x7) (Draft Mode `use cache` content leak): Netlify projects are **not affected**. This leak requires two requests to share a single server process’s in-flight cache fill. On Netlify’s serverless architecture each request is served by its own isolated invocation, so the required overlap cannot occur.
    -   [GHSA-39w2-rjm5-chcv](https://github.com/vercel/next.js/security/advisories/GHSA-39w2-rjm5-chcv) (Development MCP information disclosure): Netlify projects are **not affected**. This affects the `next dev` development server only; Netlify serves production builds, which do not expose the development MCP endpoint.
    
    ### Information disclosure
    
    [GHSA-f87g-xv8r-7p7x](https://github.com/vercel/next.js/security/advisories/GHSA-f87g-xv8r-7p7x) (Metadata image `dynamicParams` bypass) can expose content from routes excluded via `dynamicParams` through metadata image routes. It only affects **Webpack** builds; **Turbopack builds are not affected**. On Netlify, apps that use a Webpack build are **affected**; upgrading Next.js resolves it.
    
    ### Cache poisoning and availability
    
    [GHSA-4jqv-mc3x-m676](https://github.com/vercel/next.js/security/advisories/GHSA-4jqv-mc3x-m676) and [GHSA-mcj8-r9mp-w47p](https://github.com/vercel/next.js/security/advisories/GHSA-mcj8-r9mp-w47p) affect apps with SSG/ISR routes behind a root catch-all.
    
    -   [GHSA-4jqv-mc3x-m676](https://github.com/vercel/next.js/security/advisories/GHSA-4jqv-mc3x-m676) (cross-route cache poisoning): Pages Router apps with SSG/ISR and a root catch-all route are **affected** on Netlify. **Upgrading Next.js resolves the poisoning on its own.** The fix also changes how cache entries are keyed, so you should update the Netlify adapter (5.16.1) as well — otherwise prerendered pages miss the cache and re-render (a serving/performance regression, not a security one). See [What should I do?](#what-should-i-do).
    -   [GHSA-mcj8-r9mp-w47p](https://github.com/vercel/next.js/security/advisories/GHSA-mcj8-r9mp-w47p) (encoded paths / `/index`): App Router apps with a prerendered catch-all route are **affected** by an availability issue — certain valid percent-encoded URLs can return an error (HTTP 500) instead of the page. Upgrading Next.js resolves it.
    -   [GHSA-h694-7cp9-m8p3](https://github.com/vercel/next.js/security/advisories/GHSA-h694-7cp9-m8p3) (cache leak across root param values): affects Next.js 16.x apps using Cache Components with a nested `use cache` that reads root params (e.g. locale or region segments) — an enclosing cache entry can be keyed without the root param and reused across values, so content produced for one value can be served for another. Upgrading Next.js resolves it.
    
    ## What should I do?
    
    We strongly recommend upgrading as soon as possible:
    
    -   Upgrade `next` to **15.5.27** or **16.3.8** and redeploy.
    
    The OpenNext Netlify Next.js adapter that runs your app must also be updated to v5.16.1:
    
    -   Auto-installed adapter (default): redeploy — the update is applied automatically.
    -   Manually installed adapter: upgrade `@netlify/plugin-nextjs` to v5.16.1 and redeploy. We recommend [not pinning the adapter version](https://docs.netlify.com/build/frameworks/framework-setup-guides/nextjs/overview/#how-netlify-runs-your-nextjs-app) so future fixes ship automatically.
    
    Note that any publicly available deploy previews and branch deploys may remain vulnerable until they are [automatically deleted](https://docs.netlify.com/deploy/manage-deploys/manage-deploys-overview/#automatic-deploy-deletion). Consider [deleting these deploys manually](https://docs.netlify.com/deploy/manage-deploys/manage-deploys-overview/#manual-deploy-deletion-through-the-netlify-ui).
    
    ## Resources
    
    -   [Next.js September 2026 security release](https://nextjs.org/blog/september-2026-security-release)
    -   [Next.js security advisories](https://github.com/vercel/next.js/security)
    
    [Permalink to Security Update: Multiple vulnerabilities in Next.js Permalink](/changelog/2026-09-30-nextjs-react-security-vulnerabilities/)
    

[Previous page](/changelog) [Next page](/changelog/page/3)