{"id":"src_ZdOQWQjgnyQ5618DKGHXN","slug":"cloudflare-core-platform","name":"Core Platform Changelog","type":"feed","url":"https://developers.cloudflare.com/changelog/?area=core-platform","orgId":"org_fW6EY8PY8Cr42ifo1IUAm","productId":"prod_NbGk_muq0AArXmYE8Tesm","productSlug":"core-platform","org":{"id":"org_fW6EY8PY8Cr42ifo1IUAm","slug":"cloudflare","name":"Cloudflare"},"isPrimary":false,"isHidden":false,"discovery":"curated","fetchPriority":"normal","metadata":"{\"feedUrl\":\"https://developers.cloudflare.com/changelog/rss/core-platform.xml\",\"feedType\":\"rss\",\"feedDiscoveredAt\":\"2026-06-19T21:04:45.547Z\",\"noFeedFound\":false,\"feedContentDepth\":\"full\",\"feedEtag\":\"\\\"7599a3789d6735da3f023d0e0c02c8a8\\\"\",\"feedContentLength\":\"1271610\",\"enrichment\":{\"consecutiveFailures\":0},\"sourceActor\":{\"nextAlarmAt\":\"2026-11-03T17:44:01.444Z\",\"lastAlarmAt\":\"2026-11-03T13:44:02.843Z\",\"managed\":true}}","notice":null,"kind":null,"stars":null,"starsFetchedAt":null,"releaseCount":254,"releasesLast30Days":17,"avgReleasesPerWeek":4.6,"latestVersion":null,"latestDate":"2026-10-30T00:00:00.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-11-03T01:38:08.021Z","lastPolledAt":"2026-11-03T13:47:09.994Z","changeDetectedAt":null,"trackingSince":"2024-09-05T00:00:00.000Z","releases":[{"id":"rel_MwudCTC4DzOUL4szYw9CF","version":null,"type":"feature","title":"Audit Logs - Audit Logs v2: Account analytics","summary":"Audit Logs v2 now includes account-level analytics with an Actions over time chart separating successful and failed actions, plus summary cards for Total actions, Unique actors, Products impacted, and Failure rate that drill into action types, authentication methods, top actors, top products, or failed actions. Card selections can be applied or excluded as filters that update both the analytics and the audit log table; analytics are not available for organization-level audit logs.","titleGenerated":"Cloudflare Audit Logs v2 adds account-level analytics dashboard","titleShort":"Audit Logs v2 gains account analytics","breaking":"none","importance":3,"content":"Audit Logs v2 now includes analytics for account-level audit logs in the Cloudflare dashboard. The **Actions over time** chart separates successful and failed actions for the selected time range.\n\nSummary cards show **Total actions**, **Unique actors**, **Products impacted**, and **Failure rate**. Select a card to investigate action types, authentication methods, top actors, top products, or failed actions. You can apply or exclude values as filters to update both the analytics and audit log table.\n\n![Account analytics in Audit Logs v2](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1236,height=426,format=webp/_astro/audit-logs-v2-account-analytics.2WZv2Lwb.png)\n\nAccount analytics are not available for organization-level audit logs.\n\nFor more information, refer to the [account analytics documentation](https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/#account-analytics).","publishedAt":"2026-10-30T00:00:00.000Z","fetchedAt":"2026-10-30T16:34:45.060Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-30-audit-logs-v2-account-analytics/","media":[{"type":"image","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1236,height=426,format=webp/_astro/audit-logs-v2-account-analytics.2WZv2Lwb.png","alt":"Account analytics in Audit Logs v2","r2Key":"releases/259d557cd7e5483ebacca04314ff94c2c1b9dbaf9ca0e6ed54de5ea267a0ead2.png","r2Url":"https://media.releases.sh/releases/259d557cd7e5483ebacca04314ff94c2c1b9dbaf9ca0e6ed54de5ea267a0ead2.png"}],"coverageCount":0},{"id":"rel_kR7-yl9eosaQJAKKdJKi6","version":null,"type":"feature","title":"Workers, Cloudflare CLI - Serve Workers Static Assets from a URL path prefix","summary":"Workers Static Assets can now serve assets from a URL path prefix without changing their directory structure, configured via assets.base_path in Wrangler or worker.assets.basePath in cloudflare.config.ts. Requires Wrangler 4.148.0 or later, or cf 1.0.0-beta.13 or later for cloudflare.config.ts.","titleGenerated":"Cloudflare Workers Static Assets can now serve from a URL path prefix","titleShort":"Static assets serve from a URL path prefix","breaking":"none","importance":3,"content":"Workers Static Assets can now serve assets from a URL path prefix without changing their directory structure. Set `assets.base_path` in Wrangler, or `worker.assets.basePath` in `cloudflare.config.ts`.\n\nUse [Wrangler 4.148.0 ↗︎](https://github.com/cloudflare/workers-sdk/releases/tag/wrangler%404.148.0) or later. With `cloudflare.config.ts`, use [`cf` 1.0.0-beta.13 ↗︎](https://github.com/cloudflare/cf/releases/tag/cf%401.0.0-beta.13) or later.\n\nFor example, this configuration serves your built assets from `/blog/`:\n\nSelect your preferred CLI\n\nWranglerCF\n\nChanges examples on this page to use the selected CLI.\n\n```\n<span class=\"line\"><span class=\"nb-shiki-140thh\">{</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  \"$schema\"</span><span class=\"nb-shiki-140thh\">: </span><span class=\"nb-shiki-mdbnqw\">\"./node_modules/wrangler/config-schema.json\"</span><span class=\"nb-shiki-140thh\">,</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  \"assets\"</span><span class=\"nb-shiki-140thh\">: {</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">    \"directory\"</span><span class=\"nb-shiki-140thh\">: </span><span class=\"nb-shiki-mdbnqw\">\"./dist\"</span><span class=\"nb-shiki-140thh\">,</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">    \"base_path\"</span><span class=\"nb-shiki-140thh\">: </span><span class=\"nb-shiki-mdbnqw\">\"/blog\"</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">  }</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">}</span></span>\n```\n\n```\n<span class=\"line\"><span class=\"nb-shiki-140thh\">[</span><span class=\"nb-shiki-1t8gfj\">assets</span><span class=\"nb-shiki-140thh\">]</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">directory = </span><span class=\"nb-shiki-mdbnqw\">\"./dist\"</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">base_path = </span><span class=\"nb-shiki-mdbnqw\">\"/blog\"</span></span>\n```\n\ncloudflare.config.tsts\n\n```\n<span class=\"line\"><span class=\"nb-shiki-1itgoe\">import</span><span class=\"nb-shiki-140thh\"> { defineConfig } </span><span class=\"nb-shiki-1itgoe\">from</span><span class=\"nb-shiki-mdbnqw\"> \"cf/config\"</span><span class=\"nb-shiki-140thh\">;</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span class=\"nb-shiki-1itgoe\">export</span><span class=\"nb-shiki-1itgoe\"> default</span><span class=\"nb-shiki-1t8gfj\"> defineConfig</span><span class=\"nb-shiki-140thh\">({</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">worker: {</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">  name: </span><span class=\"nb-shiki-mdbnqw\">\"blog\"</span><span class=\"nb-shiki-140thh\">,</span></span>\n<span class=\"line\"><span class=\"nb-shiki-21nrsd\">  // Set this to today's date</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">  compatibilityDate: </span><span class=\"nb-shiki-mdbnqw\">\"2026-10-28\"</span><span class=\"nb-shiki-140thh\">,</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">  assets: {</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">    basePath: </span><span class=\"nb-shiki-mdbnqw\">\"/blog\"</span><span class=\"nb-shiki-140thh\">,</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">  },</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">},</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">});</span></span>\n```\n\nWith Wrangler, `assets.directory` selects the directory to serve. With [`cloudflare.config.ts`](https://developers.cloudflare.com/cf/projects/cloudflare-config/), your build configuration supplies the assets.\n\nTo configure the option, refer to [Serving a subdirectory](https://developers.cloudflare.com/workers/static-assets/routing/advanced/serving-a-subdirectory/).","publishedAt":"2026-10-28T00:00:00.000Z","fetchedAt":"2026-10-28T15:56:52.528Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-28-static-assets-base-path/","media":[],"coverageCount":0},{"id":"rel_IhmSm_Pr1_LANNx-74JVr","version":null,"type":"feature","title":"Analytics - SQL API introspection: `include_attributes` parameter","summary":"Setting include_attributes=true on the SQL API introspection endpoint discovers the keys of a dataset's attributes JSON column, and their types, from the preceding seven days of account data and returns them in the attributes field. include_custom_attributes and custom_attributes are deprecated but still work.","titleGenerated":"Cloudflare SQL API adds include_attributes introspection parameter","titleShort":"SQL API introspection gains include_attributes","breaking":"minor","importance":2,"content":"The SQL API introspection endpoint has a new `include_attributes` query parameter. Setting it to `true` discovers the keys of a dataset's `attributes` JSON column, and their types, from the preceding seven days of your account's data. Discovered keys are returned in the dataset's `attributes` response field.\n\nSome datasets store additional key-value data in an `attributes` JSON column, which you query with exact-key lookups such as `attributes['http.method']`. The previous way to discover these keys, `include_custom_attributes`, returned names in a `custom_attributes` field. The new names make it clearer that each returned name is a key you access through the `attributes` column.\n\n`include_custom_attributes` and `custom_attributes` are deprecated but still work. Update integrations to use `include_attributes` and `attributes`.\n\n```\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">curl</span><span class=\"nb-shiki-dzsirb\"> --get</span><span class=\"nb-shiki-mdbnqw\"> \"https://api.cloudflare.com/client/v4/analytics/sql/introspection\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  --header</span><span class=\"nb-shiki-mdbnqw\"> \"Authorization: Bearer <API_TOKEN>\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  --data-urlencode</span><span class=\"nb-shiki-mdbnqw\"> \"account_tag=<ACCOUNT_TAG>\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  --data-urlencode</span><span class=\"nb-shiki-mdbnqw\"> \"dataset_name=events.httpRequests\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  --data-urlencode</span><span class=\"nb-shiki-mdbnqw\"> \"include_attributes=true\"</span></span>\n```\n\nFor more information, refer to [Attributes](https://developers.cloudflare.com/analytics/sql-api/datasets/#attributes).","publishedAt":"2026-10-27T00:00:00.000Z","fetchedAt":"2026-10-27T19:41:06.429Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-27-introspection-include-attributes/","media":[],"coverageCount":0},{"id":"rel_nJnPOu3yPq3t-kCbIP6Be","version":null,"type":"feature","title":"Cloudflare Tunnel, Cloudflare Tunnel for SASE - Cloudflare Tunnel supports URL normalization","summary":"Starting with cloudflared 2026.10.0, Cloudflare Tunnel can normalize URLs before matching ingress rules, improving security for tunnels with rules that require Cloudflare Access validation, while the path sent to the origin stays the same. The setting is off by default, but new cloudflared releases will enable it by default starting 2027-01-25, so path-based routing should be tested before then.","titleGenerated":"Cloudflare Tunnel 2026.10.0 adds opt-in URL normalization for ingress matching","titleShort":"URL normalization for ingress matching now opt-in; default flips in January","breaking":"minor","importance":3,"content":"Starting from version `2026.10.0`, [Cloudflare Tunnel](https://developers.cloudflare.com/tunnel/) can normalize URLs before matching ingress rules. This improves security for tunnels with rules that require Cloudflare Access validation. The URL path sent to your origin stays the same.\n\nIn three months, starting 2027-01-25, new `cloudflared` releases will turn on URL normalization by default. Test your path-based routing before that date, as this change may affect which ingress rule matches a request. Configurations without rules requiring Access validation are unaffected.\n\nThis setting is currently off by default. To turn it on, run:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">cloudflared</span><span class=\"nb-shiki-mdbnqw\"> tunnel</span><span class=\"nb-shiki-dzsirb\"> --disable-path-normalization=false</span><span class=\"nb-shiki-mdbnqw\"> run</span><span class=\"nb-shiki-1itgoe\"> <</span><span class=\"nb-shiki-mdbnqw\">TUNNEL_NAME_OR_UUI</span><span class=\"nb-shiki-140thh\">D</span><span class=\"nb-shiki-1itgoe\">></span></span>\n```\n\nAlternatively, set `TUNNEL_DISABLE_PATH_NORMALIZATION=false` on each `cloudflared` replica and restart it.\n\nFor more information, refer to [ingress matching](https://developers.cloudflare.com/tunnel/features/locally-managed-tunnels/configuration-file/#how-traffic-is-matched) and [Access validation at the origin](https://developers.cloudflare.com/tunnel/reference/origin-parameters/#access).","publishedAt":"2026-10-22T00:00:00.000Z","fetchedAt":"2026-10-22T22:09:31.907Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-22-cloudflared-path-normalization/","media":[],"coverageCount":0},{"id":"rel_DNhFR5wuQJuPWtNaIOivr","version":null,"type":"feature","title":"Cloudflare Fundamentals, Cloudflare One, Cloudflare Tunnel for SASE, Cloudflare Tunnel - Granular Tunnel Read And Monitor role is generally available","summary":"The Cloudflare Tunnel - Granular Connector cloudflared Read And Monitor role is generally available, granting read access and remote log streaming for specific Tunnel instances without write access or access to every Tunnel in the account. It includes the same access as the Read role, which does not grant log streaming.","titleGenerated":"Cloudflare Tunnel granular Read And Monitor role generally available","titleShort":"Granular Tunnel read role now includes log streaming","breaking":"none","importance":3,"content":"The **Cloudflare Tunnel - Granular Connector cloudflared Read And Monitor** role is now generally available. You can grant a member read access and log streaming for specific [Cloudflare Tunnel](https://developers.cloudflare.com/tunnel/) instances without granting write access or access to every Tunnel in your account.\n\nThis role includes the same access as **Cloudflare Tunnel - Granular Connector cloudflared Read**: viewing selected Tunnels, their IP and hostname routes, and connector host details. It also grants [remote log streaming](https://developers.cloudflare.com/tunnel/observability/#remote-log-streaming), so support operators can troubleshoot a Tunnel without changing its configuration. The existing **Read** role does not grant log streaming access.\n\nTo assign the role, follow [Grant a granular permission](https://developers.cloudflare.com/tunnel/guides/granular-permissions/#grant-a-granular-permission). For the available roles, refer to the [resource-scoped roles reference](https://developers.cloudflare.com/fundamentals/manage-members/roles/#resource-scoped-roles).","publishedAt":"2026-10-22T00:00:00.000Z","fetchedAt":"2026-10-22T22:09:31.907Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-22-granular-read-and-monitor-ga/","media":[],"coverageCount":0},{"id":"rel_TPIfvX5H6P6TDvOhfz6Nk","version":null,"type":"feature","title":"logpush, Logs - Account-scoped HTTP request logs in Logpush","summary":"Logpush now supports HTTP request logs as an account-scoped dataset, so one job delivers logs for every zone in an account with the ZoneName field identifying the source zone. Custom fields remain configured per zone, with no account-wide custom field configuration.","titleGenerated":"Cloudflare Logpush adds account-scoped HTTP request logs","titleShort":"Logpush ships account-scoped HTTP request logs","breaking":"none","importance":3,"content":"Cloudflare Logpush now supports HTTP request logs as an [account-scoped dataset](https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/http_requests/). Use one job to deliver logs for every zone in an account instead of maintaining a separate job for each zone.\n\nCreate the job at the account level in the Cloudflare dashboard or through the Logpush API. The `ZoneName` field identifies the source zone in each log entry.\n\nCustom fields remain configured per zone. An account-scoped job honors the custom fields configuration for each zone but does not support account-wide custom fields configuration.\n\nFor setup details, refer to [API configuration](https://developers.cloudflare.com/logs/logpush/logpush-job/api-configuration/).","publishedAt":"2026-10-21T00:00:00.000Z","fetchedAt":"2026-10-27T19:41:07.000Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-21-account-scoped-http-requests/","media":[],"coverageCount":0},{"id":"rel_33hdT3F4KFK1hmCoczBYN","version":null,"type":"feature","title":"Workers, Cloudflare CLI - Wrangler and cf now upload source maps by default","summary":"From Wrangler 4.150.0, wrangler deploy, versions upload, and preview generate and upload source maps by default, and cf deploy does the same, so upload_source_maps no longer needs to be set to get stack traces with original file names and line numbers. Maps that can't be resolved, such as inline data: source maps, are skipped instead of failing the upload unless upload_source_maps is set to true.","titleGenerated":"Cloudflare Wrangler and cf now upload source maps by default","titleShort":"Wrangler, cf upload source maps by default","breaking":"major","importance":4,"content":"From Wrangler 4.150.0, [`wrangler deploy`](https://developers.cloudflare.com/workers/wrangler/commands/general/#deploy), [`wrangler versions upload`](https://developers.cloudflare.com/workers/wrangler/commands/general/#versions-upload), and [`wrangler preview`](https://developers.cloudflare.com/workers/wrangler/commands/workers/#preview) generate and upload [source maps](https://developers.cloudflare.com/workers/observability/source-maps/) by default. You no longer need to set `upload_source_maps` to get stack traces with your original file names and line numbers.\n\n[`cf deploy`](https://developers.cloudflare.com/cf/) also uploads source maps by default. With the [Cloudflare Vite plugin](https://developers.cloudflare.com/workers/vite-plugin/) 1.64.0 or later, Worker builds generate source maps by default, and `cf deploy` uploads every source map in the build output.\n\n![Stack Trace with Source Map remapping](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1850,height=238,format=webp/_astro/with-source-map.PipytmVe.png)\n\nRemapped stack traces show up in [Workers Logs](https://developers.cloudflare.com/workers/observability/logs/workers-logs/), [real-time logs](https://developers.cloudflare.com/workers/observability/logs/real-time-logs/), [Tail Workers](https://developers.cloudflare.com/workers/observability/logs/tail-workers/), and [Workers Issues](https://developers.cloudflare.com/workers/observability/issues/). Source maps are applied after your Worker runs, so they don't affect CPU time, bundle size, or cold starts.\n\nIf your Worker uses a custom build, Wrangler uploads any external source maps it finds. Maps it can't resolve, such as inline `data:` source maps, are skipped instead of failing the upload. Set `upload_source_maps` to `true` if you'd prefer the upload to fail.\n\nTo opt out with Wrangler, set `upload_source_maps` to `false`:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-140thh\">{</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">\t\"upload_source_maps\"</span><span class=\"nb-shiki-140thh\">: </span><span class=\"nb-shiki-dzsirb\">false</span></span>\n<span class=\"line\"><span class=\"nb-shiki-140thh\">}</span></span>\n```\n\n```\n<span class=\"line\"><span class=\"nb-shiki-140thh\">upload_source_maps = </span><span class=\"nb-shiki-dzsirb\">false</span></span>\n```\n\nTo opt out with `cf` or the Cloudflare Vite plugin, set `build.sourcemap` to `false` for your Worker's Vite environment. Refer to [Disable source maps](https://developers.cloudflare.com/workers/observability/source-maps/#disable-source-maps).","publishedAt":"2026-10-20T00:00:00.000Z","fetchedAt":"2026-10-21T01:35:05.705Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-20-source-maps-on-by-default/","media":[{"type":"image","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1850,height=238,format=webp/_astro/with-source-map.PipytmVe.png","alt":"Stack Trace with Source Map remapping","r2Key":"releases/c3379c1f0a1b2f9a85cdc2598b7e3393b64c81c6f3946b76682df05e9f114ab7.png","r2Url":"https://media.releases.sh/releases/c3379c1f0a1b2f9a85cdc2598b7e3393b64c81c6f3946b76682df05e9f114ab7.png"}],"coverageCount":0},{"id":"rel_IHmCGrGty2RXX3etnD-hv","version":null,"type":"feature","title":"Workers, Cloudflare CLI - Test Cron Triggers with Local Explorer","summary":"Local Explorer can now send one-off Cron Trigger invocations to a Worker's scheduled() handler during local development, removing the need to construct request URLs when testing handler behavior. The browser interface supports invoking configured cron expressions, building ad hoc expressions, setting reusable scheduled times, and inspecting outcomes and noRetry() status, and the same operation is exposed via the Local Explorer API, which takes an exact Worker name plus a cron expression and optional scheduled time.","titleGenerated":"Cloudflare Workers Local Explorer tests Cron Triggers via scheduled() handler","titleShort":"Local Explorer fires one-off Cron Triggers locally","breaking":"none","importance":3,"content":"Local Explorer can now send one-off Cron Trigger invocations to a Worker's `scheduled()` handler during local development. This removes the need to construct request URLs when testing handler behavior.\n\nStart your local development server with [`cf dev`](https://developers.cloudflare.com/cf/projects/#start-development), [`wrangler dev`](https://developers.cloudflare.com/workers/wrangler/commands/general/#dev), or the [Cloudflare Vite plugin](https://developers.cloudflare.com/workers/vite-plugin/). Open `/cdn-cgi/local/explorer` on the server URL and select **Cron Triggers**.\n\nThe browser interface supports the following tasks:\n\n- Invoke configured cron expressions\n- Build ad hoc expressions\n- Set reusable scheduled times\n- Inspect outcomes and `noRetry()` status\n\nAd hoc triggers and scheduled time presets stay in your browser. They do not change `cloudflare.config.ts`, your Wrangler configuration, or deployed Cron Triggers. Local development does not run cron schedules automatically.\n\nFull logs and traces are available in the development session that owns the Worker when that session has **Observability** turned on.\n\nThe following example uses port `8787`. Replace it with your development server port, such as `5173` for Vite.\n\nThe Local Explorer API exposes the same operation for tools and AI agents. The request targets an exact Worker name and accepts a cron expression and optional scheduled time:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">curl</span><span class=\"nb-shiki-dzsirb\"> -X</span><span class=\"nb-shiki-mdbnqw\"> POST</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-mdbnqw\">  \"http://localhost:8787/cdn-cgi/local/explorer/api/local/scheduled?worker=my-worker\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  -H</span><span class=\"nb-shiki-mdbnqw\"> \"Content-Type: application/json\"</span><span class=\"nb-shiki-dzsirb\"> \\</span></span>\n<span class=\"line\"><span class=\"nb-shiki-dzsirb\">  --data</span><span class=\"nb-shiki-mdbnqw\"> '{\"cron\":\"0 * * * *\",\"scheduled_time\":1745856238000}'</span></span>\n```\n\nFor more details, refer to [Test Cron Triggers with Local Explorer](https://developers.cloudflare.com/workers/local-development/local-explorer/#test-cron-triggers).","publishedAt":"2026-10-17T00:00:00.000Z","fetchedAt":"2026-10-17T16:31:47.288Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-17-local-explorer-cron-triggers/","media":[],"coverageCount":0},{"id":"rel_oyvIrbiBXrBTM0Em8heZ_","version":null,"type":"feature","title":"Workers, Cloudflare CLI - Search Cloudflare documentation with the Cloudflare CLI","summary":"Cloudflare CLI 1.0.0-beta.16 adds cf docs search, which queries live Cloudflare documentation and returns up to five ranked JSON results with title, description, and URL. Generated command names are standardized to kebab-case, so cf accounts billing getCredits becomes cf accounts billing get-credits.","titleGenerated":"Cloudflare CLI beta.16 adds cf docs search, renames commands to kebab-case","titleShort":"cf docs search lands; command names move to kebab-case","breaking":"major","importance":3,"content":"Cloudflare CLI `1.0.0-beta.16` includes `cf docs search`, so you and your coding agent can find Cloudflare documentation without leaving the terminal. Search for guides, tutorials, and examples across Cloudflare products.\n\nTo install or update to the latest release:\n\nif (!customElements.get(\"nb-pm-restore\")) { customElements.define( \"nb-pm-restore\", class extends HTMLElement { connectedCallback() { const card = this.closest(\"\\[data-nb-pm\\]\"); if (!card) return; let saved; try { saved = sessionStorage.getItem(\"ui-pm-tab\"); } catch { return; } if (!saved) return; const tabs = card.querySelectorAll(\"\\[data-nb-pm-tab\\]\"); let idx = -1; tabs.forEach(function (t, i) { if (t.textContent.trim() === saved) idx = i; }); if (idx < 1) return; tabs.forEach(function (t, i) { t.setAttribute(\"aria-selected\", String(i === idx)); }); card.querySelectorAll(\"\\[data-nb-pm-panel\\]\").forEach(function (p, i) { p.hidden = i !== idx; }); } }, ); }\n\nnpmyarnpnpmbun\n\n```\n<span class=\"text-success\">npm</span><span class=\"text-warning\"> install --global cf@latest</span>\n```\n\n```\n<span class=\"text-success\">yarn</span><span class=\"text-warning\"> global add cf@latest</span>\n```\n\n```\n<span class=\"text-success\">pnpm</span><span class=\"text-warning\"> add --global cf@latest</span>\n```\n\n```\n<span class=\"text-success\">bun</span><span class=\"text-warning\"> add --global cf@latest</span>\n```\n\nDescribe what you want to do, or ask a question:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">cf</span><span class=\"nb-shiki-mdbnqw\"> docs</span><span class=\"nb-shiki-mdbnqw\"> search</span><span class=\"nb-shiki-mdbnqw\"> \"proxy a DNS record\"</span></span>\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">cf</span><span class=\"nb-shiki-mdbnqw\"> docs</span><span class=\"nb-shiki-mdbnqw\"> search</span><span class=\"nb-shiki-mdbnqw\"> \"rate limit requests with WAF\"</span></span>\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">cf</span><span class=\"nb-shiki-mdbnqw\"> docs</span><span class=\"nb-shiki-mdbnqw\"> search</span><span class=\"nb-shiki-mdbnqw\"> \"schedule a worker\"</span></span>\n```\n\nThe command searches live Cloudflare documentation and returns up to five ranked JSON results. Each result includes a title, description, and documentation URL. An Internet connection is required.\n\n![Terminal demo of Cloudflare CLI beta-16 searching DNS and WAF documentation](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1280,height=720,format=webp/_astro/docs-search-demo.cWBK3YBx.gif)\n\nAgents can parse the results and fetch a complete page as Markdown. For example, use `jq` to select the first result, then request its URL with the `Accept: text/markdown` header:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-140thh\">url</span><span class=\"nb-shiki-1itgoe\">=</span><span class=\"nb-shiki-140thh\">$(</span><span class=\"nb-shiki-1t8gfj\">cf</span><span class=\"nb-shiki-mdbnqw\"> docs</span><span class=\"nb-shiki-mdbnqw\"> search</span><span class=\"nb-shiki-mdbnqw\"> \"proxy a DNS record\"</span><span class=\"nb-shiki-1itgoe\"> |</span><span class=\"nb-shiki-1t8gfj\"> jq</span><span class=\"nb-shiki-dzsirb\"> -r</span><span class=\"nb-shiki-mdbnqw\"> '.[0].url'</span><span class=\"nb-shiki-140thh\">)</span></span>\n<span class=\"line\"><span class=\"nb-shiki-1t8gfj\">curl</span><span class=\"nb-shiki-dzsirb\"> -H</span><span class=\"nb-shiki-mdbnqw\"> \"Accept: text/markdown\"</span><span class=\"nb-shiki-mdbnqw\"> \"</span><span class=\"nb-shiki-140thh\">$url</span><span class=\"nb-shiki-mdbnqw\">\"</span></span>\n```\n\nThis release also standardizes generated command names to kebab-case. For example, `cf accounts billing getCredits` becomes `cf accounts billing get-credits`. For the full list of breaking command and flag changes, refer to the [Cloudflare CLI release notes ↗︎](https://github.com/cloudflare/cf/blob/main/packages/cli/CHANGELOG.md).\n\nFor more information, refer to [Find Cloudflare documentation with a coding agent](https://developers.cloudflare.com/cf/agents/#find-cloudflare-documentation).","publishedAt":"2026-10-16T00:00:00.000Z","fetchedAt":"2026-10-16T12:09:44.096Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-16-docs-search/","media":[{"type":"gif","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1280,height=720,format=webp/_astro/docs-search-demo.cWBK3YBx.gif","alt":"Terminal demo of Cloudflare CLI beta-16 searching DNS and WAF documentation","r2Key":"releases/711da5f8c09b1dc9f99da9f033a4c1b12d2a8907f897bde04fc2d00e62c51084.mp4","r2Url":"https://media.releases.sh/releases/711da5f8c09b1dc9f99da9f033a4c1b12d2a8907f897bde04fc2d00e62c51084.mp4"}],"coverageCount":0},{"id":"rel_DupR0Bjy60SsuJJsnx8xH","version":null,"type":"feature","title":"Cloudflare Tunnel, Cloudflare Tunnel for SASE, Cloudflare Mesh, Cloudflare One - 50,000 routes per account and Tunnels for Platforms","summary":"The default route limit is now 50,000 per account, up from 1,000, applying automatically to CIDR and hostname routes for Cloudflare Tunnel and Cloudflare Mesh. Tunnels for Platforms lets accounts exceed the included 1,000 tunnels by purchasing more at $4.50 per tunnel per month.","titleGenerated":"Cloudflare Tunnel raises default routes to 50,000 and adds Tunnels for Platforms","titleShort":"Default routes jump to 50k; tunnels per account now purchasable","breaking":"none","importance":3,"content":"Two changes make it easier to run Cloudflare Tunnel at scale.\n\n#### 50,000 routes per account by default\n\nThe default limit for [routes](https://developers.cloudflare.com/cloudflare-one/networks/routes/add-routes/) is now 50,000 per account, up from 1,000. This limit covers [CIDR routes](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/) and [hostname routes](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/) for [Cloudflare Tunnel](https://developers.cloudflare.com/tunnel/) and [Cloudflare Mesh](https://developers.cloudflare.com/mesh/). The new limit applies to every account automatically, with no action required.\n\nPublished applications (public hostnames) are not routes and are not affected by this limit. Each tunnel supports roughly 5,000–10,000 published applications, depending on the size of its configuration. For details, refer to [Published application limits](https://developers.cloudflare.com/tunnel/concepts/routing/#published-application-limits).\n\n#### Tunnels for Platforms\n\nEvery account includes 1,000 tunnels. With [Tunnels for Platforms](https://developers.cloudflare.com/tunnel/features/tunnels-for-platforms/), you can now run more than 1,000 tunnels in a single account — for example, one tunnel per device, per end customer, or per development environment.\n\n![Buy additional tunnels from the Tunnels page in the Cloudflare dashboard](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1512,height=802,format=webp/_astro/tunnels-for-platforms.DuPYMNzo.gif)\n\nTo buy additional tunnels, go to **Networking** > **Tunnels** and select **Buy more tunnels** in the **Usage** card. Additional tunnels are billed at $4.50 per tunnel per month. Enterprise customers can contact their account team for committed or usage-based pricing.\n\n[Go to **Tunnels** ↗](https://dash.cloudflare.com/?to=/:account/tunnels)\n\nFor pricing, limits, and best practices for managing large tunnel fleets, refer to [Tunnels for Platforms](https://developers.cloudflare.com/tunnel/features/tunnels-for-platforms/).","publishedAt":"2026-10-16T00:00:00.000Z","fetchedAt":"2026-10-16T12:09:44.096Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-16-tunnels-for-platforms-and-50k-routes/","media":[{"type":"gif","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=1512,height=802,format=webp/_astro/tunnels-for-platforms.DuPYMNzo.gif","alt":"Buy additional tunnels from the Tunnels page in the Cloudflare dashboard","r2Key":"releases/79dafbdfdd98e72d70d81864b23a582208c39b56fa878d633260f7949a029043.mp4","r2Url":"https://media.releases.sh/releases/79dafbdfdd98e72d70d81864b23a582208c39b56fa878d633260f7949a029043.mp4"}],"coverageCount":0},{"id":"rel_pQE3fW1Iq_jNkJhbhmsjV","version":null,"type":"feature","title":"Rules - Remove surrounding bytes with trim functions","summary":"Cloudflare Rules now supports trim(), trim_start(), and trim_end() for removing surrounding bytes, defaulting to ASCII whitespace with an optional custom byte set. The functions return nil for nil input and are available on all plans across all HTTP products.","titleGenerated":"Cloudflare Rules adds trim, trim_start, and trim_end functions","titleShort":"Rules language gains trim functions","breaking":"none","importance":2,"content":"Cloudflare Rules supports three new functions for removing surrounding bytes. Use them to remove whitespace before comparing request values. All HTTP products support these functions on all plans:\n\n- `trim()` removes bytes from both ends.\n- `trim_start()` removes bytes from the start.\n- `trim_end()` removes bytes from the end.\n\nBy default, these functions remove ASCII whitespace. An optional constant string specifies a custom set of bytes.\n\nIf the input value is nil, these functions return nil.\n\nFor example, this expression removes surrounding whitespace before comparing a header value:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-wvjl67\">trim(http.request.headers[\"x-label\"][0]) eq \"approved\"</span></span>\n```\n\nFor details, refer to the [`trim()`](https://developers.cloudflare.com/ruleset-engine/rules-language/functions/#trim), [`trim_start()`](https://developers.cloudflare.com/ruleset-engine/rules-language/functions/#trim_start), and [`trim_end()`](https://developers.cloudflare.com/ruleset-engine/rules-language/functions/#trim_end) function references.","publishedAt":"2026-10-14T00:00:00.000Z","fetchedAt":"2026-10-14T15:34:56.090Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-14-trim-functions/","media":[],"coverageCount":0},{"id":"rel_6EmxFd3nwJ2A9OFnEaeaW","version":null,"type":"feature","title":"Audit Logs - Audit Logs v2 now captures view actions","summary":"Audit Logs v2 now records view actions for supported endpoints, corresponding to GET requests, to give visibility into read activity for security investigations. The dashboard excludes view actions by default via an Action type is not view filter, while the API and Logpush always include them.","titleGenerated":"Cloudflare Audit Logs v2 now records view actions for GET requests","titleShort":"Audit Logs v2 captures view actions; dashboard filters them out","breaking":"none","importance":3,"content":"Audit Logs v2 now records `view` actions for supported endpoints, providing visibility into read activity across Cloudflare products. These actions correspond to `GET` requests and provide additional context for security investigations and forensic analysis.\n\nThe Audit Logs v2 dashboard excludes `view` actions by default to reduce noise. Remove the default **Action type** is not `view` filter to include them, or set **Action type** to `view` to show only view actions.\n\nView actions are always available through the Audit Logs v2 API and Logpush, regardless of the dashboard filter.\n\nCaution\n\n`GET` requests can generate a high volume of audit logs. When using the API or Logpush, apply appropriate filters to limit the volume of delivered logs.\n\nFor more information, refer to the [Audit Logs v2 documentation](https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/#view-actions).","publishedAt":"2026-10-13T00:00:00.000Z","fetchedAt":"2026-10-14T23:41:12.840Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-13-audit-logs-v2-view-actions/","media":[],"coverageCount":0},{"id":"rel_qfv9aa6GCKKVLqExN9PI3","version":null,"type":"feature","title":"Cloudflare Fundamentals - More efficient Markdown for Agents conversion","summary":"Markdown for Agents now converts HTML with an in-process streaming engine at the edge instead of buffering responses for a separate conversion service, reducing conversion overhead and memory use. Converted responses no longer include the x-markdown-tokens or x-original-tokens headers, Content-Length is removed rather than recalculated, and the conversion limit rises to 6 MiB of decompressed HTML from 2 MiB.","titleGenerated":"Cloudflare Core Platform converts Markdown for Agents in-process, drops token headers","titleShort":"Markdown for Agents converts in-process; token headers dropped","breaking":"major","importance":3,"content":"[Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) now converts HTML with an in-process streaming engine at the edge. It processes content as it arrives instead of buffering the HTML response and sending it to a separate conversion service. This reduces conversion overhead and memory use.\n\nThis release also changes the conversion limit and response headers:\n\n- Conversion supports up to 6 MiB (6,291,456 bytes) of decompressed HTML, increased from 2 MiB (2,097,152 bytes). The limit applies after decompression, not to the compressed response size.\n- Converted responses no longer generate the `x-markdown-tokens` or `x-original-tokens` headers. Clients that use these values need to calculate token counts themselves.\n- `Content-Length` is removed from converted responses rather than recalculated, because the Markdown body is streamed.\n\nFor more information, refer to the [Markdown for Agents documentation](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/).","publishedAt":"2026-10-09T00:00:00.000Z","fetchedAt":"2026-10-09T18:03:35.671Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-09-markdown-for-agents-in-process-conversion/","media":[],"coverageCount":0},{"id":"rel_M0jEc8NTfgFthKvE7YJRC","version":null,"type":"feature","title":"Cloudflare Fundamentals - Improved HTTP/3 client cancellation reporting","summary":"Cloudflare now stops affected HTTP/3 requests when the client cancels its request stream instead of letting them continue to the origin, and records them as 499. Customers may see more 499 status codes for HTTP/3 traffic, reflecting more consistent reporting of existing cancellations rather than an increase in failed requests.","titleGenerated":"Cloudflare Core Platform reports cancelled HTTP/3 requests as 499 sooner","titleShort":"HTTP/3 client cancellations now stop sooner, log as 499","breaking":"minor","importance":3,"content":"Cloudflare has improved how it handles and reports client-cancelled HTTP/3 requests across Free, Pro, Business, and Enterprise plans. Customers now get a clearer view of client behavior in Cloudflare analytics and, where available, logs.\n\nPreviously, Cloudflare did not always stop an HTTP/3 request when the client cancelled its request stream. Some cancellations were already recorded as `499`, while others continued to the origin and showed the eventual upstream status.\n\nCloudflare now stops affected requests sooner, reducing unnecessary origin work, and records them as `499`. Customers may notice more `499` status codes for HTTP/3 traffic. This reflects more consistent reporting of existing cancellations, not an increase in failed requests.\n\nCustomers who use `499` status codes in availability calculations should consider excluding them from server-side error rates because they represent requests cancelled by clients.\n\nFor more information, refer to [Error 499](https://developers.cloudflare.com/support/troubleshooting/http-status-codes/4xx-client-error/error-499/).","publishedAt":"2026-10-09T00:00:00.000Z","fetchedAt":"2026-10-09T18:03:35.671Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-09-http3-499-reporting-improvement/","media":[],"coverageCount":0},{"id":"rel_m5qgACO_KZOi7AsF8sYRB","version":null,"type":"feature","title":"WAF, Rules - Failed detections field available in Rules","summary":"A new cf.appsec.request.failed_detections field exposes an array of detection IDs that report failures from content scanning, WAF attack score, attack signature, leaked credentials, and AI prompt detections, so rules can match and handle requests with reported failures. The field returns an empty array when no failures occur and does not alter existing detection behavior.","titleGenerated":"Cloudflare Core Platform adds failed detections field to Rules","titleShort":"Rules gain cf.appsec.request.failed_detections field","breaking":"none","importance":3,"content":"You can now use `cf.appsec.request.failed_detections` to control how your rules handle requests when a security detection reports a failure.\n\nThe field is an `Array<String>` of detection IDs that reports failures from content scanning, WAF attack score, attack signature detection, leaked credentials detection, and AI prompt detections for personally identifiable information (PII), prompt injection, custom topics, and unsafe topics.\n\nThe field does not alter the existing behavior of detections. Use it in rules to choose how to handle requests with reported failures.\n\nWhen no failures are reported, the field returns `[]`. You can use it on all plans, but your plan must still include the detections and rule features you want to use.\n\nSupported rules:\n\n- Custom rules at the zone and account levels\n- Rate limiting rules at the zone and account levels\n- Request Header Transform Rules at the zone level\n\nMatch any reported failure:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-wvjl67\">len(cf.appsec.request.failed_detections) gt 0</span></span>\n```\n\nMatch a reported leaked credentials detection failure:\n\n```\n<span class=\"line\"><span class=\"nb-shiki-wvjl67\">any(cf.appsec.request.failed_detections[*] eq \"waf_credential_check\")</span></span>\n```\n\nFor more information, refer to the [Failed detections field reference](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/cf.appsec.request.failed_detections/).","publishedAt":"2026-10-09T00:00:00.000Z","fetchedAt":"2026-10-09T09:57:18.249Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-09-failed-detections/","media":[],"coverageCount":0},{"id":"rel_1A1JAcix2edGQJqyFAWWa","version":null,"type":"feature","title":"Cloudflare Fundamentals, Cloudflare One, Gateway, Organizations - Cloudflare Organizations is generally available","summary":"Cloudflare Organizations is now generally available for Enterprise customers and MSSP/Distributor partners, providing a top-level container for centrally managing accounts, members, analytics, and shared policies. Organization Super Administrators get implicit access to every account in their Organization without separate account memberships; Enterprise customers use a single-tier Organization while MSSP/Distributor partners can use nested sub-organizations for customer accounts. Organization Roles remains in beta with current product limitations still applying.","titleGenerated":"Cloudflare Organizations generally available for Enterprise and MSSP partners","titleShort":"Cloudflare Organizations hits GA for Enterprise and MSSP partners","breaking":"none","importance":3,"content":"Cloudflare Organizations is now generally available for Enterprise customers and MSSP/Distributor partners.\n\nOrganizations provides a top-level container for centrally managing accounts, members, analytics, and shared policies. Organization Super Administrators receive implicit access to every account in their Organization without requiring separate account memberships.\n\nEnterprise customers can manage accounts in a single-tier Organization. MSSP/Distributor partners can use nested sub-organizations to manage customer accounts.\n\nOrganization Roles remains in beta, and current product limitations still apply.\n\nFor more information, refer to [Cloudflare Organizations](https://developers.cloudflare.com/fundamentals/organizations/) and [current limitations](https://developers.cloudflare.com/fundamentals/organizations/limitations/).","publishedAt":"2026-10-07T00:00:00.000Z","fetchedAt":"2026-10-07T21:28:57.285Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-07-organizations-generally-available/","media":[],"coverageCount":0},{"id":"rel_wA0qNyXZ8Z5tQAySJYlwO","version":null,"type":"feature","title":"Log Explorer - Query Log Explorer datasets from Observability Logs","summary":"Log Explorer datasets are now queried from the Logs page under Observability, which combines Log Explorer and Workers Observability datasets with a shared filter builder, SQL editor, and visualizations. The Log Explorer menu is no longer shown in dashboard navigation, though enabled datasets, saved queries, and SQL queries continue to work and the previous Log Search page remains at its direct URL.","titleGenerated":"Cloudflare Core Platform moves Log Explorer datasets into Observability Logs page","titleShort":"Log Explorer datasets move to Observability Logs; nav menu removed","breaking":"minor","importance":2,"content":"Log Explorer datasets are now queried from the [Logs](https://developers.cloudflare.com/observability/logs/) page under **Observability** in the Cloudflare dashboard. The Logs page brings Log Explorer and Workers Observability datasets together with a shared filter builder, SQL editor, and visualizations.\n\nAs part of this change, the **Log Explorer** menu is no longer shown in the dashboard navigation.\n\n- Your enabled datasets, saved queries, and SQL queries continue to work on the Logs page.\n- To manage datasets, open the dataset selector on the Logs page and select **Configure** next to the Log Explorer datasets.\n- The previous Log Search page remains available at its direct URL.\n\nFor more information, refer to [Log Search](https://developers.cloudflare.com/log-explorer/log-search/) and the [Logs overview](https://developers.cloudflare.com/observability/logs/).","publishedAt":"2026-10-07T00:00:00.000Z","fetchedAt":"2026-10-07T17:25:49.073Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-07-log-search-in-observability-logs/","media":[],"coverageCount":0},{"id":"rel_CBP79kzENlker81B_UXtN","version":null,"type":"feature","title":"Notifications - Monitors (Beta)","summary":"Monitors (Beta) is a new Alerts space for creating alerts from your own SQL API queries, evaluating them on a schedule and notifying on threshold, anomaly detection, or SLO criteria. The builder includes a visual query builder, custom SQL, and a preview chart over up to 7 days, and pre-defined DDoS, SSL/TLS, and Health Checks notifications now live under Platform Notifications.","titleGenerated":"Cloudflare Core Platform launches Monitors (Beta) for SQL API alerts","titleShort":"Monitors (Beta) turns SQL API queries into alerts","breaking":"none","importance":3,"content":"The Alerts section now includes **Monitors** (Beta), a dedicated space for creating alerts based on your own [SQL API](https://developers.cloudflare.com/analytics/sql-api/) queries. Monitors are available under **Observability** > **Alerts** > **Monitors** in the Cloudflare dashboard.\n\n![Monitors empty state showing the Create Monitor button and a diagram of the query-to-monitor-to-destinations flow.](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=2326,height=1014,format=webp/_astro/monitors-empty-state.BDD8ZbSb.png)\n\nEach monitor evaluates a query against a supported SQL API dataset on a schedule and sends a notification when the result meets your detection criteria. Three detection methods are available:\n\n- **Threshold**: triggers when a query result crosses a fixed value.\n- **Anomaly detection**: triggers when a query result deviates from its historical baseline by more than a configured sensitivity.\n- **SLO**: triggers when the ratio of successful events to total events drops below a target percentage.\n\nThe monitor builder includes a visual query builder, custom SQL support, and a query preview that charts the signal over a configurable time range of up to 7 days.\n\n![Monitor query builder showing dataset selection, metric, filters, and a query preview chart with anomaly bounds.](https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=2542,height=1306,format=webp/_astro/monitors-query-builder.Bn253N-Y.png)\n\nPre-defined notifications for DDoS, SSL/TLS, Health Checks, and other Cloudflare products are now listed separately under **Platform Notifications**.\n\nFor configuration details, refer to [Monitors](https://developers.cloudflare.com/notifications/monitors/).","publishedAt":"2026-10-02T00:00:00.000Z","fetchedAt":"2026-10-21T17:47:30.244Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-02-monitors/","media":[{"type":"image","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=2326,height=1014,format=webp/_astro/monitors-empty-state.BDD8ZbSb.png","alt":"Monitors empty state showing the Create Monitor button and a diagram of the query-to-monitor-to-destinations flow.","r2Key":"releases/6de92785b20964da2a5060460b7d5e54eba6bf4aec8d81ea4380a712b4dfaab2.png","r2Url":"https://media.releases.sh/releases/6de92785b20964da2a5060460b7d5e54eba6bf4aec8d81ea4380a712b4dfaab2.png"},{"type":"image","url":"https://developers.cloudflare.com/cdn-cgi/image/onerror=redirect,width=2542,height=1306,format=webp/_astro/monitors-query-builder.Bn253N-Y.png","alt":"Monitor query builder showing dataset selection, metric, filters, and a query preview chart with anomaly bounds.","r2Key":"releases/604f0efe9d346c749330cedf64725720c978004af4759913632c1cf70106d21b.png","r2Url":"https://media.releases.sh/releases/604f0efe9d346c749330cedf64725720c978004af4759913632c1cf70106d21b.png"}],"coverageCount":0},{"id":"rel_405-A0Z97biTf7K7d0sjQ","version":null,"type":"feature","title":"Notifications - Webhooks on all plans and coding agent destinations","summary":"Webhook destinations are now available on every Cloudflare plan, including Free, where they previously required Pro or higher; accounts without a paid zone can configure up to 100 webhook destinations. Alerts can now also be delivered directly to supported coding agents alongside email, webhooks, and PagerDuty, configured under Observability > Alerts > Destinations.","titleGenerated":"Cloudflare webhooks now available on all plans, coding agents added as alert destination","titleShort":"Webhooks on every plan; coding agents as alert destinations","breaking":"none","importance":4,"content":"Webhook destinations are now available on every Cloudflare plan, including Free. Previously, webhooks required a Pro plan or higher. Accounts without a paid zone can configure up to 100 webhook destinations.\n\nCoding agents are also now supported as alert destinations. You can deliver alerts directly to supported coding agents alongside email, webhooks, and PagerDuty.\n\nTo configure destinations, go to **Observability** > **Alerts** > **Destinations** in the Cloudflare dashboard. For setup details, refer to [Configure webhooks](https://developers.cloudflare.com/notifications/get-started/configure-webhooks/).","publishedAt":"2026-10-02T00:00:00.000Z","fetchedAt":"2026-10-21T17:47:30.244Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-02-destination-enhancements/","media":[],"coverageCount":0},{"id":"rel_J_-dxLjFL63Q0LR2hbyEG","version":null,"type":"feature","title":"Analytics - SQL API (Beta)","summary":"The SQL API is now available in beta, providing a single HTTP endpoint for querying Cloudflare analytics and observability data with SELECT statements that support filtering, aggregation, LIKE, CASE, BETWEEN, IS NULL, and ordering. It spans event, state, log, and Workers Analytics Engine datasets, applies sample weights automatically for COUNT, SUM, and AVG on adaptively sampled data, and can be queried from a Worker via a binding without an API token.","titleGenerated":"Cloudflare launches SQL API beta for querying analytics and observability data","titleShort":"SQL API beta queries Cloudflare analytics over HTTP","breaking":"none","importance":4,"content":"The SQL API is now available in beta. It provides a single HTTP endpoint for querying Cloudflare analytics and observability data using SQL. Supported dataset types include event datasets (such as HTTP requests and security events), state datasets (such as D1 storage), log datasets (such as Workers logs), and Workers Analytics Engine datasets.\n\nThe SQL API supports `SELECT` queries with filtering, aggregation, `LIKE`, `CASE`, `BETWEEN`, `IS NULL`, and ordering. Adaptively sampled datasets apply sample weights automatically for `COUNT`, `SUM`, and `AVG`. You can also query from a Cloudflare Worker using the [Workers binding](https://developers.cloudflare.com/analytics/sql-api/workers-binding/) without managing an API token.\n\nThe SQL API powers [Monitors](https://developers.cloudflare.com/notifications/monitors/) and is available for direct querying on all plans.\n\nFor syntax, datasets, and limits, refer to [SQL API](https://developers.cloudflare.com/analytics/sql-api/).","publishedAt":"2026-10-02T00:00:00.000Z","fetchedAt":"2026-10-20T17:28:32.885Z","url":"https://developers.cloudflare.com/changelog/post/2026-10-02-sql-api-beta/","media":[],"coverageCount":0}],"pagination":{"nextCursor":"2026-10-02T00:00:00.000Z|2026-10-20T17:28:32.885Z|rel_J_-dxLjFL63Q0LR2hbyEG","limit":20},"summaries":{"rolling":null,"monthly":[]}}