Changelog
-
Anthropic’s Claude Fable 5 model is once again available through Netlify’s AI Gateway with zero configuration required.
Use the Anthropic SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the Claude Fable 5 model:
import Anthropic from '@anthropic-ai/sdk';export default async () => {const anthropic = new Anthropic();const response = await anthropic.messages.create({model: 'claude-fable-5',max_tokens: 4096,messages: [{role: 'user',content: 'How can AI improve my coding?'}]});return new Response(JSON.stringify(response), {headers: { 'Content-Type': 'application/json' }});};Claude Fable 5 is available for all Function types. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
Learn more in the AI Gateway documentation.
-
Google’s Nano Banana 2 Lite (Gemini 3.1 Flash-Lite Image) is now available through AI Gateway. You can call this lightweight image generation model from Netlify Functions without configuring API keys; the AI Gateway provides the connection to Google for you.
Example usage in a Function:
import { GoogleGenAI } from '@google/genai';// Netlify Function: Generate an image with Gemini 3.1 Flash Lite Image and return it directly.// Usage (GET): /.netlify/functions/gemini-31-flash-lite-image?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-3.1-flash-lite-image',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' }});}};Built for speed and lower cost, Gemini 3.1 Flash-Lite Image is a good fit for high-volume image generation. It works across any function type and is compatible with other Netlify primitives such as caching and rate limiting, giving you control over request behavior across your site.
Learn more in the AI Gateway documentation.
-
Anthropic’s Claude Sonnet 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. The AI Gateway handles everything automatically. Here’s an example using the Claude Sonnet 5 model:
import Anthropic from '@anthropic-ai/sdk';export default async () => {const anthropic = new Anthropic();const response = await anthropic.messages.create({model: 'claude-sonnet-5',max_tokens: 4096,messages: [{role: 'user',content: 'How can AI improve my coding?'}]});return Response.json(response);};Claude Sonnet 5 is available for all Function types and Agent Runners. You get automatic access to Netlify’s caching, rate limiting, and authentication infrastructure.
Learn more in the AI Gateway documentation and Agent Runners documentation.
-
We have redesigned Netlify functions for an improved agent experience.
With these updates, functions are more discoverable, easier to autocomplete, update, and manage for people and agents alike. They move function configuration into code, making it type-safe and immediately visible to editors, tools, and agents, with no platform-specific naming conventions to memorize or get wrong. None of these changes are breaking, so you can adopt them on your own timeline.
Netlify Functions are serverless functions that run on-demand in response to HTTP requests or platform events. They handle server-side logic without any infrastructure to manage, and live in your repository at
netlify/functions/.To learn more about these updates in depth, check out our blog on redesigning Netlify functions for agent experience. See the table below for a summary.
Feature What changed What it means for agents What you need to do Event handlers Export typed event handlers from the default export object Typed handlers are discoverable like any API, with no magic filenames to guess or get wrong. Nothing required. Adopt the new syntax for new event handlers for better agent discoverability and updates. Background functions Declare with background: truein config instead of the-backgroundfilename suffixType-safe and config-driven, not name-driven. Agents can set it in code without guessing platform naming conventions, and get an error if the value is wrong. Nothing required. The -backgroundsuffix still works.Region selection Set per-function via the regionconfig property, replacing the global UI settingAgents can set region as a type-safe config property, catching invalid values before deploy rather than at runtime. Use deploy previews to test before going live. Nothing required. Optionally move region out of the UI into config for per-function control. Memory and vCPU Set via memoryorvcpuconfig properties; both values scale together automaticallyAgents provisioning compute-heavy workloads (inference, large payloads) can do so in code. Nothing. Defaults unchanged. Set only if your workload needs more than 1 GB / 0.5 vCPU. Requires a credit-based Pro plan. getContext()Named import from @netlify/functions, replacing theNetlify.contextglobalNamed imports surface in autocomplete and carry type information. Globals are invisible to agents; named imports are not. Nothing required. Netlify.contextstill works. Switch togetContext()for better discoverability.Learn more in the Netlify Functions documentation, which has also been recently revamped.
-
Astro 7 is out today, and it just works on Netlify on day one. To upgrade, run:
npx @astrojs/upgradeThis will update Astro, the Netlify adapter, and all other official integrations together. You can also check out the official migration guide.
What’s new
Some highlights include:
- Vite 8 — Astro 7 upgrades to Vite 8, bringing faster builds and improved dev tooling.
- Sätteri is now the default markdown processor — Astro’s new native markdown pipeline replaces remark/rehype as the default. If your project uses remark or rehype plugins, you’ll need to install
@astrojs/markdown-remarkseparately to keep them working. - Advanced routing is stable — Previously behind an experimental flag, advanced routing is now enabled by default. The default entry point has moved from
src/app.tstosrc/fetch.ts. - Streaming rendering is stable — The streaming-based rendering engine is now the default, replacing the legacy queued approach.
- Background dev server for AI coding agents —
astro devnow detects AI coding environments and runs as a background process automatically. Newastro dev stop,astro dev status, andastro dev logscommands let you manage it directly. - Astro DB is deprecated — The
astro db,astro login,astro logout,astro link, andastro initCLI commands have been removed. Switch to a dedicated database client. - Custom logger is stable —
context.loggeris now always available in API routes and middleware, with built-injson,node, andconsolehandlers.
Check the full upgrade guide for all the details.
Watch out for the new markdown defaults
If your site uses remark or rehype plugins, you’ll need to take action before upgrading. In Astro 7, the default markdown pipeline is Sätteri — Astro’s own native processor. The remark/rehype pipeline is no longer included by default.
To keep your existing plugins working, install the remark package separately:
npm install @astrojs/markdown-remarkOnce installed, your existing
markdown.remarkPlugins,markdown.rehypePlugins, andmarkdown.remarkRehypeconfig options will continue to work as before. If you’re not using any remark or rehype plugins, no changes are needed — Sätteri handles standard Markdown out of the box.Deploy an Astro 7 site on Netlify
If you want to get started with a new site, start with the Astro on Netlify doc, or just click this button:
-
You can now preview proposed data changes for your Netlify database with a Git-style diff view, then apply part or all of those changes to a production version of your database.
This update allows you to carefully review proposed changes from across your team and make sure you’re confident about making changes to the production version of your database before going live. Learn more in our docs on Data changes for Netlify Database.
-
When you provision new users through SAML SSO, you now have more options for assigning a default role.
Before this update, the Developer role was assigned by default. Now you can assign other roles with fewer permissions, such as Reviewers and Internal Builders.
Learn more about your options for provisioning with SAML SSO on Netlify.
-
React Router 8 was just released and is already supported on Netlify.
The breaking changes are largely limited to these new minimums:
- Node.js 22.22.0+
- React 19.2.7+
- Vite 7+
How to upgrade
To upgrade your existing Netlify project follow the React Router 8 upgrade guide and upgrade the Netlify React Router Vite plugin to v4.0.0+:
npm i @netlify/vite-plugin-react-router@latestTry it now
To deploy a brand new, React Router 8 application to Netlify, click this button:
What you get
Full framework feature support, serverless and edge functions included, plus full Netlify platform emulation in local dev for you and your agents.
-
Team Owners on the credit-based Pro plan can now create and assign labels to organize projects across their team, a capability previously limited to Enterprise.
Use labels to group projects by environment, purpose, or team—for example, staging, marketing, or production—then filter and find projects faster from your team’s project list.
Learn more in Organize projects in the Netlify documentation.