---
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://www.netlify.com/changelog/page/7/"
last_updated: "2026-07-02T17:07:13.000Z"
---
# Changelog

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

-   [
    
    ## Use Netlify Agent Runners from Linear
    
    ](/changelog/2026-02-27-agent-runners-linear-integration/)
    
    February 27, 2026
    
    -   [agent runners](/changelog/tag/agent-runners/)
    -   [workflow](/changelog/tag/workflow/)
    
    Linear users can now launch Netlify Agent Runners directly from any Linear issue, allowing you to seamlessly share context with your AI agent of choice. If you have your Linear issue synced with related Slack messages, this context will also be included in your agent run prompt.
    
    Before starting your agent run, you can review and edit your prompt. Next, you can choose which AI agent to use — Claude Code, Google Gemini, or OpenAI Codex. Netlify Agent Runners doesn’t lock you into using a single AI agent so you can pick the agent that fits the task best.
    
    To start an agent run from Linear:
    
    1.  Go to a Linear issue where you want to trigger an agent run.
    2.  In the top right corner, select **Configure coding tools…**. ![Linear issue view showing the Configure coding tools option in the top right corner](/images/changelog/linear-configure-coding-tools.png)
    3.  Toggle **Netlify Agent Runners** on.
    4.  Go back to the issue and in the top right corner, select **Open in Netlify Agent Runners**. ![Linear issue view showing the Open in Netlify Agent Runners option in the top right corner](/images/changelog/linear-open-in-netlify-agent-runners.png)
    5.  Review the prompt and choose your AI agent.
    6.  To start the agent run, select **Run task**.
    
    Once you’ve enabled this integration from your personal Linear preference settings, any Linear issue you open in your workspace will give you the option to open with Netlify Agent Runners.
    
    Now your entire team can save time and seamlessly share context between Linear and Netlify Agent Runners while keeping this work clearly tracked across Linear and Netlify. Learn more about [Agent Runners](https://docs.netlify.com/build/build-with-ai/agent-runners/overview/).
    
    [Permalink to Use Netlify Agent Runners from Linear Permalink](/changelog/2026-02-27-agent-runners-linear-integration/)
    
-   [
    
    ## Automatic PHP bot scan blocking now live on all plans
    
    ](/changelog/2026-02-27-php-scan-blocking/)
    
    February 27, 2026
    
    -   [security](/changelog/tag/security/)
    
    Netlify now automatically blocks bot scans targeting PHP paths across all plans — no configuration required.
    
    Previously, these bots generated noise in [Observability](https://docs.netlify.com/manage/monitoring/observability/overview) logs and metrics. They showed up without a `User-Agent` header. Netlify now blocks them at the edge.
    
    Since rolling out edge-level blocking on December 28, 2025, Netlify has blocked 2.9 billion of these requests.
    
    [Permalink to Automatic PHP bot scan blocking now live on all plans Permalink](/changelog/2026-02-27-php-scan-blocking/)
    
-   [
    
    ## Support for stale-while-revalidate in Cache API
    
    ](/changelog/cache-api-stale-while-revalidate/)
    
    February 27, 2026
    
    -   [build](/changelog/tag/build/)
    
    The Netlify Cache API now has full support for [`stale-while-revalidate`](https://docs.netlify.com/build/caching/caching-overview/#stale-while-revalidate-directive) (SWR). This was a previous limitation of the Cache API that has now been lifted, thanks to a request from a customer.
    
    When using `fetchWithCache` with the `swr` option, background revalidation is handled automatically. If a response is stale but still within the SWR window, it’s served immediately while a fresh response is fetched and cached in the background.
    
    ```
    import { fetchWithCache, DAY, HOUR } from "@netlify/cache";import type { Config, Context } from "@netlify/functions";
    export default async (req: Request, context: Context) => {  const response = await fetchWithCache("https://example.com/expensive-api", {    ttl: 2 * DAY,    swr: HOUR,    tags: ["product"],  });  return response;};
    export const config: Config = {  path: "/api/products",};
    ```
    
    For users who interact directly with `cache.match` and `cache.put`, a new `needsRevalidation` method lets you check whether a cached response is stale and trigger background revalidation manually:
    
    ```
    import { needsRevalidation, cacheHeaders, MINUTE, HOUR } from "@netlify/cache";import type { Config, Context } from "@netlify/functions";
    const cache = await caches.open("my-cache");
    export default async (req: Request, context: Context) => {  const request = new Request("https://example.com/expensive-api");  const cached = await cache.match(request);
      if (cached) {    if (needsRevalidation(cached)) {      context.waitUntil(        fetch(request).then((fresh) => {          const response = new Response(fresh.body, {            headers: {              ...Object.fromEntries(fresh.headers),              ...cacheHeaders({ ttl: MINUTE, swr: HOUR }),            },          });          return cache.put(request, response);        })      );    }    return cached;  }
      const fresh = await fetch(request);  const response = new Response(fresh.body, {    headers: {      ...Object.fromEntries(fresh.headers),      ...cacheHeaders({ ttl: MINUTE, swr: HOUR }),    },  });
      context.waitUntil(cache.put(request, response.clone()));  return response;};
    export const config: Config = {  path: "/api/data",};
    ```
    
    Learn more in the [Cache API documentation](https://docs.netlify.com/build/caching/cache-api/) and the [caching overview](https://docs.netlify.com/build/caching/caching-overview/).
    
    [Permalink to Support for stale-while-revalidate in Cache API Permalink](/changelog/cache-api-stale-while-revalidate/)
    
-   [
    
    ## Gemini 3.1 Flash Image Preview now available in AI Gateway
    
    ](/changelog/gemini-3-1-flash-image-preview-ai-gateway/)
    
    February 26, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    
    Google’s Gemini 3.1 Flash Image Preview, also known as Nano Banana 2, is now available through AI Gateway. You can call this 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';
    export default async (request: Request) => {    const url = new URL(request.url);    const prompt = url.searchParams.get('prompt') || 'two happy bananas';    const ai = new GoogleGenAI({});
        try {        const response = await ai.models.generateContent({            model: 'gemini-3.1-flash-image-preview',            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' }        });    }};
    ```
    
    This model 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](https://docs.netlify.com/build/ai-gateway/overview/).
    
    [Permalink to Gemini 3.1 Flash Image Preview now available in AI Gateway Permalink](/changelog/gemini-3-1-flash-image-preview-ai-gateway/)
    
-   [
    
    ## GPT-5.3-Codex now available in AI Gateway
    
    ](/changelog/gpt-5-3-codex-ai-gateway/)
    
    February 24, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    
    OpenAI’s GPT-5.3-Codex model is now available through Netlify’s AI Gateway with zero configuration required.
    
    Use the OpenAI SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the GPT-5.3-Codex model:
    
    ```
    import OpenAI from 'openai';
    export default async () => {    const openai = new OpenAI();
        const response = await openai.responses.create({        model: 'gpt-5.3-codex',        input: 'How can AI improve my coding?'    });
        return Response.json(response);};
    ```
    
    GPT-5.3-Codex 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](https://docs.netlify.com/build/ai-gateway/overview/).
    
    [Permalink to GPT-5.3-Codex now available in AI Gateway Permalink](/changelog/gpt-5-3-codex-ai-gateway/)
    
-   [
    
    ## Gemini 3.1 Pro Preview now available in AI Gateway
    
    ](/changelog/gemini-3-1-pro-preview-ai-gateway/)
    
    February 19, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    
    Google’s Gemini 3.1 Pro Preview model is now available through Netlify’s AI Gateway with zero configuration required.
    
    Use the Google GenAI SDK directly in your Netlify Functions without managing API keys or authentication. The AI Gateway handles everything automatically. Here’s an example using the Gemini 3.1 Pro Preview model:
    
    ```
    import { GoogleGenAI } from '@google/genai';
    export default async () => {    const ai = new GoogleGenAI({});
        const response = await ai.models.generateContent({        model: 'gemini-3.1-pro-preview',        contents: 'How can AI improve my workflow?'    });
        return Response.json(response);};
    ```
    
    Gemini 3.1 Pro Preview 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](https://docs.netlify.com/build/ai-gateway/overview/).
    
    [Permalink to Gemini 3.1 Pro Preview now available in AI Gateway Permalink](/changelog/gemini-3-1-pro-preview-ai-gateway/)
    
-   [
    
    ## Claude Sonnet 4.6 now available in AI Gateway and Agent Runners
    
    ](/changelog/claude-sonnet-4-6-ai-gateway-agent-runners/)
    
    February 17, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    -   [agent runners](/changelog/tag/agent-runners/)
    
    Anthropic’s Claude Sonnet 4.6 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 4.6 model:
    
    ```
    import Anthropic from '@anthropic-ai/sdk';
    export default async () => {    const anthropic = new Anthropic();
        const response = await anthropic.messages.create({        model: 'claude-sonnet-4-6',        max_tokens: 4096,        messages: [            {                role: 'user',                content: 'How can AI improve my coding?'            }        ]    });
        return Response.json(response);};
    ```
    
    Claude Sonnet 4.6 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](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 Sonnet 4.6 now available in AI Gateway and Agent Runners Permalink](/changelog/claude-sonnet-4-6-ai-gateway-agent-runners/)
    
-   [
    
    ## Sync changes with Agent Runners
    
    ](/changelog/2026-02-13-sync-changes-with-agent-runners/)
    
    February 13, 2026
    
    -   [agent runners](/changelog/tag/agent-runners/)
    
    You can now sync changes from different agent runs in the Netlify dashboard. This is especially helpful if you use Netlify Drop to publish or update your project and don’t use Git workflows to sychronize versions of your project.
    
    Syncing changes helps you and your whole team build and publish faster.
    
    ## How it works
    
    For example, let’s say you used Netlify Drop to publish your project without setting up a Git workflow.
    
    Next, you decide to use Agent Runners to add a new landing page.
    
    You also start an agent run to update your project’s footer and publish the new footer.
    
    Your agent run for the new landing page doesn’t include the footer changes yet. To get these updates, start a **sync run** from the Agent Runners dashboard. This will apply all new updates from the live production version of your project.
    
    Now when you publish your landing page updates, you’ll get the updated footer as well.
    
    Syncing changes with Agent Runners enables smoother shipping with several agent runs and with multiple [team members](https://docs.netlify.com/manage/accounts-and-billing/team-management/manage-team-members/#add-new-team-members) working on the same project.
    
    [Permalink to Sync changes with Agent Runners Permalink](/changelog/2026-02-13-sync-changes-with-agent-runners/)
    
-   [
    
    ## Claude Opus 4.6 now available in AI Gateway and Agent Runners
    
    ](/changelog/claude-opus-4-6-ai-gateway-agent-runners/)
    
    February 5, 2026
    
    -   [ai gateway](/changelog/tag/ai-gateway/)
    -   [agent runners](/changelog/tag/agent-runners/)
    
    Anthropic’s Claude Opus 4.6 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 Opus 4.6 model:
    
    ```
    import Anthropic from '@anthropic-ai/sdk';
    export default async () => {    const anthropic = new Anthropic();
        const response = await anthropic.messages.create({        model: 'claude-opus-4-6',        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 Opus 4.6 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](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 Opus 4.6 now available in AI Gateway and Agent Runners Permalink](/changelog/claude-opus-4-6-ai-gateway-agent-runners/)
    

[Previous page](/changelog/page/6) [Next page](/changelog/page/8)