Skip to content

Commit dfbd505

Browse files
authored
Merge branch 'cloudflare:production' into production
2 parents 5c8f3d1 + 1244afe commit dfbd505

File tree

89 files changed

+1460
-504
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+1460
-504
lines changed

.windsurf/rules/docs-style-guide.md renamed to .windsurf/rules/general-rules.md

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,38 @@
11
---
2-
trigger: glob
3-
globs: *.mdx
2+
trigger: always_on
43
---
54

5+
# General rules
6+
7+
## Partial files location
8+
9+
- The partial files used in the docs are located in src/content/partials/
10+
11+
## Partial files variables
12+
13+
- Some partial files have variables to account for the fact that the partials are reused in different places and even products.
14+
- Some partials also have JSX fragments. These pieces of code are conditionally rendered in the pages where the specific variable (magic word as it's called sometimes) is present. An example of these conditionally rendered pieces of code is:
15+
16+
{ props.magicWord === "hardware" && (
17+
  <>
18+
    <p>You need to purchase <a href="https://www.cloudflare.com/magic-wan">{props.productOriginalName}</a> before you can purchase and use the {props.productName}. The {props.productName} can function as your primary edge device for your network, or be deployed in-line with existing network gear.</p>
19+
  </>
20+
)
21+
}
22+
23+
This code would only be rendered if the page has a magicWord variable set to "hardware".
24+
25+
## General guidance
26+
27+
- Do not make any changes to content without showing me what you want to change and asking if I agree to the changes.
28+
- Do not use HTML for ordered lists.
29+
- When you use JSX fragments to conditionally render a block of code, always use the props variable to account for the fact that the partials are reused in different places and even products.
30+
- When you use JSX fragments to conditionally render a block of code, be aware that you will probably need to use the <Markdown /> component to properly render content that is not a single sentence.
31+
- Only use the <Markdown /> component in JSX conditionals, and only if needed.
32+
- Do not duplicate content when creating ternary or binary conditions.
33+
- When adding a variable to a link, use HTML instead of Markdown.
34+
- Whenever something is not clear, ask the user for more input.
35+
636
# General styling
737

838
- Follow all guidance in the [Cloudflare Style Guide](https://developers.cloudflare.com/style-guide/).
@@ -31,4 +61,4 @@ globs: *.mdx
3161
- Replace `sh` blocks using `npm commands` with our [`PackageManagers` component](https://developers.cloudflare.com/style-guide/components/package-managers/).
3262
- Replace in-text mentions of Cloudflare's number of data centers, network capacity, or network peers with our [`PublicStats` component](https://developers.cloudflare.com/style-guide/components/public-stats/).
3363
- Replace `toml` or `json` code blocks with [Wrangler configuration](https://developers.cloudflare.com/workers/wrangler/configuration/#sample-wrangler-configuration) information with our [`WranglerConfig` component](https://developers.cloudflare.com/style-guide/components/wrangler-config/).
34-
- Replace `ts` or `typescript` code blocks with our [`TypeScriptExample` component](https://developers.cloudflare.com/style-guide/components/typescript-example/). Ignore this rule if the original code block is within a tutorial or other step-by-step guide that is specific to TypeScript.
64+
- Replace `ts` or `typescript` code blocks with our [`TypeScriptExample` component](https://developers.cloudflare.com/style-guide/components/typescript-example/). Ignore this rule if the original code block is within a tutorial or other step-by-step guide that is specific to TypeScript.

public/__redirects

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@
549549
/dns/reference/troubleshooting/ /dns/reference/recommended-third-party-tools/ 301
550550
/dns/zone-setups/partial-setup/convert-partial-to-full/ /dns/zone-setups/conversions/convert-partial-to-full/ 301
551551
/dns/zone-setups/partial-setup/convert-partial-to-secondary/ /dns/zone-setups/conversions/convert-partial-to-secondary/ 301
552+
/dns/zone-setups/reference/nameserver-assignment/ /dns/nameservers/nameserver-options/#assignment-method 301
552553
/dns/zone-setups/troubleshooting/dns-probe-finished-nxdomain/ /dns/troubleshooting/dns-probe-finished-nxdomain/ 301
553554
/dns/zone-setups/troubleshooting/nameservers/ /dns/zone-setups/full-setup/troubleshooting/ 301
554555
/support/dns/ /dns/ 301

src/components/ResourcesBySelector.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import ReactSelect from "./ReactSelect";
55
import { formatDistance } from "date-fns";
66
import { setSearchParams } from "~/util/url";
77
import { formatContentType } from "~/util/content-type";
8+
import Markdown from "react-markdown";
89

910
type DocsData = keyof CollectionEntry<"docs">["data"];
1011
type VideosData = keyof CollectionEntry<"stream">["data"];
@@ -367,7 +368,12 @@ export default function ResourcesBySelector({
367368
</p>
368369
{showDescriptions && (
369370
<span className="line-clamp-3" title={page.data.description}>
370-
{page.data.description}
371+
<Markdown
372+
disallowedElements={["a"]}
373+
unwrapDisallowed={true}
374+
>
375+
{page.data.description}
376+
</Markdown>
371377
</span>
372378
)}
373379
{showLastUpdated && "reviewed" in page.data && (
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
title: cloudflared proxy-dns command will be removed starting February 2, 2026
3+
description: To address a vulnerability in an underlying library, the `cloudflared proxy-dns` command will be removed from new `cloudflared` releases. Users are advised to migrate to the Cloudflare WARP client or WARP Connector.
4+
products:
5+
- cloudflare-tunnel
6+
date: 2025-11-11
7+
---
8+
9+
Starting February 2, 2026, the `cloudflared proxy-dns` command will be removed from all new `cloudflared` [releases](/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/).
10+
11+
This change is being made to enhance security and address a potential vulnerability in an underlying DNS library. This vulnerability is specific to the `proxy-dns` command and does not affect any other `cloudflared` features, such as the core [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/) service.
12+
13+
The `proxy-dns` command, which runs a client-side [DNS-over-HTTPS (DoH)](/1.1.1.1/encryption/dns-over-https/) proxy, has been an officially undocumented feature for several years. This functionality is fully and securely supported by our actively developed products.
14+
15+
Versions of `cloudflared` released before this date will not be affected and will continue to operate. However, note that our [official support policy](/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/#deprecated-releases) for any `cloudflared` release is one year from its release date.
16+
17+
## Migration paths
18+
19+
We strongly advise users of this undocumented feature to migrate to one of the following officially supported solutions before February 2, 2026, to continue benefiting from secure [DNS-over-HTTPS](/1.1.1.1/encryption/dns-over-https/).
20+
21+
### End-user devices
22+
23+
The preferred method for enabling DNS-over-HTTPS on user devices is the [Cloudflare WARP client](/cloudflare-one/team-and-resources/devices/warp/). The WARP client automatically secures and proxies all DNS traffic from your device, integrating it with your organization's [Zero Trust policies](/cloudflare-one/traffic-policies/) and [posture checks](/cloudflare-one/reusable-components/posture-checks/).
24+
25+
### Servers, routers, and IoT devices
26+
27+
For scenarios where installing a client on every device is not possible (such as servers, routers, or IoT devices), we recommend using the [WARP Connector](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/).
28+
29+
Instead of running `cloudflared proxy-dns` on a machine, you can install the WARP Connector on a single Linux host within your private network. This connector will act as a gateway, securely routing all DNS and network traffic from your [entire subnet](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/site-to-internet/) to Cloudflare for [filtering and logging](/cloudflare-one/traffic-policies/).

src/content/changelog/rules/2025-02-12-rules-upgraded-limits.mdx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,26 @@ date: 2025-02-12
88

99
We have upgraded and streamlined [Cloudflare Rules](/rules/) limits across all plans, simplifying rule management and improving scalability for everyone.
1010

11-
**New limits by product:** - [Bulk Redirects](/rules/url-forwarding/bulk-redirects/) - Free: **20** → **10,000** URL redirects across lists - Pro: **500** → **25,000** URL redirects across lists - Business: **500** → **50,000** URL redirects across lists - Enterprise: **10,000** → **1,000,000** URL redirects across lists - [Cloud Connector](/rules/cloud-connector/) - Free: **5** → **10** connectors - Enterprise: **125** → **300** connectors - [Custom Errors](/rules/custom-errors/) - Pro: **5** → **25** error assets and rules - Business: **20** → **50** error assets and rules - Enterprise: **50** → **300** error assets and rules - [Snippets](/rules/snippets/) - Pro: **10** → **25** code snippets and rules - Business: **25** → **50** code snippets and rules - Enterprise: **50** → **300** code snippets and rules - [Cache Rules](/cache/how-to/cache-rules/), [Configuration Rules](/rules/configuration-rules/), [Compression Rules](/rules/compression-rules/), [Origin Rules](/rules/origin-rules/), [Single Redirects](/rules/url-forwarding/single-redirects/), and [Transform Rules](/rules/transform/) - Enterprise: **125** → **300** rules
11+
**New limits by product:**
12+
13+
- [Bulk Redirects](/rules/url-forwarding/bulk-redirects/)
14+
- Free: **20****10,000** URL redirects across lists
15+
- Pro: **500****25,000** URL redirects across lists
16+
- Business: **500****50,000** URL redirects across lists
17+
- Enterprise: **10,000****1,000,000** URL redirects across lists
18+
- [Cloud Connector](/rules/cloud-connector/)
19+
- Free: **5****10** connectors
20+
- Enterprise: **125****300** connectors
21+
- [Custom Errors](/rules/custom-errors/)
22+
- Pro: **5****25** error assets and rules
23+
- Business: **20****50** error assets and rules
24+
- Enterprise: **50****300** error assets and rules
25+
- [Snippets](/rules/snippets/)
26+
- Pro: **10****25** code snippets and rules
27+
- Business: **25****50** code snippets and rules
28+
- Enterprise: **50****300** code snippets and rules
29+
- [Cache Rules](/cache/how-to/cache-rules/), [Configuration Rules](/rules/configuration-rules/), [Compression Rules](/rules/compression-rules/), [Origin Rules](/rules/origin-rules/), [Single Redirects](/rules/url-forwarding/single-redirects/), and [Transform Rules](/rules/transform/)
30+
- Enterprise: **125****300** rules
1231

1332
:::note[Gradual rollout]
1433
Limits are updated gradually. Some customers may still see previous limits until the rollout is fully completed in the first half of 2025.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: More SQL aggregate, date and time functions available in Workers Analytics Engine
3+
description: Workers Analytics Engine now supports more SQL functions for aggregation and for working with dates and times
4+
date: 2025-11-12
5+
products:
6+
- workers-analytics-engine
7+
---
8+
You can now perform more powerful queries directly in [Workers Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/) with a major expansion of our SQL function library.
9+
10+
Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API.
11+
12+
Today, we've expanded Workers Analytics Engine's SQL capabilities with several new functions:
13+
14+
[**New aggregate functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/)
15+
- `countIf()` - count the number of rows which satisfy a provided condition
16+
- `sumIf()` - calculate a sum from rows which satisfy a provided condition
17+
- `avgIf()` - calculate an average from rows which satisfy a provided condition
18+
19+
[**New date and time functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/date-time-functions/)
20+
- `toYear()`
21+
- `toMonth()`
22+
- `toDayOfMonth()`
23+
- `toDayOfWeek()`
24+
- `toHour()`
25+
- `toMinute()`
26+
- `toSecond()`
27+
- `toStartOfYear()`
28+
- `toStartOfMonth()`
29+
- `toStartOfWeek()`
30+
- `toStartOfDay()`
31+
- `toStartOfHour()`
32+
- `toStartOfFifteenMinutes()`
33+
- `toStartOfTenMinutes()`
34+
- `toStartOfFiveMinutes()`
35+
- `toStartOfMinute()`
36+
- `today()`
37+
- `toYYYYMM()`
38+
39+
## Ready to get started?
40+
Whether you're building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. [Get started ](/analytics/analytics-engine/get-started/) with Workers Analytics Engine and explore all available functions in our [SQL reference documentation](/analytics/analytics-engine/sql-reference/).

src/content/docs/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ Once your AI crawler complies with Web Bot Auth, you can begin to crawl webpages
2222
When an AI crawler makes a request to a page protected by pay per crawl, the server will respond with `HTTP/2 402 Payment Required`. This response will also include the `crawler-price` header which specifies the cost to access the content. For example, a response may look like the following:
2323

2424
```txt
25-
HTTP/2 200
25+
HTTP/2 402
2626
date: Fri, 06 Jun 2025 08:42:38 GMT
27-
crawler-charged: USD 0.01
27+
crawler-price: USD 0.01
2828
```
2929

3030
To access this content, the AI crawler must provide headers for paid access.

src/content/docs/analytics/analytics-engine/sql-reference/aggregate-functions.mdx

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,3 +248,57 @@ SELECT topKWeighted(double1, _sample_interval) FROM my_dataset
248248
-- find the 15 most common values of <blob1>, weighted by `_sample_interval`
249249
SELECT topKWeighted(15)(blob1, _sample_interval) FROM my_dataset
250250
```
251+
252+
## countIf <Badge text="New" variant="tip" size="small" />
253+
254+
Usage:
255+
256+
```sql
257+
countIf(<expr>)
258+
```
259+
260+
`countIf` is an aggregation function that returns the number of rows in the results set,
261+
but only counting rows where a provided expression evaluates to true.
262+
263+
Example:
264+
265+
```sql
266+
-- return the number of rows where `double1` is greater than 5
267+
countIf(double1 > 5)
268+
```
269+
270+
## sumIf <Badge text="New" variant="tip" size="small" />
271+
272+
Usage:
273+
274+
```sql
275+
sumIf(<expr>, <expr>)
276+
```
277+
278+
`sumIf` is an aggregation function that returns the sum of a first expression across all rows in the results set,
279+
but only including rows where a second expression evaluates to true.
280+
281+
Example:
282+
283+
```sql
284+
-- return the sum of column `item_cost` of all items where another column `in_stock` is not zero
285+
sumIf(item_cost, in_stock > 0)
286+
```
287+
288+
## avgIf <Badge text="New" variant="tip" size="small" />
289+
290+
Usage:
291+
292+
```sql
293+
avgIf(<expr>, <expr>)
294+
```
295+
296+
`avgIf` is an aggregation function that returns the mean of an expression across all rows in the results set,
297+
but only including rows where a second expression evaluates to true.
298+
299+
Example:
300+
301+
```sql
302+
-- return the mean of column `item_cost` where another column `in_stock` is not zero
303+
avgIf(item_cost, in_stock > 0)
304+
```

0 commit comments

Comments
 (0)