Changelog
-
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 and Agent Runners documentation.
-
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
choiceanswers 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 ongpt-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}choiceis safe to branch on directly, so you can send a prepaid label for defective items or offer an exchange for the wrong size, and useconfidenceto pass unclear requests to your support team.Learn more in the AI Gateway documentation and the OpenAI API reference.
-
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.

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, or learn more about making changes with Agent Runners.
-
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.
-
SvelteKit 3 is out today, and it just works on Netlify on day one. To upgrade, run:
npx sv migrate sveltekit-3The 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.
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 ofsvelte.config.jsand 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. $libis now#lib— The$libalias is replaced by#lib, using Node’s subpath imports. Imports need to be unambiguous, so write#lib/foo.tsor#lib/foo/index.ts.- Shallow routing is built into
goto— Usegoto()withshallow: trueinstead ofpushStateandreplaceState. - Consistent error handling — All errors, including ones you throw with
error(...), now go through yourhandleErrorhook. - New service worker modules —
$service-workeris 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 for all the details.
Watch out for the
#libaliasNearly 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#librelies 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
#libimports 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 doc, or just click this button:
-
The Next.js team has disclosed seven security vulnerabilities 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), so if you run Next.js on Netlify, we strongly recommend upgrading
nextto 15.5.27 or 16.3.8 and redeploying. The OpenNext Netlify Next.js adapter must also be updated to@netlify/plugin-nextjs5.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? for full steps.Vulnerabilities
All issues are patched in 15.5.27 and 16.3.8.
Vulnerability Severity Affected GHSA-cjq9-62q9-8jv4 / CVE-2026-94483 — Image optimizer SSRF High 16.x with an attacker-controlled remote host in images.remotePatternsGHSA-4jqv-mc3x-m676 / 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 / 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 / CVE-2026-94485 — Metadata image dynamicParamsbypass (information disclosure)Medium 16.x App Router Webpack builds using metadata image routes GHSA-h694-7cp9-m8p3 — Cache leak across root param values in nested use cacheMedium 16.3.x with Cache Components + nested use cachereading root paramsGHSA-3w37-wq28-93x7 / CVE-2026-94544 — Draft Mode use cachecontent leakMedium 16.3.x with Cache Components / useCache, Draft Mode, and draft-dependent cached contentGHSA-39w2-rjm5-chcv / CVE-2026-94486 — Development MCP information disclosure Low 16.x development servers ( next dev) with the MCP endpointImpact on Netlify
Not affected on Netlify
- GHSA-cjq9-62q9-8jv4 (Image optimizer SSRF): Netlify projects are not affected. Image optimization on Netlify is handled by Netlify Image CDN — 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 (Draft Mode
use cachecontent 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 (Development MCP information disclosure): Netlify projects are not affected. This affects the
next devdevelopment server only; Netlify serves production builds, which do not expose the development MCP endpoint.
Information disclosure
GHSA-f87g-xv8r-7p7x (Metadata image
dynamicParamsbypass) can expose content from routes excluded viadynamicParamsthrough 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 and GHSA-mcj8-r9mp-w47p affect apps with SSG/ISR routes behind a root catch-all.
- 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?.
- 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 (cache leak across root param values): affects Next.js 16.x apps using Cache Components with a nested
use cachethat 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
nextto 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-nextjsto v5.16.1 and redeploy. We recommend not pinning the adapter version so future fixes ship automatically.
Note that any publicly available deploy previews and branch deploys may remain vulnerable until they are automatically deleted. Consider deleting these deploys manually.
Resources
-
The TanStack team has disclosed a critical cross-site scripting (XSS) vulnerability in TanStack Start. A crafted URL can cause an affected app to return attacker-controlled HTML from its own origin, which may run attacker-supplied JavaScript in a visitor’s browser. Here’s what Netlify customers need to know.
Vulnerabilities
GHSA-qx66-fv34-fjm8 (CVE-2026-102989): Unauthenticated reflected XSS in server-function responses.
Package Affected versions Fixed in @tanstack/react-start>= 1.143.12, < 1.168.60 1.168.60 @tanstack/solid-start>= 1.143.12, < 1.168.57 1.168.57 @tanstack/vue-start>= 1.143.12, < 1.168.56 1.168.56 @tanstack/start-server-core>= 1.143.12, < 1.169.39 1.169.39 Impact on Netlify
This is a client-side cross-site scripting (XSS) vulnerability in TanStack Start’s server-function response handling. Because the malicious response is returned from the app’s own origin, an attacker who gets a victim to open a crafted link can run JavaScript in that visitor’s session — for example, to read their data or act as them on the site. All applications on an affected version should upgrade.
What should I do?
We strongly recommend upgrading as soon as possible to the patched releases:
@tanstack/react-start1.168.60 or later@tanstack/solid-start1.168.57 or later@tanstack/vue-start1.168.56 or later@tanstack/start-server-core1.169.39 or later
Not sure if you’re affected?
Open your project in Agent Runners in ask mode and try this prompt:
Does this project use TanStack Start? If so, which versions of `@tanstack/react-start`, `@tanstack/solid-start`, `@tanstack/vue-start`, and `@tanstack/start-server-core` are resolved in the lockfile? Is the resolved `@tanstack/start-server-core` version 1.169.39 or later? If not, what do I need to change to upgrade? (Advisory: GHSA-qx66-fv34-fjm8)Ask mode answers without changing your code. If an upgrade is needed, switch to Build mode to make the change, preview, and redeploy.
Deploy previews and branch deploys
Note that any publicly available deploy previews and branch deploys may remain vulnerable until they are automatically deleted. Consider deleting these deploys manually.
Resources
-
Netlify’s security and compliance document library has moved into the Netlify Dashboard. To request access and learn more about the certifications and documents available, go to https://www.netlify.com/trust-center/.
Any signed-in user, on any plan, can view our certifications, subprocessor list, and available compliance documents from their user settings.
More sensitive documents, such as our SOC 2 report, require an access request through the Trust Center in the Netlify dashboard. Once approved, the documents are available for download.
Learn more about how to access the Netlify Trust Center in our Security docs.
-
Every site created with Agent Runners now includes Open Graph tags. When you share a link to your site, it shows up as a proper preview instead of a bare URL.
Social media sites and messaging apps read Open Graph tags to build link previews. Now, when you or your visitors share a site you created with Agent Runners, the preview includes a screenshot of the site, its title, and a description. That makes your site easier to recognize, more inviting to click, and look better than ever from the moment you share it.
This is available on all public sites created with Agent Runners. You don’t need to do anything to turn it on.
Learn more about Agent Runners in the Agent Runners docs.