
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 03 Apr 2026 17:05:17 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Introducing Programmable Flow Protection: custom DDoS mitigation logic for Magic Transit customers]]></title>
            <link>https://blog.cloudflare.com/programmable-flow-protection/</link>
            <pubDate>Tue, 31 Mar 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[ Magic Transit customers can now program their own DDoS mitigation logic and deploy it across Cloudflare’s global network. This enables precise, stateful mitigation for custom and proprietary UDP protocols. ]]></description>
            <content:encoded><![CDATA[ <p>We're proud to introduce <a href="https://developers.cloudflare.com/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection/"><u>Programmable Flow Protection</u></a>: a system designed to let <a href="https://www.cloudflare.com/network-services/products/magic-transit/"><u>Magic Transit</u></a> customers implement their own custom DDoS mitigation logic and deploy it across Cloudflare’s global network. This enables precise, stateful mitigation for custom and proprietary protocols built on UDP. It is engineered to provide the highest possible level of customization and flexibility to mitigate DDoS attacks of any scale. </p><p>Programmable Flow Protection is currently in beta and available to all Magic Transit Enterprise customers for an additional cost. Contact your account team to join the beta or sign up at <a href="https://www.cloudflare.com/en-gb/lp/programmable-flow-protection/"><u>this page</u></a>.</p>
    <div>
      <h3>Programmable Flow Protection is customizable</h3>
      <a href="#programmable-flow-protection-is-customizable">
        
      </a>
    </div>
    <p>Our existing <a href="https://www.cloudflare.com/ddos/"><u>DDoS mitigation systems</u></a> have been designed to understand and protect popular, well-known protocols from DDoS attacks. For example, our <a href="https://developers.cloudflare.com/ddos-protection/advanced-ddos-systems/overview/advanced-tcp-protection/"><u>Advanced TCP Protection</u></a> system uses specific known characteristics about the TCP protocol to issue challenges and establish a client’s legitimacy. Similarly, our <a href="https://blog.cloudflare.com/advanced-dns-protection/"><u>Advanced DNS Protection</u></a> builds a per-customer profile of DNS queries to mitigate DNS attacks. Our generic DDoS mitigation platform also understands common patterns across a variety of other well known protocols, including NTP, RDP, SIP, and many others.</p><p>However, custom or proprietary UDP protocols have always been a challenge for Cloudflare’s DDoS mitigation systems because our systems do not have the relevant protocol knowledge to make intelligent decisions to pass or drop traffic. </p><p>Programmable Flow Protection addresses this gap. Now, customers can write their own <a href="https://ebpf.io/"><u>eBPF</u></a> program that defines what “good” and “bad” packets are and how to deal with them. Cloudflare then runs the program across our entire global network. The program can choose to either drop or challenge “bad” packets, preventing them from reaching the customer’s origin. </p>
    <div>
      <h3>The problem of UDP-based attacks</h3>
      <a href="#the-problem-of-udp-based-attacks">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/learning/ddos/glossary/user-datagram-protocol-udp/"><u>UDP</u></a> is a connectionless transport layer protocol. Unlike TCP, UDP has no handshake or stateful connections. It does not promise that packets will arrive in order or exactly once. UDP instead prioritizes speed and simplicity, and is therefore well-suited for online gaming, VoIP, video streaming, and any other use case where the application requires real-time communication between clients and servers.</p><p>Our DDoS mitigation systems have always been able to detect and mitigate attacks against well-known protocols built on top of UDP. For example, the standard DNS protocol is built on UDP, and each DNS packet has a well-known structure. If we see a DNS packet, we know how to interpret it. That makes it easier for us to detect and drop DNS-based attacks. </p><p>Unfortunately, if we don’t understand the protocol inside a UDP packet’s payload, our DDoS mitigation systems have limited options available at mitigation time. If an attacker <a href="https://www.cloudflare.com/learning/ddos/udp-flood-ddos-attack/"><u>sends a large flood of UDP traffic</u></a> that does not match any known patterns or protocols, Cloudflare can either entirely block or apply a rate limit to the destination IP and port combination. This is a crude “last line of defense” that is only intended to keep the rest of the customer’s network online, and it can be painful in a couple ways. </p><p>First, a block or a generic <a href="https://www.cloudflare.com/learning/bots/what-is-rate-limiting/"><u>rate limit</u></a> does not distinguish good traffic from bad, which means these mitigations will likely cause legitimate clients to experience lag or connection loss — doing the attacker’s job for them! Second, a generic rate limit can be too strict or too lax depending on the customer. For example, a customer who expects to receive 1Gbps of legitimate traffic probably needs more aggressive rate limiting compared to a customer who expects to receive 25Gbps of legitimate traffic.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/L8PZ6eWn9nkpATaNcUinB/b6c12b4be815fbd4e71166b6f0c30329/BLOG-3182_2.png" />
          </figure><p><sup><i>An illustration of UDP packet contents. A user can define a valid payload and reject traffic that doesn’t match the defined pattern.</i></sup></p><p>The Programmable Flow Protection platform was built to address this problem by allowing our customers to dictate what “good” versus “bad” traffic actually looks like. Many of our customers use custom or proprietary UDP protocols that we do not understand — and now we don’t have to.</p>
    <div>
      <h3>How Programmable Flow Protection works</h3>
      <a href="#how-programmable-flow-protection-works">
        
      </a>
    </div>
    <p>In previous blog posts, we’ve described how “flowtrackd”, our <a href="https://blog.cloudflare.com/announcing-flowtrackd/"><u>stateful network layer DDoS mitigation system</u></a>, protects Magic Transit users from complex TCP and DNS attacks. We’ve also described how we use Linux technologies like <a href="https://blog.cloudflare.com/l4drop-xdp-ebpf-based-ddos-mitigations/"><u>XDP</u></a> and <a href="https://blog.cloudflare.com/cloudflare-architecture-and-how-bpf-eats-the-world/"><u>eBPF</u></a> to efficiently mitigate common types of large scale DDoS attacks. </p><p>Programmable Flow Protection combines these technologies in a novel way. With Programmable Flow Protection, a customer can write their own eBPF program that decides whether to pass, drop, or challenge individual packets based on arbitrary logic. A customer can upload the program to Cloudflare, and Cloudflare will execute it on every packet destined to their network. Programs are executed in userspace, not kernel space, which allows Cloudflare the flexibility to support a variety of customers and use cases on the platform without compromising security. Programmable Flow Protection programs run after all of Cloudflare’s existing DDoS mitigations, so users still benefit from our standard security protections. </p><p>There are many similarities between an XDP eBPF program loaded into the Linux kernel and an eBPF program running on the Programmable Flow Protection platform. Both types of programs are compiled down to BPF bytecode. They are both run through a “verifier” to ensure memory safety and verify program termination. They are also executed in a fast, lightweight VM to provide isolation and stability.</p><p>However, eBPF programs loaded into the Linux kernel make use of many Linux-specific “helper functions” to integrate with the network stack, maintain state between program executions, and emit packets to network devices. Programmable Flow Protection offers the same functionality whenever a customer chooses, but with a different API tailored specifically to implement DDoS mitigations. For example, we’ve built helper functions to store state about clients between program executions, perform cryptographic validation, and emit challenge packets to clients. With these helper functions, a developer can use the power of the Cloudflare platform to protect their own network.</p>
    <div>
      <h3>Combining customer knowledge with Cloudflare’s network</h3>
      <a href="#combining-customer-knowledge-with-cloudflares-network">
        
      </a>
    </div>
    <p>Let’s step through an example to illustrate how a customer’s protocol-specific knowledge can be combined with Cloudflare’s network to create powerful mitigations.</p><p>Say a customer hosts an online gaming server on UDP port 207. The game engine uses a proprietary application header that is specific to the game. Cloudflare has no knowledge of the structure or contents of the application header. The customer gets hit by DDoS attacks that overwhelm the game server and players report lag in gameplay. The attack traffic comes from highly randomized source IPs and ports, and the payload data appears to be random as well. </p><p>To mitigate the attack, the customer can use their knowledge of the application header and deploy a Programmable Flow Protection program to check a packet’s validity. In this example, the application header contains a token that is unique to the gaming protocol. The customer can therefore write a program to extract the last byte of the token. The program passes all packets with the correct value present and drops all other traffic:</p>
            <pre><code>#include &lt;linux/ip.h&gt;
#include &lt;linux/udp.h&gt;
#include &lt;arpa/inet.h&gt;

#include "cf_ebpf_defs.h"
#include "cf_ebpf_helper.h"

// Custom application header
struct apphdr {
    uint8_t  version;
    uint16_t length;   // Length of the variable-length token
    uint8_t  token[0]; // Variable-length token
} __attribute__((packed));

uint64_t
cf_ebpf_main(void *state)
{
    struct cf_ebpf_generic_ctx *ctx = state;
    struct cf_ebpf_parsed_headers headers;
    struct cf_ebpf_packet_data *p;

    // Parse the packet headers with provided helper function
    if (parse_packet_data(ctx, &amp;p, &amp;headers) != 0) {
        return CF_EBPF_DROP;
    }

    // Drop packets not destined to port 207
    struct udphdr *udp_hdr = (struct udphdr *)headers.udp;
    if (ntohs(udp_hdr-&gt;dest) != 207) {
        return CF_EBPF_DROP;
    }

    // Get application header from UDP payload
    struct apphdr *app = (struct apphdr *)(udp_hdr + 1);
    if ((uint8_t *)(app + 1) &gt; headers.data_end) {
        return CF_EBPF_DROP;
    }

    // Perform memory checks to satisfy the verifier
    // and access the token safely
    if ((uint8_t *)(app-&gt;token + token_len) &gt; headers.data_end) {
        return CF_EBPF_DROP;
    }

    // Check the last byte of the token against expected value
    uint8_t *last_byte = app-&gt;token + token_len - 1;
    if (*last_byte != 0xCF) {
        return CF_EBPF_DROP;
    }

    return CF_EBPF_PASS;
}</code></pre>
            <p><sup><i>An eBPF program to filter packets according to a value in the application header.</i></sup></p><p>This program leverages application-specific information to create a more targeted mitigation than Cloudflare is capable of crafting on its own. <b>Customers can now combine their proprietary knowledge with the capacity of Cloudflare’s global network to absorb and mitigate massive attacks better than ever before.</b></p>
    <div>
      <h3>Going beyond firewalls: stateful tracking and challenges</h3>
      <a href="#going-beyond-firewalls-stateful-tracking-and-challenges">
        
      </a>
    </div>
    <p>Many pattern checks, like the one performed in the example above, can be accomplished with traditional firewalls. However, programs provide useful primitives that are not available in firewalls, including variables, conditional execution, loops, and procedure calls. But what really sets Programmable Flow Protection apart from other solutions is its ability to statefully track flows and challenge clients to prove they are real. A common type of attack that showcases these abilities is a <i>replay attack</i>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Pgo9uUQDY1GTrxAOAOgiK/52c6d6a329cce05ff11ba3e4694313b2/BLOG-3182_3.png" />
          </figure><p>In a replay attack, an attacker repeatedly sends packets that were valid at <i>some</i> point, and therefore conform to expected patterns of the traffic, but are no longer valid in the application’s current context. For example, the attacker could record some of their valid gameplay traffic and use a script to duplicate and transmit the same traffic at a very high rate.</p><p>With Programmable Flow Protection, a user can deploy a program that challenges suspicious clients and drops scripted traffic. We can extend our original example as follows:</p>
            <pre><code>
#include &lt;linux/ip.h&gt;
#include &lt;linux/udp.h&gt;
#include &lt;arpa/inet.h&gt;

#include "cf_ebpf_defs.h"
#include "cf_ebpf_helper.h"

uint64_t
cf_ebpf_main(void *state)
{
    // ...
 
    // Get the status of this source IP (statefully tracked)
    uint8_t status;
    if (cf_ebpf_get_source_ip_status(&amp;status) != 0) {
        return CF_EBPF_DROP;
    }

    switch (status) {
        case NONE:
		// Issue a custom challenge to this source IP
             issue_challenge();
             cf_ebpf_set_source_ip_status(CHALLENGED);
             return CF_EBPF_DROP;


        case CHALLENGED:
		// Check if this packet passes the challenge
		// with custom logic
             if (verify_challenge()) {
                 cf_ebpf_set_source_ip_status(VERIFIED);
                 return CF_EBPF_PASS;
             } else {
                 cf_ebpf_set_source_ip_status(BLOCKED);
                 return CF_EBPF_DROP;
             }


        case VERIFIED:
		// This source IP has passed the challenge
		return CF_EBPF_PASS;

	 case BLOCKED:
		// This source IP has been blocked
		return CF_EBPF_DROP;

        default:
            return CF_EBPF_PASS;
    }


    return CF_EBPF_PASS;
}
</code></pre>
            <p><sup><i>An eBPF program to challenge UDP connections and statefully manage connections. This example has been simplified for illustration purposes.</i></sup></p><p>The program statefully tracks the source IP addresses it has seen and emits a packet with a cryptographic challenge back to unknown clients. A legitimate client running a valid gaming client is able to correctly solve the challenge and respond with proof, but the attacker’s script is not. Traffic from the attacker is marked as “blocked” and subsequent packets are dropped.</p><p>With these new abilities, customers can statefully track flows and make sure only real, verified clients can send traffic to their origin servers. Although we have focused the example on gaming, the potential use cases for this technology extend to any UDP-based protocol.</p>
    <div>
      <h3>Get started today</h3>
      <a href="#get-started-today">
        
      </a>
    </div>
    <p>We’re excited to offer the Programmable Flow Protection feature to Magic Transit Enterprise customers. Talk to your account manager to learn more about how you can enable Programmable Flow Protection to help keep your infrastructure safe.</p><p>We’re still in active development of the platform, and we’re excited to see what our users build next. If you are not yet a Cloudflare customer, let us know if you’d like to protect your network with Cloudflare and Programmable Flow Protection by signing up at this page: <a href="https://www.cloudflare.com/lp/programmable-flow-protection/"><u>https://www.cloudflare.com/lp/programmable-flow-protection/</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[UDP]]></category>
            <category><![CDATA[eBPF]]></category>
            <category><![CDATA[Magic Transit]]></category>
            <category><![CDATA[Network Services]]></category>
            <guid isPermaLink="false">64lPEfE3ML34AycHER46Tz</guid>
            <dc:creator>Anita Tenjarla</dc:creator>
            <dc:creator>Alex Forster</dc:creator>
            <dc:creator>Cody Doucette</dc:creator>
            <dc:creator>Venus Xeon-Blonde</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Cloudflare Secrets Store (Beta): secure your secrets, simplify your workflow]]></title>
            <link>https://blog.cloudflare.com/secrets-store-beta/</link>
            <pubDate>Wed, 09 Apr 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[ Securely store, manage and deploy account level secrets to Cloudflare Workers through Cloudflare Secrets Store, available in beta – with role-based access control, audit logging and Wrangler support. ]]></description>
            <content:encoded><![CDATA[ <p>Every cloud platform needs a secure way to store API tokens, keys, and credentials — welcome, Cloudflare Secrets Store! Today, we are very excited to announce and launch Secrets Store in beta. We built <a href="https://developers.cloudflare.com/secrets-store/"><u>Cloudflare Secrets Store</u></a> to help our customers centralize management, improve security, and restrict access to sensitive values on the Cloudflare platform. </p><p>Wherever secrets exist at Cloudflare – from our <a href="https://developers.cloudflare.com/learning-paths/workers/devplat/intro-to-devplat/"><u>developer platform</u></a>, to <a href="https://developers.cloudflare.com/products/?product-group=AI"><u>AI products</u></a>, to <a href="https://blog.cloudflare.com/cloudflare-one/"><u>Cloudflare One</u></a> –  we’ve built a centralized platform that allows you to manage them in one place. </p><p>We are excited to integrate Cloudflare Secrets Store with the whole portfolio of Cloudflare products, starting today with Cloudflare Workers. </p>
    <div>
      <h2>Securing your secrets across Workers</h2>
      <a href="#securing-your-secrets-across-workers">
        
      </a>
    </div>
    <p>If you have a secret you want to use across multiple Workers, you can now use the Cloudflare Secrets Store to do so. You can spin up your store from the dashboard or by using Wrangler CLI:</p>
            <pre><code>wrangler secrets-store store create &lt;name&gt;
</code></pre>
            <p>Then, create a secret:</p>
            <pre><code>wrangler secrets-store secret create &lt;store-id&gt;
</code></pre>
            <p>Once the secret is created, you can specify the binding to deploy in a Worker immediately. </p>
            <pre><code>secrets_store_secrets = [
{ binding = "'open_AI_KEY'", store_id= "abc123", secret_name = "open_AI_key"},
]
</code></pre>
            <p>Last step – you can now reference the secret in code!</p>
            <pre><code>const openAIkey = await env.open_AI_key.get();
</code></pre>
            <p><a href="https://blog.cloudflare.com/workers-secrets-environment/"><u>Environment variables and secrets</u></a> were first launched in Cloudflare Workers back in 2020. Now, there are millions of local secrets deployed on Workers scripts. However, these are not all <i>unique</i>. Many of these secrets have duplicate values within a customer’s account. For example, a customer may reuse the same API token in ten different scripts, but since each secret is accessible only on the per-Worker level, that value would be stored in ten different local secrets. Plus, if you need to roll that secret, there is no seamless way to do so that preserves a single source of truth.</p><p>With thousands of secrets duplicated across scripts — each requiring manual creation and updates  — scoping secrets to individual Workers has created significant friction for developers. Additionally, because Workers secrets are created and deployed locally, any secret is accessible – in terms of creation, editing, and deletion – to anyone who has access to that script. </p><p>Now, you can create account-level secrets and variables that can be shared across all Workers scripts, centrally managed and protected within the Secrets Store. </p>
    <div>
      <h2>Building a secure secrets manager</h2>
      <a href="#building-a-secure-secrets-manager">
        
      </a>
    </div>
    <p>The most important feature of a Secret Store, of course, is to make sure that your secrets are stored securely. </p><p>Once the secret is created, its value will not be readable by anyone, be it developers, admins, or Cloudflare employees. Only the permitted service will be able to use the value at runtime. </p><p>This is why the first thing that happens when you deploy a new secret to Cloudflare is encrypting the secret prior to storing it in our database. We make sure your tokens are safe and protected using a two-level key hierarchy, where the root key never leaves a secure system. This is done by making use of DEKs (Data Encryption Keys) to encrypt your secrets and a separate KEK (Key Encryption Key) to encrypt the DEKs themselves. The data encryption keys are refreshed frequently, making the possibility and impact scope of a single DEK exposure very small. In the future, we will introduce periodic key rotations for our KEK and also provide a way for customers to have their own account-specific DEKs.</p><p>After the secrets are encrypted, there are two permissions checks when deploying a secret from the Secrets Store to a Worker. First, the user must have sufficient permissions to create the binding. Second, when the Worker makes a <code>fetch</code> call to retrieve the secret value, we verify that the Worker has an appropriate binding to access that secret. </p><p>The secrets are automatically propagated across our network using <a href="https://blog.cloudflare.com/introducing-quicksilver-configuration-distribution-at-internet-scale/"><u>Quicksilver</u></a> – so that every secret is on every server– to ensure they’re immediately accessible and ready for the Worker to use. Wherever your Worker is deployed, your secrets will be, too. </p><p>If you’d like to use a secret to secure your AI model keys before passing on to AI Gateway: </p>
            <pre><code>export default {
 async fetch(request, env, ctx) {
   const prompt = "Write me a pun about Cloudflare";
   const openAIkey = await env.open_AI_key.get();

   const response = await fetch("https://gateway.ai.cloudflare.com/v1/YOUR_ACCOUNT_TAG/openai/chat/completions", {
     method: "POST",
     headers: {
       "Content-Type": "application/json",
       "Authorization": `Bearer ${openAIkey}`,
     },
     body: JSON.stringify({
       model: "gpt-3.5-turbo",
       messages: [
         { role: "user", content: prompt }
       ],
       temperature: 0.8,
       max_tokens: 100,
     }),
   });

   const data = await response.json();
   const answer = data.choices?.[0]?.message?.content || "No pun found 😢";

   return new Response(answer, {
     headers: { "Content-Type": "text/plain" },
   });
 }
};
</code></pre>
            
    <div>
      <h2>Cloudflare Secrets Store, with built-in RBAC</h2>
      <a href="#cloudflare-secrets-store-with-built-in-rbac">
        
      </a>
    </div>
    <p>Now, a secret’s value can be updated once and applied everywhere — but not by everyone. Cloudflare Secrets Store uses <a href="https://www.cloudflare.com/learning/access-management/role-based-access-control-rbac/"><u>role-based access control (RBAC)</u></a> to ensure that only those with permission can view, create, edit, or delete secrets. Additionally, any changes to the Secrets Store are recorded in the <a href="https://developers.cloudflare.com/logs/reference/log-fields/account/audit_logs/"><u>audit logs</u></a>, allowing you to track changes. </p><p>Whereas per-Worker secrets are tied to the Workers account role, meaning that anyone who can modify the Worker can modify the secret, access to account-level secrets is restricted with more granular controls. This allows for differentiation between security admins who manage secrets and developers who use them in the code.</p><div>
    <figure>
        <table>
            <colgroup>
                <col></col>
                <col></col>
                <col></col>
                <col></col>
            </colgroup>
            <tbody>
                <tr>
                    <td> </td>
                    <td>
                        <p><span><span>Secrets Store Admin</span></span></p>
                    </td>
                    <td>
                        <p><span><span>Secrets Store Reporter</span></span></p>
                    </td>
                    <td>
                        <p><span><span>Secrets Store Deployer</span></span></p>
                    </td>
                </tr>
                <tr>
                    <td>
                        <p><span><span>Create secrets</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                    <td> </td>
                    <td> </td>
                </tr>
                <tr>
                    <td>
                        <p><span><span>Update secrets</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                    <td> </td>
                    <td> </td>
                </tr>
                <tr>
                    <td>
                        <p><span><span>Delete secrets</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                    <td> </td>
                    <td> </td>
                </tr>
                <tr>
                    <td>
                        <p><span><span>View secrets metadata</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                </tr>
                <tr>
                    <td>
                        <p><span><span>Deploy secrets (i.e. bind to a Worker)</span></span></p>
                    </td>
                    <td>
                        <p> </p>
                    </td>
                    <td> </td>
                    <td>
                        <p><span><span>✓</span></span></p>
                    </td>
                </tr>
            </tbody>
        </table>
    </figure>
</div><p>Each secret can also be scoped to a particular Cloudflare product to ensure the value is only used where it is meant to be. Today, the secrets are restricted to Workers by default, but once the Secrets Store supports multiple products, you’ll be able to specify where the secret can be used (e.g. “I only want this secret to be accessible through Firewall Rules”). </p>
    <div>
      <h2>What’s next for Secrets Store</h2>
      <a href="#whats-next-for-secrets-store">
        
      </a>
    </div>
    <p>Secrets Store will support all secrets across Cloudflare, including:</p><ul><li><p>Cloudflare Access has <a href="https://developers.cloudflare.com/cloudflare-one/identity/service-tokens/"><u>service tokens</u></a> to authenticate against your Zero Trust policies.</p></li><li><p><a href="https://developers.cloudflare.com/rules/transform/"><u>Transform Rules</u></a> require sensitive values in the request headers to grant access or pass onto to something else.</p></li><li><p><a href="https://developers.cloudflare.com/ai-gateway/"><u>AI Gateway</u></a> relies upon secret keys from each provider to position Cloudflare between the end user and the AI model. </p></li></ul><p>…and more! </p><p>Right now, to use a secret within a Worker, you have to create a binding for that specific secret. In the future, we’ll allow you to create a binding to the store itself so that the Worker can access any secret within that store. We’ll also allow customers to create multiple secret stores within their account so that they can manage secrets by group when creating access policies. </p><p>Every Cloudflare account can create up to twenty secrets for free. We’re currently finalizing our pricing and will publish more details for each tier soon.</p><p>We’re thrilled to get Secrets Store into our customers’ hands and are excited to continue building it out to support more products and features as we work towards making Secrets Store GA.</p>
    <div>
      <h2>Try it out today! </h2>
      <a href="#try-it-out-today">
        
      </a>
    </div>
    <p>Cloudflare Secrets Store with the Workers integration is <a href="http://dash.cloudflare.com/?to=/:account/secrets-store"><u>available for all customers via UI</u></a> and API today. For instructions to get started in the Cloudflare dashboard, take a look at our <a href="https://developers.cloudflare.com/secrets-store/"><u>developer documentation</u></a>. </p><p>If you have any feedback or feature requests, we’d love for you to share those with us on this <a href="https://docs.google.com/forms/d/e/1FAIpQLSejhdh-0x2C0OHdVz9xabGYww3PWtOOZ1MwNLARZIt3s5ioYg/viewform?usp=header"><u>Google form</u></a>. </p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Secrets Store]]></category>
            <guid isPermaLink="false">3ctRz9zcwJFS3GuxmXchlS</guid>
            <dc:creator>Mia Malden</dc:creator>
            <dc:creator>Mitali Rawat</dc:creator>
            <dc:creator>James Vaughan</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Cloudy, Cloudflare’s AI agent for simplifying complex configurations]]></title>
            <link>https://blog.cloudflare.com/introducing-ai-agent/</link>
            <pubDate>Thu, 20 Mar 2025 13:10:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare’s first AI agent, Cloudy, helps make complicated configurations easy to understand for Cloudflare administrators. ]]></description>
            <content:encoded><![CDATA[ <p>It’s a big day here at Cloudflare! Not only is it Security Week, but today marks Cloudflare’s first step into a completely new area of functionality, intended to improve how our users both interact with, and get value from, all of our products.</p><p>We’re excited to share a first glance of how we’re embedding <a href="https://www.cloudflare.com/learning/ai/what-is-artificial-intelligence/">AI</a> features into the management of Cloudflare products you know and love. Our first mission? Focus on security and streamline the rule and policy management experience. The goal is to automate away the time-consuming task of manually reviewing and contextualizing Custom Rules in <a href="https://www.cloudflare.com/application-services/products/waf/">Cloudflare WAF</a>, and Gateway policies in Cloudflare One, so you can instantly understand what each policy does, what gaps they have, and what you need to do to fix them.</p>
    <div>
      <h3>Meet Cloudy, Cloudflare’s first AI agent</h3>
      <a href="#meet-cloudy-cloudflares-first-ai-agent">
        
      </a>
    </div>
    <p>Our initial step toward a fully AI-enabled product experience is the introduction of <i>Cloudy</i>, the first version of Cloudflare AI agents, assistant-like functionality designed to help users quickly understand and improve their Cloudflare configurations in multiple areas of the product suite. You’ll start to see Cloudy functionality seamlessly embedded into two Cloudflare products across the dashboard, which we’ll talk about below.</p><p>And while the name <i>Cloudy</i> may be fun and light-hearted, our goals are more serious: Bring Cloudy and AI-powered functionality to every corner of Cloudflare, and optimize how our users operate and manage their favorite Cloudflare products. Let’s start with two places where Cloudy is now live and available to all customers using the WAF and Gateway products.</p>
    <div>
      <h3>WAF Custom Rules</h3>
      <a href="#waf-custom-rules">
        
      </a>
    </div>
    <p>Let’s begin with AI-powered overviews of <a href="https://developers.cloudflare.com/waf/custom-rules/"><u>WAF Custom Rules</u></a>. For those unfamiliar, Cloudflare’s Web Application Firewall (WAF) helps protect web applications from attacks like <a href="https://www.cloudflare.com/learning/security/threats/sql-injection/">SQL injection</a>, <a href="https://www.cloudflare.com/learning/security/threats/cross-site-scripting/">cross-site scripting (XSS)</a>, and other vulnerabilities. </p><p>One specific feature of the WAF is the ability to create WAF Custom Rules. These allow users to tailor security policies to block, challenge, or allow traffic based on specific attributes or security criteria.</p><p>However, for customers with dozens or even hundreds of rules deployed across their organization, it can be challenging to maintain a clear understanding of their security posture. Rule configurations evolve over time, often managed by different team members, leading to potential inefficiencies and security gaps. What better problem for Cloudy to solve?</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4zcFRfhRWGQWhoza9TolDu/25e1357540db32e59150609e6eddd1e0/BLOG-2692_2.png" />
          </figure><p>Powered by <a href="https://developers.cloudflare.com/workers-ai/"><u>Workers AI</u></a>, today we’ll share how Cloudy will help review your WAF Custom Rules and provide a summary of what's configured across them. Cloudy will also help you identify and solve issues such as:</p><ul><li><p><b>Identifying redundant rules</b>: Identify when multiple rules are performing the same function, or using similar fields, helping you streamline your configuration.</p></li><li><p><b>Optimising execution order</b>: Spot cases where rules ordering affects functionality, such as when a terminating rule (block/challenge action) prevents subsequent rules from executing.</p></li><li><p><b>Analysing conflicting rules</b>: Detect when rules counteract each other, such as one rule blocking traffic that another rule is designed to allow or log.</p></li><li><p><b>Identifying disabled rules</b>: Highlight potentially important security rules that are in a disabled state, helping ensure that critical protections are not accidentally left inactive.</p></li></ul><p>Cloudy won't just summarize your rules, either. It will analyze the relationships and interactions between rules to provide actionable recommendations. For security teams managing complex sets of Custom Rules, this means less time spent auditing configurations and more confidence in your security coverage.</p><p>Available to all users, we’re excited to show how Cloudflare AI Agents can enhance the usability of our products, starting with WAF Custom Rules. But this is just the beginning.</p>
    <div>
      <h3>Cloudflare One Firewall policies</h3>
      <a href="#cloudflare-one-firewall-policies">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4CXHQVlO3GGqwp6DGyOklJ/3068c434c4a303cf22c328c302947fcb/BLOG-2692_3.png" />
          </figure><p>We've also added Cloudy to <a href="https://www.cloudflare.com/static/e9ea5dfaa69c554cc1cbaa7f3e441acf/Cloudflare_One_at_a_glance.pdf"><u>Cloudflare One</u></a>, our SASE platform, where enterprises manage the security of their employees and tools from a single dashboard.</p><p>In <a href="https://www.cloudflare.com/zero-trust/products/gateway/"><u>Cloudflare Gateway</u></a>, our Secure Web Gateway offering, customers can configure policies to manage how employees do their jobs on the Internet. These Gateway policies can block access to malicious sites, prevent data loss violations, and control user access, among other things.</p><p>But similar to WAF Custom Rules, Gateway policy configurations can become overcomplicated and bogged down over time, with old, forgotten policies that do who-knows-what. Multiple selectors and operators working in counterintuitive ways. Some blocking traffic, others allowing it. Policies that include several user groups, but carve out specific employees. We’ve even seen policies that block hundreds of URLs in a single step. All to say, managing years of Gateway policies can become overwhelming.</p><p>So, why not have Cloudy summarize Gateway policies in a way that makes their purpose clear and concise?</p><p>Available to all Cloudflare Gateway users (create a free Cloudflare One account <a href="https://www.cloudflare.com/zero-trust/products/"><u>here</u></a>), Cloudy will now provide a quick summary of any Gateway policy you view. It’s now easier than ever to get a clear understanding of each policy at a glance, allowing admins to spot misconfigurations, redundant controls, or other areas for improvement, and move on with confidence.</p>
    <div>
      <h3>Built on Workers AI</h3>
      <a href="#built-on-workers-ai">
        
      </a>
    </div>
    <p>At the heart of our new functionality is <a href="https://www.cloudflare.com/developer-platform/products/workers-ai/"><u>Cloudflare Workers AI</u></a> (yes, the same version that everyone uses!) that leverages advanced <a href="https://www.cloudflare.com/learning/ai/what-is-large-language-model/">large language models (LLMs) </a>to process vast amounts of information; in this case, policy and rules data. Traditionally, manually reviewing and contextualizing complex configurations is a daunting task for any security team. With Workers AI, we automate that process, turning raw configuration data into consistent, clear summaries and actionable recommendations.</p>
    <div>
      <h4><b>How it works</b></h4>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>Cloudflare Workers AI ingests policy and rule configurations from your Cloudflare setup and combines them with a purpose-built LLM prompt. We leverage the same <a href="https://developers.cloudflare.com/workers-ai/models/"><u>publicly-available LLM models</u></a> that we offer our customers, and then further enrich the prompt with some additional data to provide it with context. For this specific task of analyzing and summarizing policy and rule data, we provided the LLM:</p><ul><li><p><b>Policy &amp; rule data</b>: This is the primary data itself, including the current configuration of policies/rules for Cloudy to summarize and provide suggestions against.</p></li><li><p><b>Documentation on product abilities:</b> We provide the model with additional technical details on the policy/rule configurations that are possible with each product, so that the model knows what kind of recommendations are within its bounds.</p></li><li><p><b>Enriched datasets</b>: Where WAF Custom Rules or CF1 Gateway policies leverage other ‘lists’ (e.g., a WAF rule referencing multiple countries, a Gateway policy leveraging a specific content category), the list item(s) selected must be first translated from an ID to plain-text wording so that the LLM can interpret which policy/rule values are actually being used.</p></li><li><p><b>Output instructions</b>: We specify to the model which format we’d like to receive the output in. In this case, we use JSON for easiest handling.</p></li><li><p><b>Additional clarifications</b>: Lastly, we explicitly instruct the LLM to be sure about its output, valuing that aspect above all else. Doing this helps us ensure that no hallucinations make it to the final output.</p></li></ul><p>By automating the analysis of your WAF Custom Rules and Gateway policies, Cloudflare Workers AI not only saves you time but also enhances security by reducing the risk of human error. You get clear, actionable insights that allow you to streamline your configurations, quickly spot anomalies, and maintain a strong security posture—all without the need for labor-intensive manual reviews.</p>
    <div>
      <h4>What’s next for Cloudy</h4>
      <a href="#whats-next-for-cloudy">
        
      </a>
    </div>
    <p>Beta previews of Cloudy are live for all Cloudflare customers today. But this is just the beginning of what we envision for AI-powered functionality across our entire product suite.</p><p>Throughout the rest of 2025, we plan to roll out additional <a href="https://www.cloudflare.com/learning/ai/what-is-agentic-ai/">AI agent capabilities</a> across other areas of Cloudflare. These new features won’t just help customers manage security more efficiently, but they’ll also provide intelligent recommendations for optimizing performance, streamlining operations, and enhancing overall user experience.</p><p>We’re excited to hear your thoughts as you get to meet Cloudy and try out these new AI features – send feedback to us at <a><u>cloudyfeedback@cloudflare.com</u></a>, or post your thoughts on X, LinkedIn, or Mastodon tagged with #SecurityWeek! Your feedback will help shape our roadmap for AI enhancement, and bring our users smarter, more efficient tooling that helps everyone get more secure.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5gGseiyO6pbddpdSVQ5wfJ/ae1d0d5a2f8ec01f571de7a85b655370/BLOG-2692_4.png" />
          </figure>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div>
  
</div><p></p> ]]></content:encoded>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[LLM]]></category>
            <category><![CDATA[WAF]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[SASE]]></category>
            <category><![CDATA[Secure Web Gateway]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Network Services]]></category>
            <guid isPermaLink="false">7ywSxti5U7fxjKbqmVXpGW</guid>
            <dc:creator>Alex Dunbrack</dc:creator>
            <dc:creator>Harsh Saxena</dc:creator>
        </item>
        <item>
            <title><![CDATA[Automatic Audit Logs: new updates deliver increased transparency and accountability]]></title>
            <link>https://blog.cloudflare.com/introducing-automatic-audit-logs/</link>
            <pubDate>Thu, 13 Feb 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[ We’re excited to announce the beta release of Automatic Audit Logs, offering greater transparency and control. ]]></description>
            <content:encoded><![CDATA[ <p></p>
    <div>
      <h2>What are audit logs and why do they matter?</h2>
      <a href="#what-are-audit-logs-and-why-do-they-matter">
        
      </a>
    </div>
    <p>Audit logs are a critical tool for tracking and recording changes, actions, and resource access patterns within your Cloudflare environment. They provide visibility into who performed an action, what the action was, when it occurred, where it happened, and how it was executed. This enables security teams to identify vulnerabilities, ensure regulatory compliance, and assist in troubleshooting operational issues. Audit logs provide critical transparency and accountability. That's why we're making them "automatic" — eliminating the need for individual Cloudflare product teams to manually send events. Instead, audit logs are generated automatically in a standardized format when an action is performed, providing complete visibility and ensuring comprehensive coverage across all our products.</p>
    <div>
      <h2>What's new?</h2>
      <a href="#whats-new">
        
      </a>
    </div>
    <p>We're excited to announce the beta release of Automatic Audit Logs — a system that unifies audit logging across Cloudflare products. This new system is designed to give you a complete and consistent view of your environment’s activity. Here’s how we’ve enhanced our audit logging capabilities:</p><ul><li><p><b>Standardized logging: </b>Previously, audit logs generation was dependent on separate internal teams, which could lead to gaps and inconsistencies. Now, audit logs are automatically produced in a seamless and standardized way, eliminating reliance on individual teams and ensuring consistency across all Cloudflare services.</p></li><li><p><b>Expanded Product Coverage: </b>Automatic Audit Logs now extend our coverage from 62 to 111 products, boosting overall coverage from 75% to 95%. We now capture actions from key endpoints such as the <code>/accounts</code>, <code>/zones</code>, and <code>/organizations</code> APIs.</p></li><li><p><b>Granular Filtering: </b>With uniformly formatted logs, you can quickly pinpoint specific actions, users, methods, and resources, making investigations faster and more efficient.</p></li><li><p><b>Enhanced Context and Transparency: </b>Each log entry includes detailed context like the authentication method used, whether the action was performed via the API or Dashboard, and mappings to Cloudflare Ray IDs for better traceability.</p></li><li><p><b>Comprehensive Activity Capture: </b>In addition to create, edit, and delete actions, the system now records GET requests and failed attempts, ensuring that no critical activity goes unnoticed.</p></li></ul><p>This new system reflects Cloudflare's commitment to building a safer, more transparent Internet. It also supports Cloudflare's pledge to <a href="https://blog.cloudflare.com/secure-by-design-principles/"><u>CISA’s Cybersecurity Commitment</u></a>, reinforcing our dedication to increase our customers’ ability to gather evidence of cybersecurity intrusions.</p><p>Automatic Audit Logs (beta release) is available exclusively through the <a href="https://developers.cloudflare.com/api/resources/audit_logs/methods/list/"><u>API</u></a>. </p>
    <div>
      <h2>The journey of an audit log: how Cloudflare creates reliable, secure records</h2>
      <a href="#the-journey-of-an-audit-log-how-cloudflare-creates-reliable-secure-records">
        
      </a>
    </div>
    <p>At Cloudflare, we’ve always made audit logs available through the <a href="https://developers.cloudflare.com/api/resources/audit_logs/methods/list/"><u>Audit Log API</u></a>, but the experience has not been very consistent.</p><p>Why? Individual product teams were responsible for creating and maintaining their audit logs. This resulted in inconsistencies, gaps in coverage, and a fragmented user experience</p><p>Recognizing the importance of reliable audit logs, we set out to improve coverage across all Cloudflare products. Our goal was to standardize, secure, and automate the process, giving users comprehensive insights into user-initiated actions while enhancing visibility and usability. Let’s take a closer look at how an audit log is created at Cloudflare.</p>
    <div>
      <h3><b>Which APIs are audit logged?</b> </h3>
      <a href="#which-apis-are-audit-logged">
        
      </a>
    </div>
    <p>Audit logs are generated for all user requests made via the public API or the Cloudflare dashboard. While a few exceptions exist, such as GraphQL requests and static assets, the majority of user actions are captured.</p><p>When a user action occurs, the request is forwarded to our audit logging pipeline. This ensures logs are generated automatically for all products, close to the source of the action, and capturing the most relevant details.</p><p>For <a href="https://en.wikipedia.org/wiki/REST"><u>RESTful</u></a> APIs that produce JSON, sanitized request bodies are logged to prevent any sensitive information from being included in the audit logs. For GET requests, which are typically read-only and may generate large responses, only the action performed and the resource accessed are logged, avoiding unnecessary overhead while still maintaining essential visibility.</p>
    <div>
      <h3>Streaming HTTP requests</h3>
      <a href="#streaming-http-requests">
        
      </a>
    </div>
    <p>Any user-initiated action on Cloudflare, whether through the API or the Dashboard, is handled by the API Gateway. The HTTP request, along with its corresponding request and response data, is then forwarded to a <a href="https://www.cloudflare.com/en-gb/developer-platform/products/workers/"><u>Worker</u></a> called the Audit Log Redactor. This allows audit logging to happen automatically without relying on internal teams to send events.</p><p>To minimise the latency, the API Gateway streams these requests to the redactor Worker via <a href="https://developers.cloudflare.com/workers/runtime-apis/rpc/"><u>RPC (Remote Procedure Calls</u></a>) using service bindings. This approach ensures the requests are successfully sent without going through a publicly-accessible URL.</p>
    <div>
      <h3>Redacting sensitive information</h3>
      <a href="#redacting-sensitive-information">
        
      </a>
    </div>
    <p>Once the Worker receives the HTTP request, it references the <a href="https://blog.cloudflare.com/open-api-transition/"><u>Cloudflare OpenAPI Schema</u></a> to handle sensitive information. OpenAPI is a widely adopted, machine-readable, and human-friendly specification format that is used to define HTTP APIs. It relies on <a href="https://blog.postman.com/what-is-json-schema/"><u>JSON Schema</u></a> to describe the API’s underlying data.  </p><p>Using the <a href="https://github.com/cloudflare/api-schemas/"><u>OpenAPI Schema</u></a>, the redactor Worker identifies the corresponding API schema for the HTTP request. It then redacts any sensitive information, leaving only those explicitly marked as <b>auditable</b> in the schema. This redaction process ensures that no sensitive data progresses further down the pipeline while retaining enough information to debug and analyze how an action impacted a resource’s value.</p><p>Each Cloudflare product team defines its APIs within the OpenAPI schema and marks specific fields as auditable. This provides visibility into resource changes while safeguarding sensitive data.</p><p>Once redacted, the data moves through Cloudflare’s data pipeline. This <a href="https://blog.cloudflare.com/cloudflare-incident-on-november-14-2024-resulting-in-lost-logs/#system-architecture"><u>pipeline</u></a> includes several key components including Logfwdr, Logreceiver and Buftee buffers, where the sanitized data is eventually pushed, awaiting further processing.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6aWb850BBQPt7iRNZk0rs9/2d18bd6e22f6f28e352666015ae15c1e/image1.png" />
          </figure>
    <div>
      <h3>Ingesting and building the audit log</h3>
      <a href="#ingesting-and-building-the-audit-log">
        
      </a>
    </div>
    <p>The Ingestor service consumes messages from Buftee buffers and transforms individual requests into audit log records. Using a fixed schema, the Ingestor ensures that audit logs remain standardized across all Cloudflare products, regardless of scale.</p><p>Because API Gateway — the system from which the majority of Automatic Audit Logs are recorded, as noted above — handles tens of thousands of requests per second, the Ingestor was designed to process multiple requests concurrently. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ZdjrAiIP6Eu9DgsfDiRX5/6b19819a78911440b173e685ae9b6224/image2.png" />
          </figure><p><sup><i>Plot of audit requests rate. x-axis indicates the time and y-axis indicates the total number of audit requests handled per second.</i></sup></p>
    <div>
      <h3>Enriching and storing the logs</h3>
      <a href="#enriching-and-storing-the-logs">
        
      </a>
    </div>
    <p>From a security perspective, it is critical to capture who initiated a change and how they were authenticated. To achieve this, the audit log is enriched with user details and authentication information extracted from custom response headers.</p><p>Additional contextual details, such as the account name, are retrieved by making calls to internal services. To enhance performance, a read-through caching mechanism is used. The system checks the cache for responses first and if unavailable, it fetches the data from internal services and caches it for future use.</p><p>Once the audit logs are fully transformed and enriched, they are stored in a database in batches to prevent overwhelming the system. For the beta release, we are storing 30 days of audit logs in the database. This will be extended to 18 months for our GA (General Availability) release in the second half of 2025.</p>
    <div>
      <h3>Sample audit log</h3>
      <a href="#sample-audit-log">
        
      </a>
    </div>
    <p>Here is a complete sample audit log generated when an alert notification policy is updated. It provides all the essential details to answer the who, what, when, where, and how of the action.</p><p>Audit logs are always associated with an account, and some actions also include user and zone information when relevant. The action section outlines what changed and when, while the actor section provides context on who made the change and how it was performed, including whether it was done via the API or through the UI.</p><p>Information about the resource is also included, so you can easily identify what was altered (in this case, the <a href="https://developers.cloudflare.com/waf/reference/alerts/"><u>Advanced Security Events Alert</u></a> was updated). Additionally, raw API request details are provided, allowing users to trace the audit log back to a specific API call.</p>
            <pre><code>curl -X PUT https://api.cloudflare.com/client/v4/accounts/&lt;account_id&gt;/alerting/v3/policies/&lt;policy_id&gt; --data-raw '{...'}</code></pre>
            
            <pre><code>       {
            "account": {
                "id": "&lt;account_id&gt;",
                "name": "Example account"
            },
            "action": {
                "description": "Update a Notification policy",
                "result": "success",
                "time": "2025-01-23T18:25:14.749Z",
                "type": "update"
            },
            "actor": {
                "context": "dash",
                "email": "test@example.com",
                "id": "&lt;actor-id&gt;",
                "ip_address": "127.0.0.1",
                "token": {},
                "type": "user"
            },
            "id": "&lt;audit_log_id&gt;",
            "raw": {
                "cf_ray_id": "&lt;ray_id&gt;",
                "method": "PUT",
                "status_code": 200,
                "uri": "/accounts/&lt;account_id&gt;/alerting/v3/policies/&lt;policy_id&gt;",
                "user_agent": "Postman"
            },
            "resource": {
                "id": "&lt;resource-id&gt;",
                "product": "alerting",
                "request": {
                    "alert_type": "clickhouse_alert_fw_ent_anomaly",
                    "enabled": false,
                    "filters": {
                        "services": [
                            "securitylevel",
                            "ratelimit",
                            "firewallrules"
                        ],
                        "zones": [
                            "&lt;zone_id&gt;"
                        ]
                    },
                    "name": "Advanced Security Events Alert"
                },
                "response": {
                    "id": "&lt;resource_id&gt;"
                },
                "scope": "accounts",
                "type": "policies"
            }</code></pre>
            
    <div>
      <h2>Upcoming enhancements</h2>
      <a href="#upcoming-enhancements">
        
      </a>
    </div>
    <p>For General Availability (GA) we are focusing on developing a new user interface in the Dashboard for Automatic Audit Logs, extracting additional auditable fields for the audit logs — including system-initiated actions and user-level actions such as login events — and enabling audit log export via <a href="https://developers.cloudflare.com/logs/about/"><u>Logpush</u></a>. In the longer term, we plan to introduce dashboards, trend analysis, and alerting features for audit logs to further enhance their utility and ease of use. By enhancing our audit log system, Cloudflare is taking another step toward empowering users to manage their environments with greater transparency, security, and efficiency. </p>
    <div>
      <h2>Get started with Automatic Audit Logs</h2>
      <a href="#get-started-with-automatic-audit-logs">
        
      </a>
    </div>
    <p><b>Automatic Audit Logs</b> are now available for testing. We encourage you to explore the new features and provide your valuable feedback.</p><p>Retrieve audit logs using the following endpoint:</p><p><code>/accounts/&lt;account_id&gt;/logs/audit?since=&lt;date&gt;&amp;before=&lt;date&gt;</code></p><p>You can access detailed documentation for Automatic Audit Logs Beta API release <a href="https://developers.cloudflare.com/api/resources/accounts/subresources/logs/subresources/audit/"><u>here</u></a>. </p><p><i>Please note that the Beta release does not include updates to the Audit Logs UI in the Cloudflare Dashboard. The existing UI and API for the current audit logs will remain available until we Automatic Audit Logs reach General Availability.</i></p><p><b>We want your feedback</b>: Your feedback is essential to improving Automatic Audit Logs. Please consider filling out a <a href="https://docs.google.com/forms/d/e/1FAIpQLSfXGkJpOG1jUPEh-flJy9B13icmcdBhveFwe-X0EzQjJQnQfQ/viewform?usp=sharing"><u>short survey</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Audit Logs]]></category>
            <category><![CDATA[Beta]]></category>
            <guid isPermaLink="false">3E22tesFNZps8Sqk8VPCan</guid>
            <dc:creator>Sahidya Devadoss</dc:creator>
            <dc:creator>Arti Phugat</dc:creator>
            <dc:creator>Chris Shepherd</dc:creator>
        </item>
        <item>
            <title><![CDATA[Birthday Week recap: everything we announced — plus an AI-powered opportunity for startups]]></title>
            <link>https://blog.cloudflare.com/birthday-week-2023-wrap-up/</link>
            <pubDate>Mon, 02 Oct 2023 13:00:24 GMT</pubDate>
            <description><![CDATA[ Need a recap or refresher on all the big Birthday Week news this week? This recap has you covered ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3xrCvUVi0SgWrjDPrwi77i/2097296d3db2c219c5e0e904fe19adfb/image1-45.png" />
            
            </figure><p>This year, Cloudflare officially became a teenager, turning 13 years old. We celebrated this milestone with a series of announcements that benefit both our customers and the Internet community.</p><p>From developing applications in the age of AI to securing against the most advanced attacks that are yet to come, Cloudflare is proud to provide the tools that help our customers stay one step ahead.</p><p>We hope you’ve had a great time following along and for anyone looking for a recap of everything we launched this week, here it is:</p>
    <div>
      <h3>Monday</h3>
      <a href="#monday">
        
      </a>
    </div>
    <table><colgroup><col></col><col></col></colgroup><tbody><tr><td><p><span>What</span></p></td><td><p><span>In a sentence…</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/switching-cloudflare-cut-your-network-carbon-emissions-sbti/"><span>Switching to Cloudflare can cut emissions by up to 96%</span></a></p></td><td><p><span>Switching enterprise network services from on-prem to Cloudflare can cut related carbon emissions by up to 96%. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/traffic-transparency-unleashing-cloudflare-trace/"><span>Cloudflare Trace</span></a></p></td><td><p><span>Use Cloudflare Trace to see which rules and settings are invoked when an HTTP request for your site goes through our network. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/cloudflare-fonts-enhancing-website-privacy-speed/"><span>Cloudflare Fonts</span></a></p></td><td><p><span>Introducing Cloudflare Fonts. Enhance privacy and performance for websites using Google Fonts by loading fonts directly from the Cloudflare network. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/meet-traffic-manager/"><span>How Cloudflare intelligently routes traffic</span></a></p></td><td><p><span>Technical deep dive that explains how Cloudflare uses machine learning to intelligently route traffic through our vast network. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/cloudflare-stream-low-latency-hls-open-beta/"><span>Low Latency Live Streaming</span></a></p></td><td><p><span>Cloudflare Stream’s LL-HLS support is now in open beta. You can deliver video to your audience faster, reducing the latency a viewer may experience on their player to as little as 3 seconds. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/permissions-best-practices/"><span>Account permissions for all</span></a></p></td><td><p><span>Cloudflare account permissions are now available to all customers, not just Enterprise. In addition, we’ll show you how you can use them and best practices. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/incident-alerts/"><span>Incident Alerts</span></a></p></td><td><p><span>Customers can subscribe to Cloudflare Incident Alerts and choose when to get notified based on affected products and level of impact. </span></p></td></tr></tbody></table>
    <div>
      <h3>Tuesday</h3>
      <a href="#tuesday">
        
      </a>
    </div>
    <table><colgroup><col></col><col></col></colgroup><tbody><tr><td><p><span>What</span></p></td><td><p><span>In a sentence…</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/welcome-to-connectivity-cloud/"><span>Welcome to the connectivity cloud</span></a></p></td><td><p><span>Cloudflare is the world’s first connectivity cloud — the modern way to connect and protect your cloud, networks, applications and users. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/amazon-2bn-ipv4-tax-how-avoid-paying/"><span>Amazon’s $2bn IPv4 tax — and how you can avoid paying it</span></a><span> </span></p></td><td><p><span>Amazon will begin taxing their customers $43 for IPv4 addresses, so Cloudflare will give those \$43 back in the form of credits to bypass that tax. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/sippy-incremental-migration-s3-r2/"><span>Sippy</span></a></p><br /></td><td><p><span>Minimize egress fees by using Sippy to incrementally migrate your data from AWS to R2. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/merging-images-and-image-resizing/"><span>Cloudflare Images</span></a></p></td><td><p><span>All Image Resizing features will be available under Cloudflare Images and we’re simplifying pricing to make it more predictable and reliable.  </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/traffic-anomalies-notifications-radar/"><span>Traffic anomalies and notifications with Cloudflare Radar</span></a></p></td><td><p><span>Cloudflare Radar will be publishing anomalous traffic events for countries and Autonomous Systems (ASes).</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/detecting-internet-outages/"><span>Detecting Internet outages</span></a></p></td><td><p><span>Deep dive into how Cloudflare detects Internet outages, the challenges that come with it, and our approach to overcome these problems. </span></p></td></tr></tbody></table>
    <div>
      <h3>Wednesday</h3>
      <a href="#wednesday">
        
      </a>
    </div>
    <table><colgroup><col></col><col></col></colgroup><tbody><tr><td><p><span>What</span></p></td><td><p><span>In a sentence…</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/best-place-region-earth-inference/"><span>The best place on Region: Earth for inference</span></a></p></td><td><p><span>Now available: Workers AI, a serverless GPU cloud for AI, Vectorize so you can build your own vector databases, and AI Gateway to help manage costs and observability of your AI applications. </span></p><br /><p><span>Cloudflare delivers the best infrastructure for next-gen AI applications, supported by partnerships with NVIDIA, Microsoft, Hugging Face, Databricks, and Meta.</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/workers-ai/"><span>Workers AI </span></a></p></td><td><p><span>Launching Workers AI — AI inference as a service platform, empowering developers to run AI models with just a few lines of code, all powered by our global network of GPUs. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/partnering-with-hugging-face-deploying-ai-easier-affordable/"><span>Partnering with Hugging Face </span></a></p></td><td><p><span>Cloudflare is partnering with Hugging Face to make AI models more accessible and affordable to users. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/vectorize-vector-database-open-beta/"><span>Vectorize</span></a></p></td><td><p><span>Cloudflare’s vector database, designed to allow engineers to build full-stack, AI-powered applications entirely on Cloudflare's global network — available in Beta. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/announcing-ai-gateway/"><span>AI Gateway</span></a></p></td><td><p><span>AI Gateway helps developers have greater control and visibility in their AI apps, so that you can focus on building without worrying about observability, reliability, and scaling. AI Gateway handles the things that nearly all AI applications need, saving you engineering time so you can focus on what you're building.</span></p><br /><p><span> </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/webgpu-in-workers/"><span>You can now use WebGPU in Cloudflare Workers</span></a></p></td><td><p><span>Developers can now use WebGPU in Cloudflare Workers. Learn more about why WebGPUs are important, why we’re offering them to customers, and what’s next. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/ai-companies-building-cloudflare/"><span>What AI companies are building with Cloudflare</span></a></p></td><td><p><span>Many AI companies are using Cloudflare to build next generation applications. Learn more about what they’re building and how Cloudflare is helping them on their journey. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/writing-poems-using-llama-2-on-workers-ai/"><span>Writing poems using LLama 2 on Workers AI</span></a></p></td><td><p><span>Want to write a poem using AI? Learn how to run your own AI chatbot in 14 lines of code, running on Cloudflare’s global network. </span></p></td></tr></tbody></table>
    <div>
      <h3>Thursday</h3>
      <a href="#thursday">
        
      </a>
    </div>
    <table><colgroup><col></col><col></col></colgroup><tbody><tr><td><p><span>What</span></p></td><td><p><span>In a sentence…</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/hyperdrive-making-regional-databases-feel-distributed/"><span>Hyperdrive</span></a></p></td><td><p><span>Cloudflare launches a new product, Hyperdrive, that makes existing regional databases much faster by dramatically speeding up queries that are made from Cloudflare Workers.</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/d1-open-beta-is-here/"><span>D1 Open Beta</span></a></p></td><td><p><span>D1 is now in open beta, and the theme is “scale”: with higher per-database storage limits and the ability to create more databases, we’re unlocking the ability for developers to build production-scale applications on D1.</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/race-ahead-with-build-caching/"><span>Pages Build Caching</span></a></p></td><td><p><span>Build cache is a feature designed to reduce your build times by caching and reusing previously computed project components — now available in Beta. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/running-serverless-puppeteer-workers-durable-objects/"><span>Running serverless Puppeteer with Workers and Durable Objects</span></a></p></td><td><p><span>Introducing the Browser Rendering API, which enables developers to utilize the Puppeteer browser automation library within Workers, eliminating the need for serverless browser automation system setup and maintenance</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/cloudflare-now-powering-microsoft-edge-secure-network/"><span>Cloudflare partners with Microsoft to power their Edge Secure Network</span></a></p></td><td><p><span>We partnered with Microsoft Edge to provide a fast and secure VPN, right in the browser. Users don’t have to install anything new or understand complex concepts to get the latest in network-level privacy: Edge Secure Network VPN is available on the latest consumer version of Microsoft Edge in most markets, and automatically comes with 5GB of data. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/workers-playground/"><span>Re-introducing the Cloudflare Workers playground</span></a></p></td><td><p><span>We are revamping the playground that demonstrates the power of Workers, along with new development tooling, and the ability to share your playground code and deploy instantly to Cloudflare’s global network</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/cloudflare-integrations-marketplace-new-partners-sentry-momento-turso/"><span>Cloudflare integrations marketplace expands</span></a></p></td><td><p><span>Introducing the newest additions to Cloudflare’s Integration Marketplace. Now available: Sentry, Momento and Turso. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/socket-api-works-javascript-runtimes-wintercg-polyfill-connect/"><span>A Socket API that works across Javascript runtimes — announcing WinterCG spec and polyfill for connect()</span></a></p></td><td><p><span>Engineers from Cloudflare and Vercel have published a draft specification of the connect() sockets API for review by the community, along with a Node.js compatible polyfill for the connect() API that developers can start using.</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/workers-pricing-scale-to-zero/"><span>New Workers pricing</span></a></p></td><td><p><span>Announcing new pricing for Cloudflare Workers, where you are billed based on CPU time, and never for the idle time that your Worker spends waiting on network requests and other I/O.</span></p></td></tr></tbody></table>
    <div>
      <h3>Friday</h3>
      <a href="#friday">
        
      </a>
    </div>
    <table><colgroup><col></col><col></col></colgroup><tbody><tr><td><p><span>What</span></p></td><td><p><span>In a sentence…</span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/post-quantum-cryptography-ga/"><span>Post Quantum Cryptography goes GA</span></a><span> </span></p></td><td><p><span>Cloudflare is rolling out post-quantum cryptography support to customers, services, and internal systems to proactively protect against advanced attacks. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/announcing-encrypted-client-hello/"><span>Encrypted Client Hello</span></a></p></td><td><p><span>Announcing a contribution that helps improve privacy for everyone on the Internet. Encrypted Client Hello, a new standard that prevents networks from snooping on which websites a user is visiting, is now available on all Cloudflare plans. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/threats-lurking-office-365-cloudflare-email-retro-scan/"><span>Email Retro Scan</span></a><span> </span></p></td><td><p><span>Cloudflare customers can now scan messages within their Office 365 Inboxes for threats. The Retro Scan will let you look back seven days to see what threats your current email security tool has missed. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/turnstile-ga/"><span>Turnstile is Generally Available</span></a></p></td><td><p><span>Turnstile, Cloudflare’s CAPTCHA replacement, is now generally available and available for free to everyone and includes unlimited use. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/ai-bots/"><span>AI crawler bots</span></a></p></td><td><p><span>Any Cloudflare user, on any plan, can choose specific categories of bots that they want to allow or block, including AI crawlers. We are also recommending a new standard to robots.txt that will make it easier for websites to clearly direct how AI bots can and can’t crawl.</span></p><br /></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/detecting-zero-days-before-zero-day/"><span>Detecting zero-days before zero-day</span></a></p></td><td><p><span>Deep dive into Cloudflare’s approach and ongoing research into detecting novel web attack vectors in our WAF before they are seen by a security researcher. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/deep-dive-privacy-preserving-measurement/"><span>Privacy Preserving Metrics</span></a></p></td><td><p><span>Deep dive into the fundamental concepts behind the Distributed Aggregation Protocol (DAP) protocol with examples on how we’ve implemented it into Daphne, our open source aggregator server. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/post-quantum-to-origins/"><span>Post-quantum cryptography to origin</span></a></p></td><td><p><span>We are rolling out post-quantum cryptography support for outbound connections to origins and Cloudflare Workers fetch() calls. Learn more about what we enabled, how we rolled it out in a safe manner, and how you can add support to your origin server today. </span></p></td></tr><tr><td><p><a href="http://staging.blog.mrk.cfdata.org/network-performance-update-birthday-week-2023/"><span>Network performance update</span></a></p></td><td><p><span>Cloudflare’s updated benchmark results regarding network performance plus a dive into the tools and processes that we use to monitor and improve our network performance. </span></p></td></tr></tbody></table>
    <div>
      <h3>One More Thing</h3>
      <a href="#one-more-thing">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1e1X3l01L7kc5DgRUgAoU5/76d3d1955e15044bbbd14c57ee05877c/image1-51.png" />
            
            </figure><p>When Cloudflare turned 12 last year, we announced the <a href="https://www.cloudflare.com/lp/workers-launchpad/">Workers Launchpad Funding Program</a> - you can think of it like a startup accelerator program for companies building on Cloudlare’s Developer Platform, with no restrictions on your size, stage, or geography.</p><p><b>A refresher on how the Launchpad works:</b> Each quarter, we admit a group of startups who then get access to a wide range of technical advice, mentorship, and fundraising opportunities. That includes our Founders Bootcamp, Open Office Hours with our Solution Architects, and Demo Day. Those who are ready to fundraise will also be connected to our community of 40+ leading global Venture Capital firms.</p><p>In exchange, we just ask for your honest feedback. We want to know what works, what doesn’t and what you need us to build for you. We don’t ask for a stake in your company, and we don’t ask you to pay to be a part of the program.</p><blockquote><p>Targum (my startup) was one of the first AI companies (w/ <a href="https://twitter.com/jamdotdev?ref_src=twsrc%5Etfw">@jamdotdev</a> ) in the Cloudflare workers launchpad!</p><p>In return to tons of stuff we got from CF 🙏 they asked for feedback, and my main one was, let me do everything end to end on CF, I don't want to rent GPU servers… <a href="https://t.co/0j2ZymXpsL">https://t.co/0j2ZymXpsL</a></p><p>— Alex Volkov (@altryne) <a href="https://twitter.com/altryne/status/1707034613699547433?ref_src=twsrc%5Etfw">September 27, 2023</a></p></blockquote><p>Over the past year, we’ve received applications from nearly 60 different countries. We’ve had a chance to work closely with 50 amazing early and growth-stage startups admitted into the first two cohorts, and have grown our VC partner community to 40+ firms and more than $2 billion in potential investments in startups building on Cloudflare.</p><p><b>Next up: Cohort #3!</b> Between recently wrapping up Cohort #2 (check out their <a href="https://cloudflare.tv/shows/workers-launchpad-demo-day/workers-launchpad-demo-day-cohort-2/3vVqLOgq">Demo Day</a>!), celebrating the Launchpad’s 1st birthday, and the heaps of announcements we made last week, we thought that everyone could use a little extra time to catch up on all the news - which is why we are extending the deadline for Cohort #3 a few weeks to <b>October 13, 2023. AND</b> we’re <b>reserving 5 spots in the class for those who are already using any of last Wednesday’s AI announcements.</b> Just be sure to mention what you’re using in your application.</p><p>So once you’ve had a chance to check out the announcements and pour yourself a cup of coffee, check out the <a href="https://www.cloudflare.com/lp/workers-launchpad/"><b>Workers Launchpad</b></a>. Applying is a breeze — you’ll be done long before your coffee gets cold.</p>
    <div>
      <h3>Until next time</h3>
      <a href="#until-next-time">
        
      </a>
    </div>
    <p>That’s all for Birthday Week 2023. We hope you enjoyed the ride, and we’ll see you at our next innovation week!</p><blockquote><p>i hate <a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> launch week</p><p>most launch weeks are underwhelming</p><p>cloudflare always makes me rethink everything i’m doing</p><p>— Dax (@thdxr) <a href="https://twitter.com/thdxr/status/1707575791234560377?ref_src=twsrc%5Etfw">September 29, 2023</a></p></blockquote><p></p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Turnstile]]></category>
            <category><![CDATA[CAPTCHA]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Machine Learning]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Connectivity Cloud]]></category>
            <category><![CDATA[undefined]]></category>
            <category><![CDATA[D1]]></category>
            <category><![CDATA[Beta]]></category>
            <guid isPermaLink="false">7umrrlVzTKNvArNCqoQUSI</guid>
            <dc:creator>Dina Kozlov</dc:creator>
            <dc:creator>Mia Wang</dc:creator>
        </item>
        <item>
            <title><![CDATA[Race ahead with Cloudflare Pages build caching]]></title>
            <link>https://blog.cloudflare.com/race-ahead-with-build-caching/</link>
            <pubDate>Thu, 28 Sep 2023 13:00:57 GMT</pubDate>
            <description><![CDATA[ Unleash the fast & furious in your builds with Cloudflare Pages' build caching. Reduce build times by caching previously computed project components. Now in Beta for select frameworks and package managers. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we are thrilled to release a beta of Cloudflare Pages support for build caching! With build caching, we are offering a supercharged Pages experience by helping you cache parts of your project to save time on subsequent builds.</p><p>For developers, time is not just money – it’s innovation and progress. When every second counts in crunch time before a new launch, the “need for speed” becomes <i>critical</i>. With Cloudflare Pages’ built-in <a href="https://www.cloudflare.com/learning/serverless/glossary/what-is-ci-cd/">continuous integration and continuous deployment (CI/CD)</a>, developers count on us to drive fast. We’ve already taken great strides in making sure we’re enabling quick development iterations for our users by <a href="/cloudflare-pages-build-improvements/">making solid improvements on the stability and efficiency</a> of our build infrastructure. But we always knew there was more to our build story.</p>
    <div>
      <h3>Quick pit stops</h3>
      <a href="#quick-pit-stops">
        
      </a>
    </div>
    <p>Build times can feel like a developer's equivalent of a time-out, a forced pause in the creative process—the inevitable pit stop in a high-speed formula race.</p><p>Long build times not only breaks the flow of individual developers, but it can also create a ripple effect across the team. It can slow down iterations and push back deployments. In the fast-paced world of CI/CD, these delays can drastically impact productivity and the delivery of products.</p><p>We want to empower developers to <b>win the race</b>, miles ahead of competition.</p>
    <div>
      <h3>Mechanics of build caching</h3>
      <a href="#mechanics-of-build-caching">
        
      </a>
    </div>
    <p>At its core, build caching is a mechanism that stores artifacts of a build, allowing subsequent builds to reuse these artifacts rather than recomputing them from scratch. By leveraging the cached results, build times can be significantly reduced, leading to a more efficient build process.</p><p>Previously, when you initiated a build, the Pages CI system would generate every step of the build process, even if most parts of the codebase remain unchanged between builds. This is the equivalent to changing out every single part of the car during a pit stop, irrespective of if anything needs replacing.</p><p>Build caching refines this process. Now, the Pages build system will detect if cached artifacts can be leveraged, restore the artifacts, then focus on only computing the modified sections of the code. In essence, build caching acts like an experienced pit crew, smartly skipping unnecessary steps and focusing only on what's essential to get you back in the race faster.</p>
    <div>
      <h3>What are we caching?</h3>
      <a href="#what-are-we-caching">
        
      </a>
    </div>
    <p>It boils down to two components: dependencies and build output.</p><p>The Pages build system supports dependency caching for select package managers and build output caching for select frameworks. Check out our <a href="https://developers.cloudflare.com/pages/platform/build-caching">documentation</a> for more information on what’s currently supported and what’s coming up.</p><p>Let’s take a closer look at what exactly we are caching.</p><p><b>Dependencies:</b> upon initiating a build, the Pages CI system checks for cached artifacts from previous builds. If it identifies a cache hit for dependencies, it restores from cache to speed up dependency installation.</p><p><b>Build output:</b> if a cache hit for build output is identified, Pages will only build the changed assets. This approach enables the long awaited <i>incremental builds</i> for supported JavaScript frameworks.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4kqmUJuLrUGc7vtXbDc4X6/3f1440dbf1ad3acef20a2b99c18d6d28/image2-26.png" />
            
            </figure>
    <div>
      <h3>Ready, set … go!</h3>
      <a href="#ready-set-go">
        
      </a>
    </div>
    <p>Build caching is now in beta, and ready for you to test drive!</p><p>In this release, the feature will support the node-based package managers <a href="https://www.npmjs.com/">npm</a>, <a href="https://yarnpkg.com/">yarn</a>, <a href="https://pnpm.io/">pnpm</a>, as well as <a href="https://bun.sh/">Bun</a>. We’ve also ensured compatibility with the most popular frameworks that provide native incremental building support: <a href="https://www.gatsbyjs.com/">Gatsby.js</a>, <a href="https://nextjs.org/">Next.js</a> and <a href="https://astro.build/">Astro</a> – and more to come!</p><p>For you as a Pages user, interacting with build caching will be seamless. If you are working with an existing project, simply navigate to your project’s settings to toggle on Build Cache.</p><p>When you push a code change and initiate a build using Pages CI, build caching will kick-start and do its magic in the background.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4hWz7Sh9wtk64c01cSnNjG/6967b9783a75f3fdfaaa10bd26884e0b/image4-17.png" />
            
            </figure>
    <div>
      <h3>“Cache” us on Discord</h3>
      <a href="#cache-us-on-discord">
        
      </a>
    </div>
    <p>Have questions? Join us on our <a href="https://discord.com/invite/cloudflaredev?event=1152163002502615050">Discord Server</a>. We will be hosting an “Ask Us Anything” <a href="https://discord.com/invite/cloudflaredev?event=1152163002502615050">session</a> on October 2nd where you can chat live with members of our team! Your feedback on this beta is invaluable to us, so after testing out build caching, don't hesitate to share your experiences! Happy building!</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6lavvh2PfpjlEbNV0YEuGB/8104fcccf6bf1243dfa113e940317f82/image3-32.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Cloudflare Pages]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Speed]]></category>
            <guid isPermaLink="false">5NhsEJJxtKlKawPWJmHWJm</guid>
            <dc:creator>Anni Wang</dc:creator>
            <dc:creator>Jacob Hands</dc:creator>
            <dc:creator>John Fawcett</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Queues: messages at your speed with consumer concurrency and explicit acknowledgement]]></title>
            <link>https://blog.cloudflare.com/messages-at-your-speed-with-concurrency-and-explicit-acknowledgement/</link>
            <pubDate>Fri, 19 May 2023 13:00:33 GMT</pubDate>
            <description><![CDATA[ Queues is faster than ever before! Now queues will automatically scale up your consumers, clearing out backlogs in a flash. Explicit Acknowledgement allows developers to acknowledge or retry individual messages in a batch, preventing work from being repeated. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Communicating between systems can be a balancing act that has a major impact on your business. <a href="https://www.cloudflare.com/learning/security/api/what-is-an-api/">APIs</a> have limits, billing frequently depends on usage, and end-users are always looking for more speed in the services they use. With so many conflicting considerations, it can feel like a challenge to get it just right. Cloudflare Queues is a tool to make this balancing act simple. With our latest features like consumer concurrency and explicit acknowledgment, it’s easier than ever for developers to focus on writing great code, rather than worrying about the fees and rate limits of the systems they work with.</p><p>Queues is a messaging service, enabling developers to send and receive messages across systems asynchronously with guaranteed delivery. It integrates directly with Cloudflare Workers, making for easy message production and consumption working with the many products and services we offer.</p>
    <div>
      <h2>What’s new in Queues?</h2>
      <a href="#whats-new-in-queues">
        
      </a>
    </div>
    
    <div>
      <h3>Consumer concurrency</h3>
      <a href="#consumer-concurrency">
        
      </a>
    </div>
    <p>Oftentimes, the systems we pull data from can produce information faster than other systems can consume them. This can occur when consumption involves processing information, storing it, or sending and receiving information to a third party system. The result of which is that sometimes, a queue can fall behind where it should be. At Cloudflare, a queue shouldn't be a quagmire. That’s why we’ve introduced Consumer Concurrency.</p><p>With Concurrency, we automatically scale up the amount of consumers needed to match the speed of information coming into any given queue. In this way, customers no longer have to worry about an ever-growing backlog of information bogging down their system.</p>
    <div>
      <h3>How it works</h3>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>When setting up a queue, developers can set a Cloudflare Workers script as a target to send messages to. With concurrency enabled, Cloudflare will invoke multiple instances of the selected Worker script to keep the messages in the queue moving effectively. This feature is enabled by default for every queue and set to automatically scale.</p><p>Autoscaling considers the following factors when spinning up consumers:  the number of messages in a queue, the rate of new messages, and successful vs. unsuccessful consumption attempts.</p><p>If a queue has enough messages in it, concurrency will increase each time a message batch is successfully processed. Concurrency is decreased when message batches encounter errors. Customers can set a <code>max_concurrency</code> value in the Dashboard or via Wrangler, which caps out how many consumers can be automatically created to perform processing for a given queue.</p><p>Setting the <code>max_concurrency</code> value manually can be helpful in the following situations where producer data is provided in bursts, the datasource API is rate limited, and datasource API has higher costs with more usage.</p><p>Setting a max concurrency value manually allows customers to optimize their workflows for other factors beyond speed.</p>
            <pre><code>// in your wrangler.toml file


[[queues.consumers]]
  queue = "my-queue"

//max concurrency can be set to a number between 1 and 10
//this defines the total amount of consumers running simultaneously

max_concurrency = 7</code></pre>
            <p>To learn more about concurrency you can check out our developer documentation <a href="https://developers.cloudflare.com/queues/learning/consumer-concurrency/">here</a>.</p>
    <div>
      <h3>Concurrency in practice</h3>
      <a href="#concurrency-in-practice">
        
      </a>
    </div>
    <p>It’s baseball season in the US, and for many of us that means fantasy baseball is back! This year is the year we finally write a program that uses data and statistics to pick a winning team, as opposed to picking players based on “feelings” and “vibes”. We’re engineers after all, and baseball is a game of rules. If the Oakland A’s can do it, so can we!</p><p>So how do we put this together? We’ll need a few things:</p><ol><li><p>A list of potential players</p></li><li><p>An API to pull historical game statistics from</p></li><li><p>A queue to send this data to its consumer</p></li><li><p>A Worker script to crunch the numbers and generate a score</p></li></ol><p>A developer can pull from a baseball reference API into a Workers script, and from that worker pass this information to a queue. Historical data is… historical, so we can pull data into our queue as fast as the baseball API will allow us. For our list of potential players, we pull statistics for each game they’ve played. This includes everything from batting averages, to balls caught, to game day weather. Score!</p>
            <pre><code>//get data from a third party API and pass it along to a queue


const response = await fetch("http://example.com/baseball-stats.json");
const gamesPlayedJSON = await response.json();

for (game in gamesPlayedJSON){
//send JSON to your queue defined in your workers environment
env.baseballqueue.send(jsonData)
}</code></pre>
            <p>Our producer Workers script then passes these statistics onto the queue. As each game contains quite a bit of data, this results in hundreds of thousands of “game data” messages waiting to be processed in our queue. Without concurrency, we would have to wait for each batch of messages to be processed one at a time, taking minutes if not longer. But, with Consumer Concurrency enabled, we watch as multiple instances of our worker script invoked to process this information in no time!</p><p>Our Worker script would then take these statistics, apply a heuristic, and store the player name and a corresponding quality score into a database like a Workers KV store for easy access by your application presenting the data.</p>
    <div>
      <h3>Explicit Acknowledgment</h3>
      <a href="#explicit-acknowledgment">
        
      </a>
    </div>
    <p>In Queues previously, a failure of a single message in a batch would result in the whole batch being resent to the consumer to be reprocessed. This resulted in extra cycles being spent on messages that were processed successfully, in addition to the failed message attempt. This hurts both customers and developers, slowing processing time, increasing complexity, and increasing costs.</p><p>With Explicit Acknowledgment, we give developers the precision and flexibility to handle each message individually in their consumer, negating the need to reprocess entire batches of messages. Developers can now tell their queue whether their consumer has properly processed each message, or alternatively if a specific message has failed and needs to be retried.</p><p>An acknowledgment of a message means that that message will not be retried if the batch fails. Only messages that were not acknowledged will be retried. Inversely, a message that is explicitly retried, will be sent again from the queue to be reprocessed without impacting the processing of the rest of the messages currently being processed.</p>
    <div>
      <h3>How it works</h3>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>In your consumer, there are 4 new methods you can call to explicitly acknowledge a given message: .ack(), .retry(), .ackAll(), .retryAll().</p><p>Both ack() and retry() can be called on individual messages. ack() tells a queue that the message has been processed successfully and that it can be deleted from the queue, whereas retry() tells the queue that this message should be put back on the queue and delivered in another batch.</p>
            <pre><code>async queue(batch, env, ctx) {
    for (const msg of batch.messages) {
	try {
//send our data to a 3rd party for processing
await fetch('https://thirdpartyAPI.example.com/stats', {
	method: 'POST',
	body: msg, 
	headers: {
		'Content-type': 'application/json'
}
});
//acknowledge if successful
msg.ack();
// We don't have to re-process this if subsequent messages fail!
}
catch (error) {
	//send message back to queue for a retry if there's an error
      msg.retry();
		console.log("Error processing", msg, error);
}
    }
  }</code></pre>
            <p>ackAll() and retryAll() work similarly, but act on the entire batch of messages instead of individual messages.</p><p>For more details check out our developer documentation <a href="https://developers.cloudflare.com/queues/learning/batching-retries/">here</a>.</p>
    <div>
      <h3>Explicit Acknowledgment in practice</h3>
      <a href="#explicit-acknowledgment-in-practice">
        
      </a>
    </div>
    <p>In the course of making our Fantasy Baseball team picker, we notice that data isn’t always sent correctly from the baseball reference API. This results in data not being correctly parsed and rejected from our player heuristics.</p><p>Without Explicit Acknowledgment, the entire batch of baseball statistics would need to be retried. Thankfully, we can use Explicit Acknowledgment to avoid that, and tell our queue which messages were parsed successfully and which were not.</p>
            <pre><code>import heuristic from "baseball-heuristic";
export default {
  async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext) {
    for (const msg of batch.messages) {
      try {
        // Calculate the score based on the game stats
        heuristic.generateScore(msg)
        // Explicitly acknowledge results 
        msg.ack()
      } catch (err) {
        console.log(err)
        // Retry just this message
        msg.retry()
      } 
    }
  },
};</code></pre>
            
    <div>
      <h3>Higher throughput</h3>
      <a href="#higher-throughput">
        
      </a>
    </div>
    <p>Under the hood, we’ve been working on improvements to further increase the amount of messages per second each queue can handle. In the last few months, that number has quadrupled, improving from 100 to over 400 messages per second.</p><p>Scalability can be an essential factor when deciding which services to use to power your application. You want a service that can grow with your business. We are always aiming to improve our message throughput and hope to see this number quadruple again over the next year. We want to grow with you.</p>
    <div>
      <h2>What’s next?</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>As our service grows, we want to provide our customers with more ways to interact with our service beyond the traditional Cloudflare Workers workflow. We know our customers’ infrastructure is often complex, spanning across multiple services. With that in mind, our focus will be on enabling easy connection to services both within the Cloudflare ecosystem and beyond.</p>
    <div>
      <h3>R2 as a consumer</h3>
      <a href="#r2-as-a-consumer">
        
      </a>
    </div>
    <p>Today, the only type of consumer you can configure for a queue is a Workers script. While Workers are incredibly powerful, we want to take it a step further and give customers a chance to write directly to other services, starting with <a href="https://www.cloudflare.com/developer-platform/r2/">R2</a>. Coming soon, customers will be able to select an R2 bucket in the Cloudflare Dashboard for a Queue to write to directly, no code required. This will save valuable developer time by avoiding the initial setup in a Workers script, and any maintenance that is required as services evolve. With R2 as a first party consumer in Queues, customers can simply select their bucket, and let Cloudflare handle the rest.</p>
    <div>
      <h3>HTTP pull</h3>
      <a href="#http-pull">
        
      </a>
    </div>
    <p>We're also working to allow you to consume messages from existing infrastructure you might have outside of Cloudflare. Cloudflare Queues will provide an HTTP API for each queue from which any consumer can pull batches of messages for processing. Customers simply make a request to the API endpoint for their queue, receive data they requested, then send an acknowledgment that they have received the data, so the queue can continue working on the next batch.</p>
    <div>
      <h3>Always working to be faster</h3>
      <a href="#always-working-to-be-faster">
        
      </a>
    </div>
    <p>For the Queues team, speed is always our focus, as we understand our customers don't want bottlenecks in the performance of their applications. With this in mind the team will be continuing to look for ways to increase the velocity through which developers can build best in class applications on our developer platform. Whether it's reducing message processing time, the amount of code you need to manage, or giving developers control over their application pipeline, we will continue to implement solutions to allow you to focus on just the important things, while we handle the rest.</p><p>Cloudflare Queues is currently in Open Beta and ready to power your most complex applications.</p><p>Check out our getting started <a href="https://developers.cloudflare.com/queues/learning/how-queues-works/">guide</a> and build your service with us today!</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Queues]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">6sSF3GnFonTy4zGf6McmFv</guid>
            <dc:creator>Charles Burnett</dc:creator>
            <dc:creator>Josh Wheeler</dc:creator>
        </item>
        <item>
            <title><![CDATA[We've shipped so many products the Cloudflare dashboard needed its own search engine]]></title>
            <link>https://blog.cloudflare.com/quick-search-beta/</link>
            <pubDate>Wed, 28 Sep 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ Today we’re proud to announce our beta release of quick search for the Cloudflare dashboard, our first ever cross-dashboard search tool to help you navigate our products and features. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today we’re proud to announce our first release of <i>quick search</i> for the Cloudflare dashboard, a beta version of our first ever cross-dashboard search tool to help you navigate our products and features. This first release is now available to a small percentage of our customers. Want to request early access? Let us know by filling out <a href="https://forms.gle/wFXsvNCCPpTDPKNw5">this form</a>.</p>
    <div>
      <h2>What we’re launching</h2>
      <a href="#what-were-launching">
        
      </a>
    </div>
    <p>We’re launching <i>quick search</i> to speed up common interactions with the Cloudflare dashboard. Our dashboard allows you to configure Cloudflare’s full suite of products and features, and <i>quick search</i> gives you a shortcut.</p><p>To get started, you can access the <i>quick search</i> tool from anywhere within the Cloudflare dashboard by clicking the magnifying glass button in the top navigation, or hitting <i>Ctrl + K</i> on Linux and Windows or <i>⌘ + K</i> on Mac. (If you find yourself forgetting which key combination it is just remember that it’s <i>⌘</i> or <i>Ctrl-K</i>-wik.) From there, enter a search term and then select from the results shown below.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/18FxLXGhxaDifpdwrbLL6g/c194908339f7305be8d06577a550d98a/image7-8.png" />
            
            </figure><p><i>Access</i> quick search <i>from the top navigation bar, or use keyboard shortcuts Ctrl + K on Linux and Windows or ⌘ + K on Mac.</i></p>
    <div>
      <h2>Current supported functionality</h2>
      <a href="#current-supported-functionality">
        
      </a>
    </div>
    <p>What functionality will you have access to? Below you’ll learn about the three core capabilities of <i>quick search</i> that are included in this release, as well as helpful tips for using the tool.</p>
    <div>
      <h3>Search for a page in the dashboard</h3>
      <a href="#search-for-a-page-in-the-dashboard">
        
      </a>
    </div>
    <p>Start typing in the name of the product you’re looking for, and we’ll load matching terms after each key press. You will see results for any dashboard page that currently exists in your sidebar navigation. Then, just click the desired result to navigate directly there.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/30Se7KvpQxKKecPW54rr8n/67388a8a37af76a11d50d86f633378d1/image6-12.png" />
            
            </figure><p><i>Search for “page” and you’ll see results categorized into “website-only products” and “account-wide products.”</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3UHBkxlq39FejydkUsLJoK/cbf57b82071ce11613ae87d7fef36bd1/image3-42.png" />
            
            </figure><p><i>Search for “ddos” and you’ll see results categorized into “websites,” “website-only products” and “account-wide products.”</i></p>
    <div>
      <h3>Search for website-only products</h3>
      <a href="#search-for-website-only-products">
        
      </a>
    </div>
    <p>For our customers who manage a website or domain in Cloudflare, you have access to a multitude of Cloudflare products and features to enhance your website’s security, performance and reliability. <i>Quick search</i> can be used to easily find those products and features, regardless of where you currently are in the dashboard (even from within another website!).</p><p>You may easily search for your website by name to navigate to your website’s Overview page:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/EegwomFl43gRGdZbD4ecI/e5a2cd35d1ac65a7836856889220ac54/image9-5.png" />
            
            </figure><p>You may also navigate to the products and feature pages <i>within</i> your specific website(s). Note that you can perform a website-specific search from anywhere in your core dashboard using one of two different approaches, which are explained below.</p><p>First, you may search first for your website by name, then navigate search results from there:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/11Bi07CtVIWCh5YdIb8E93/de0b72d5d8b5aa8f923719a5cc934682/image2-61.png" />
            
            </figure><p>Alternatively, you may search first for the product or feature you’re looking for, then filter down by your website:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6raMp2ha9o8ZSIuHUkvafb/cdcc066b01ae3066d7d438963e5d3045/image5-22.png" />
            
            </figure>
    <div>
      <h3>Search for account-wide products</h3>
      <a href="#search-for-account-wide-products">
        
      </a>
    </div>
    <p>Many Cloudflare products and features are <i>not</i> tied directly to a website or domain that you have set up in Cloudflare, like Workers, <a href="https://www.cloudflare.com/developer-platform/r2/">R2</a>, Magic Transit—not to mention their related sub-pages. Now, you may use <i>quick search</i> to more easily navigate to those sections of the dashboard.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4TgFfEpQ9ewvfU90knvhEe/58f5a2aaecfdf38528eee04bc19c6aa2/image8-6.png" />
            
            </figure>
    <div>
      <h2>What’s next for quick search</h2>
      <a href="#whats-next-for-quick-search">
        
      </a>
    </div>
    <p>Here’s an overview of what’s next on our <i>quick search</i> roadmap (and not yet supported today):</p><ul><li><p>Search results do not currently return results of product- and feature-specific names or configurations, such as Worker names, specific DNS records, IP addresses, Firewall Rules.</p></li><li><p>Search results do not currently return results from <i>within</i> the Zero Trust dashboard.</p></li><li><p>Search results do not currently return results for Cloudflare content living outside the dashboard, like Support or Developer documentation.</p></li></ul><p>We’d love to hear what you think. What would you like to see added next? Let us know using the feedback link found at the bottom of the search window.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/CBp4LkpNA6x8V8Q1uWt0l/02da171b53c08df91c8609b160626c91/image4-23.png" />
            
            </figure>
    <div>
      <h2>Our vision for the future of the dashboard</h2>
      <a href="#our-vision-for-the-future-of-the-dashboard">
        
      </a>
    </div>
    <p>We’re excited to launch <i>quick search</i> and to continue improving our dashboard experience for all customers. Over time, we’ll mature our search functionality to index any and all content you might be looking for — including search results for all product content, Support and Developer docs, extending search across accounts, caching your recent searches, and more.</p><p><i>Quick search</i> is one of many important user experience improvements we are planning to tackle over the coming weeks, months and years. The dashboard is central to your Cloudflare experience, and we’re fully committed to making your experience delightful, useful, and easy. Stay tuned for an upcoming blog post outlining the vision for the Cloudflare dashboard, from our in-app home experience to our global navigation and beyond.</p><p>For now, keep your eye out for the little search icon that will help you in your day-to-day responsibilities in Cloudflare, and if you don’t see it yet, don’t worry—we can’t wait to ship it to you soon.</p><p>If you don’t yet see <i>quick search</i> in your Cloudflare dashboard, you can request early access by filling out <a href="https://forms.gle/wFXsvNCCPpTDPKNw5">this form</a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Dashboard]]></category>
            <category><![CDATA[User Research]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">1pMicOaM3g9qNkIWyiAHMP</guid>
            <dc:creator>Emily Flannery</dc:creator>
            <dc:creator>Harley Turan</dc:creator>
        </item>
        <item>
            <title><![CDATA[Logs on R2: slash your logging costs]]></title>
            <link>https://blog.cloudflare.com/logs-r2/</link>
            <pubDate>Wed, 11 May 2022 12:59:24 GMT</pubDate>
            <description><![CDATA[ You shouldn’t have to make trade-offs between keeping logs that you need and managing tight budgets. R2’s low costs makes this decision easier and now you can use Logpush to store logs on R2. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Hot on the heels of the <a href="/r2-open-beta">R2 open beta announcement</a>, we’re excited that Cloudflare enterprise customers can now use Logpush to store logs on R2!</p><p>Raw logs from our products are used by our customers for debugging performance issues, to investigate security incidents, to keep up security standards for compliance and much more. You shouldn’t have to make tradeoffs between keeping logs that you need and managing tight budgets. With <a href="https://www.cloudflare.com/developer-platform/products/r2/">R2’s low costs</a>, we’re making this decision easier for our customers!</p>
    <div>
      <h3>Getting into the numbers</h3>
      <a href="#getting-into-the-numbers">
        
      </a>
    </div>
    <p>Cloudflare helps customers at different levels of scale — from a few requests per day, up to a million requests per second. Because of this, the cost of log storage also varies widely. For customers with higher-traffic websites, log storage costs can grow large, quickly.</p><p>As an example, imagine a website that gets 100,000 requests per second. This site would generate about 9.2 TB of HTTP request logs per day, or 850 GB/day after gzip compression. Over a month, you’ll be storing about 26 TB (compressed) of HTTP logs.</p><p>For a typical use case, imagine that you write and read the data exactly once – for example, you might write the data to <a href="https://www.cloudflare.com/learning/cloud/what-is-object-storage/">object storage</a> before ingesting it into an alerting system. <a href="https://r2-calculator.cloudflare.com/">Compare the costs of R2 and S3</a> (note that this excludes costs per operation to read/write data).</p><table><tr><td><p><b>Provider</b></p></td><td><p><b>Storage price</b></p></td><td><p><b>Data transfer price</b></p></td><td><p><b>Total cost assuming data is read once</b></p></td></tr><tr><td><p>R2</p></td><td><p>$0.015/GB</p></td><td><p>$0</p></td><td><p>$390/month</p></td></tr><tr><td><p>S3 (Standard, US East)</p></td><td><p><a href="http://web.archive.org/web/20220531135033/https://aws.amazon.com/s3/pricing/">$0.023/GB</a></p></td><td><p><a href="http://web.archive.org/web/20220531135033/https://aws.amazon.com/s3/pricing/">$0.09/GB</a> for first 10 TB; then <a href="http://web.archive.org/web/20220531135033/https://aws.amazon.com/s3/pricing/">$0.085/GB</a></p></td><td><p>$2,858/month</p></td></tr></table><p>In this example, R2 leads to 86% savings! It’s worth noting that querying logs is where another hefty price tag comes in because Amazon Athena charges based on the amount of data scanned. If your team is looking back through historical data, each query can be hundreds of dollars.</p><p>Many of our customers have tens to hundreds of domains behind Cloudflare and the majority of our Enterprise customers also use multiple Cloudflare products. Imagine how costs will scale if you need to store HTTP, WAF and Spectrum logs for all of your Internet properties behind Cloudflare.</p><p>For SaaS customers that are building the next big thing on Cloudflare, logs are important to get visibility into customer usage and performance. Your customer’s developers may also want access to raw logs to understand errors during development and to troubleshoot production issues. Costs for storing logs multiply and add up quickly!</p>
    <div>
      <h3>The flip side: log retrieval</h3>
      <a href="#the-flip-side-log-retrieval">
        
      </a>
    </div>
    <p>When designing products, one of Cloudflare’s core principles is ease of use. We take on the complexity, so you don’t have to. Storing logs is only half the battle, you also need to be able to access relevant logs when you need them – in the heat of an incident or when doing an in depth analysis.</p><p>Our product, <a href="https://developers.cloudflare.com/logs/logpull/">Logpull</a>, offers seven days of <a href="https://www.cloudflare.com/learning/performance/log-retention-best-practices/">log retention</a> and an easy-to-use API to access. Our customers love that Logpull doesn’t need any setup on third parties since it's completely managed by Cloudflare. However, Logpull is limited in the retention of logs, the type of logs that we store (only HTTP request logs) and the amount of data that can be queried at one time.</p><p>We’re building tools for log retrieval that make it super easy to get your data out of R2 from any of our datasets. Similar to Logpull, we’ll start by supporting lookups by time period and rayId. From there, we’ll tackle more complex functions like returning logs within time X and Y that have 500 errors or where WAF action = <code>block</code>.</p><p>We’re looking for customers to join a closed beta for our Log Retrieval API. If you’re interested in testing it out, giving feedback and ultimately helping us shape the product sign up <a href="https://docs.google.com/forms/d/e/1FAIpQLSeIzZk_giT5KFLL7PyUQofZKMLMp9BIo0ObCbxqKg1vlD0dlw/viewform?usp=sf_link">here</a>.</p>
    <div>
      <h3>Logs on R2: How to get started</h3>
      <a href="#logs-on-r2-how-to-get-started">
        
      </a>
    </div>
    <p>Enterprise customers first need to get R2 added to their contract. Reach out to your account team if this is something you’re interested in! Once enabled, create an R2 bucket for your logs and follow the Logpush setup flow to create your job.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2nzN2tZ2qIJv23lDiIrlbU/2a0a51af78eb5ab678e36378b016b09d/pasted-image-0.png" />
            
            </figure><p>It’s that simple! If you have questions, our <a href="https://developers.cloudflare.com/logs/get-started/enable-destinations/r2//">Logpush to R2</a> developer docs go into more detail.</p>
    <div>
      <h3>More to come</h3>
      <a href="#more-to-come">
        
      </a>
    </div>
    <p>We’re continuing to build out more advanced Logpush features with a focus on customization. Here’s a preview of what’s next on the roadmap:</p><ul><li><p>New datasets: Network Analytics Logs, Worker's Trace Events</p></li><li><p>Log filtering</p></li><li><p>Custom log formatting</p></li></ul><p>We also have exciting plans to build out log analysis and forensics capabilities on top of R2. We want to make log storage tightly coupled to the Cloudflare dash, so you can see high level analytics and drill down into individual log lines all in one view. Stay tuned to the blog for more!</p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Logs]]></category>
            <category><![CDATA[Beta]]></category>
            <guid isPermaLink="false">22cFwEOvRYecsonDb4YVCQ</guid>
            <dc:creator>Tanushree Sharma</dc:creator>
        </item>
        <item>
            <title><![CDATA[Email Routing is now in open beta, available to everyone]]></title>
            <link>https://blog.cloudflare.com/email-routing-open-beta/</link>
            <pubDate>Tue, 08 Feb 2022 11:21:12 GMT</pubDate>
            <description><![CDATA[ Cloudflare Email Routing transitioned from closed beta to open beta. It’s now available to everyone, including free zones ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1AL0Vf9w01BxW3DaGrj0MV/cc1bd2060376015b62130232c01a5d9c/image2-8.png" />
            
            </figure><p>I won’t beat around the bush: we’ve moved <a href="/introducing-email-routing/">Cloudflare Email Routing</a> from closed beta to open beta ?</p><p>What does this mean? It means that there’s no waitlist anymore; every zone* in every Cloudflare account has Email Routing available to them.</p><p>To get started just open one of the zones in your <a href="https://dash.cloudflare.com/?to=/:account/:zone/email/overview">Cloudflare Dashboard</a> and click on <i>Email</i> in the navigation pane.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2H4sSM4n0aBeDZ08i7MQng/6a2890b943d472adb6b5a1e8212ac1b3/image1-2-3.png" />
            
            </figure>
    <div>
      <h3>Our journey so far</h3>
      <a href="#our-journey-so-far">
        
      </a>
    </div>
    <p>Back in September 2021, during Cloudflare’s Birthday Week, we <a href="/introducing-email-routing/">introduced</a> Email Routing as the simplest solution for creating <a href="https://www.cloudflare.com/learning/email-security/what-is-email-routing/">custom email addresses</a> for your domains without the hassle of managing multiple mailboxes.</p><p>Many of us at Cloudflare saw a need for this type of product, and we’ve been using it since before it had a UI. After Birthday Week, we started gradually opening it to Cloudflare customers that requested access through the wait list; starting with just a few users per week and gradually ramping up access as we found and fixed edge cases.</p><p>Most recently, with users wanting to set up Email Routing for more of their domains and with some of <a href="https://support.google.com/a/answer/2855120">G Suite legacy</a> users looking for an alternative to starting a subscription, we have been onboarding tens of thousands of new zones <i>every day</i> into the closed beta. We’re loving the adoption and the feedback!</p><p>Needless to say that with hundreds of thousands of zones from around the world in the Email Routing beta we uncovered many new use cases and a few limitations, <a href="https://developers.cloudflare.com/email-routing/known-limitations">a couple of which</a> still exist. But these few months of closed beta gave us the confidence to move to the next stage - open beta - which now makes <b>Cloudflare Email Routing available to everyone, including free zones</b>.</p><p>Thank you to all of you that were part of the closed beta and provided feedback. We couldn’t be more excited to welcome everyone else!</p><p>Check out this blog post for more details on <a href="/migrating-to-cloudflare-email-routing/">how to migrate to Cloudflare Email Routing</a>. And if you have any questions or feedback about this product, please come see us in the <a href="https://community.cloudflare.com/new-topic?category=Feedback/Previews%20%26%20Betas&amp;tags=email">Cloudflare Community</a> and the <a href="https://discord.gg/cloudflaredev">Cloudflare Discord</a>.</p><p>___</p><p><sup>*</sup>we do have a few limitations, such as not currently supporting Internationalized Domain Names (IDNs) and subdomains. Known limitations are listed in the documentation.</p> ]]></content:encoded>
            <category><![CDATA[Email Routing]]></category>
            <category><![CDATA[Email]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Free]]></category>
            <guid isPermaLink="false">25BRZuxuAwucLlXzvr8fVL</guid>
            <dc:creator>João Sousa Botto</dc:creator>
        </item>
        <item>
            <title><![CDATA[Durable Objects, now in Open Beta]]></title>
            <link>https://blog.cloudflare.com/durable-objects-open-beta/</link>
            <pubDate>Wed, 31 Mar 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ As of today, Durable Objects beta access is available to anyone with a Cloudflare Workers® subscription. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Back in September, we <a href="/introducing-workers-durable-objects/">announced</a> Durable Objects - a new paradigm for stateful serverless.</p><p>Since then, we’ve seen incredible demand and countless unlocked opportunities on our platform. We’ve watched large enterprises build applications from complex API features to real-time games in a matter of days from inception to launch. We’ve heard from developers that Durable Objects lets them spend time they used to waste configuring and deploying databases on building features for their apps. More than anything, we’ve heard that you want to start building with Durable Objects now.</p><p>As of today, Durable Objects beta access is available to anyone with a Cloudflare Workers® subscription - you can enable them now in the <a href="https://dash.cloudflare.com/">dashboard</a> by navigating to “Workers” and then “Durable Objects”. You can also upgrade to the <a href="https://github.com/cloudflare/wrangler/releases/tag/v1.15.0-custom-builds-rc.2">latest version of Wrangler</a> to deploy Durable Objects!</p><p>Durable Objects are still in beta and are being made available to you for testing purposes. Storage is capped per-account at 10 GB of data, and there is no associated SLA for Object availability or durability.</p><p><strong><a href="https://dash.cloudflare.com">Enable beta access now »</a></strong></p>
    <div>
      <h3>What are Durable Objects?</h3>
      <a href="#what-are-durable-objects">
        
      </a>
    </div>
    <p>Durable Objects provide two things: coordination across multiple Workers and strongly consistent edge storage.</p><p>Normally Cloudflare’s network executes a Worker wherever the client’s network request is terminated. This means there can be many instances of your Worker running at a given time all over the world, shown below.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7KDw6tGDQlvRrae4PS7AGM/eb4cb08f52b3a5f989531ac06214894c/image3-54.png" />
            
            </figure><p>By contrast, a Durable Object is defined by a JavaScript class and an ID. There is only ever one instance of a Durable Object with a given ID running anywhere in the world. All Workers making subrequests for the Durable Object with that ID are routed to the same instance - letting them coordinate across multiple requests. The Durable Object instance can then make requests to downstream APIs and store data with our strongly consistent storage API.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5HLQ06eTIRyAl30bPTlVov/975cd2e8aa2360c4eab7e4c5a6d440ef/image1-65.png" />
            
            </figure><p>In this example shown above, we’ve chosen our application’s user ID as the Durable Object’s ID.  When a Worker needs access to a specific user’s data, they can contact the Object with that user’s ID.  That Object can then handle API calls and data access specific to that individual user.</p><p>Remember that Durable Objects scale incredibly well across multiple Object IDs, but that each Object itself is backed by a single-thread. You should be careful to choose an ID for your Objects that minimizes the number of requests processed by a single object.  In our example above, if our user API grew to be too complicated, we might decide to have a separate ID for each combination of a user ID and an API endpoint to host in a single object.</p><p>For more on Durable Objects, see the <a href="https://developers.cloudflare.com/workers/learning/using-durable-objects">docs</a> and the announcement <a href="/introducing-workers-durable-objects/">blog</a>.</p>
    <div>
      <h3>Pricing</h3>
      <a href="#pricing">
        
      </a>
    </div>
    <p>While there’s no charge to use Durable Objects during the beta period, we want to share pricing, so you can build your applications with confidence.</p><p>When you use Durable Objects, you are billed for the compute time your Object uses as well as the storage API operations your Object performs.</p><p>Durable Objects are significantly cheaper than comparable compute and storage offerings from the other major cloud providers.</p><p>As announced on the Workers Unbound <a href="/introducing-workers-unbound/">blog</a>, Durable Objects bills the standard Workers' platform rates for long-running compute time.</p><table><tr><td><p>
</p></td><td><p><b>Compute</b></p></td><td><p></p></td></tr><tr><td><p></p></td><td><p>Durable Objects</p></td><td><p>AWS Lambda</p></td></tr><tr><td><p>Price per request</p></td><td><p>\$0.15 / MM</p></td><td><p>\$0.20-0.28 / MM</p></td></tr><tr><td><p>Compute ($ per MM GB-sec)</p></td><td><p>\$12.50</p></td><td><p>\$16.67 - \$22.92 (depending on geo)</p></td></tr><tr><td><p>Data Transfer</p></td><td><p>\$0.09 / GB</p></td><td><p>\$0.09/GB - \$0.15/GB (depending on geo)</p></td></tr></table><p>*Based on pricing disclosed on aws.amazon.com/lambda/pricing as of March 16, 2021. AWS’ published duration pricing is based on 1 GB-sec, which has been multiplied by one million on this table for readability. AWS price ranges reflect different regional pricing. All prices rounded to the nearest two decimal places. Data Transfer for AWS is based on Data Transfer OUT From Amazon EC2 to Internet above 1 GB / month, for up to 9.999 TB / month.</p><p>Durable Objects charges per storage operation for reads, writes and deletes and per GB-Month for data stored. Operations are metered in 4 KB increments - for example, an 8 KB read or write would be billed as two operations. When compared to AWS DynamoDB, Durable Objects charge less for every type of operation, and depending on the size of your operations, your savings could be significant. All price comparisons we’re showing below are based on single-region, strongly consistent DynamoDB storage. AWS charges extra for multi-region and transactionally consistent storage, which is already included for Durable Objects. If you use these features in DynamoDB, your savings will be even greater.</p><table><tr><td><p>
</p></td><td><p><b>Storage</b></p></td><td><p></p></td></tr><tr><td><p></p></td><td><p>Durable Objects</p></td><td><p>AWS DynamoDB</p></td></tr><tr><td><p>Price per MM read request</p></td><td><p>\$0.20 / MM / 4 KB</p></td><td><p>\$0.25 - \$0.375 / MM / 4 KB</p></td></tr><tr><td><p>Price per MM write request</p></td><td><p>\$1.00 / MM / 4 KB</p></td><td><p>\$1.25 - \$1.88 / MM / 1 KB</p></td></tr><tr><td><p>Price per MM delete request</p></td><td><p>\$1.00 / MM regardless of size</p></td><td><p>\$1.25 - \$1.88 / MM / 1 KB</p></td></tr><tr><td><p>Price per GB stored data</p></td><td><p>\$0.20 / GB</p></td><td><p>\$0.25 / GB</p></td></tr></table><p>*Based on pricing disclosed on aws.amazon.com/dynamodb/pricing/on-demand/ as of March 16, 2021. AWS price ranges reflect different regional pricing. All prices rounded to the nearest two decimal places.</p><p>We chose to meter our requests in 4 KB increments across the board to provide the lowest prices with the greatest flexibility. Deletes do not have a size limit.</p><p>We’ve seen that the vast majority of requests are actually smaller than 4 KB in size - Workers KV, our global, eventually consistent data store, has a median value size in the low single KB range.</p>
    <div>
      <h3>Giving developers more for less</h3>
      <a href="#giving-developers-more-for-less">
        
      </a>
    </div>
    <p>Not only are Durable Objects less expensive, they have a unique design that lets you do more than a traditional database layer.</p><p>Each Durable Object runs custom code that you write. After your Durable Object makes a request to a downstream API or to our storage API, the value can be cached in-memory for no-cost, low latency lookups.</p><p>Unlike major cloud-provider databases, Durable Objects are replicated to multiple distinct regions by default for high availability with no additional cost. With other cloud providers, this feature generally drives up costs - not to mention the increased complexity of self-managing multiple regions.</p><p>Durable Objects also provide strong consistency across operations by default. While many systems charge more for higher levels of consistency, running transactionally consistent storage from a Durable Object comes at no additional charge.</p>
    <div>
      <h3>Building together</h3>
      <a href="#building-together">
        
      </a>
    </div>
    <p>Since announcing Durable Objects, we’ve continued to add features to the platform, including:</p><ul><li><p>Smarter initial placement for user-named Objects, for lower latency access after initial creation.</p></li><li><p><a href="/supporting-jurisdictional-restrictions-for-durable-objects/">Jurisdictional Restrictions</a>, allowing developers to restrict their Durable Objects to only run and store data in specific regions. This helps with compliance with data localization obligations.</p></li><li><p>Wrangler support for uploading Durable Objects.</p></li><li><p>Platform stability and increased capacity.</p></li></ul><p>As we continue to add to the platform, we’re excited to see what you’re building as well. Come hang out in <a href="https://discord.gg/TGG8Fw4zKP">our Discord</a> to ask questions and share what you’re building on Durable Objects!</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div>
<p></p><p></p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Durable Objects]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Wrangler]]></category>
            <guid isPermaLink="false">4WhPejVq17N90XRDJfKiig</guid>
            <dc:creator>Greg McKeon</dc:creator>
        </item>
        <item>
            <title><![CDATA[Announcing the Beta for WARP for macOS and Windows]]></title>
            <link>https://blog.cloudflare.com/announcing-the-beta-for-warp-for-macos-and-windows/</link>
            <pubDate>Wed, 01 Apr 2020 13:00:00 GMT</pubDate>
            <description><![CDATA[ While WARP started as an option within the 1.1.1.1 app, it's really a technology that can benefit any device connected to the Internet. In fact, one of the most common requests we've gotten over the last year is support for WARP for macOS and Windows. Today we're announcing exactly that. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Last April 1 we announced WARP — an option within the 1.1.1.1 iOS and Android app to secure and speed up Internet connections. Today, millions of users have secured their mobile Internet connections with WARP.</p><p>While WARP started as an option within the 1.1.1.1 app, it's really a technology that can benefit any device connected to the Internet. In fact, one of the most common requests we've gotten over the last year is support for WARP for macOS and Windows. Today we're announcing exactly that: the start of the WARP beta for macOS and Windows.</p>
    <div>
      <h3>What's The Same: Fast, Secure, and Free</h3>
      <a href="#whats-the-same-fast-secure-and-free">
        
      </a>
    </div>
    <p>We always wanted to build a WARP client for macOS and Windows. We started with mobile because it was the hardest challenge. And it turned out to be a lot harder than we anticipated. While we announced the beta of 1.1.1.1 with WARP on April 1, 2019 it took us until late September before we were able to open it up to general availability. We don't expect the wait for macOS and Windows WARP to be nearly as long.</p><p>The WARP client for macOS and Windows relies on the same fast, efficient Wireguard protocol to secure Internet connections and keep them safe from being spied on by your ISP. Also, just like WARP on the 1.1.1.1 mobile app, the basic service will be free on macOS and Windows.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2f9xd6DKnT1pbycvX25WmS/ecf9495a96e32589fb1fc99589b4f8f7/warp-desktop.png" />
            
            </figure>
    <div>
      <h3>WARP+ Gets You There Faster</h3>
      <a href="#warp-gets-you-there-faster">
        
      </a>
    </div>
    <p>We plan to add WARP+ support in the coming months to allow you to leverage Cloudflare's <a href="https://www.cloudflare.com/products/argo-smart-routing/">Argo</a> network for even faster Internet performance. We will provide a plan option for existing WARP+ subscribers to add additional devices at a discount. In the meantime, existing WARP+ users will be among the first to be invited to try WARP for macOS and Windows. If you are a WARP+ subscriber, check your 1.1.1.1 app over the coming weeks for a link to an invitation to try the new WARP for macOS and Windows clients.</p><p>If you're not a WARP+ subscriber, you can add yourself to the waitlist by signing up on the page linked below. We'll email as soon as it's ready for you to try.</p><p><a href="https://one.one.one.one">https://one.one.one.one</a></p>
    <div>
      <h3>Linux Support</h3>
      <a href="#linux-support">
        
      </a>
    </div>
    <p>We haven't forgotten about Linux. About 10% of Cloudflare's employees run Linux on their desktops. As soon as we get the macOS and Windows clients out we’ll turn our attention to building a WARP client for Linux.</p><p>Thank you to everyone who helped us make WARP fast, efficient, and reliable on mobile. It's incredible how far it's come over the last year. If you tried it early in the beta last year but aren't using it now, I encourage you to give it another try. We're looking forward to bringing WARP speed and security to even more devices.</p> ]]></content:encoded>
            <category><![CDATA[WARP]]></category>
            <category><![CDATA[1.1.1.1]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Privacy]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Resolver]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">1izZY0mpIxETwEJk40hMwJ</guid>
            <dc:creator>Matthew Prince</dc:creator>
        </item>
        <item>
            <title><![CDATA[The QUICening]]></title>
            <link>https://blog.cloudflare.com/the-quicening/</link>
            <pubDate>Tue, 25 Sep 2018 12:00:00 GMT</pubDate>
            <description><![CDATA[ Six o’clock already, I was just in the middle of a dream, now I’m up, awake, looking at my Twitter stream. As I do that the Twitter app is making multiple API calls over HTTPS to Twitter’s servers somewhere on the Internet. ]]></description>
            <content:encoded><![CDATA[ <p>Six o’clock already, I was just in the middle of a dream, now I’m up, awake, looking at my Twitter stream. As I do that the Twitter app is making multiple API calls over HTTPS to Twitter’s servers somewhere on the Internet.</p><p>Those HTTPS connections are running over TCP via my home WiFi and broadband connection. All’s well inside the house, the WiFi connection is interference free thanks to my eero system, the broadband connection is stable and so there’s no packet loss, and my broadband provider’s connection to Twitter’s servers is also loss free.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2TYEDkSskxA3liOv6VxN4K/ba0ff5d2cd688fddfbe31f18193bb9cb/happy-home-.svg" />
            
            </figure><p>Those are the perfect conditions for HTTPS running over TCP. Not a packet dropped, not a bit of jitter, no congestion. It’s even the perfect conditions for HTTP/2 where multiple streams of requests and responses are being sent from my phone to websites and APIs as I boot my morning. Unlike HTTP/1.1, HTTP/2 is able to use a single TCP connection for multiple, simultaneously in flight requests. That has a significant speed advantage over the old way (one request after another per TCP connection) when conditions are good.</p><p>But I have to catch an early train, got to be to work by nine, so I step out of the front door and my phone silently and smoothly switches from my home WiFi to 4G. All’s not well inside the phone’s apps though. The TCP connections in use between Chrome and apps, and websites and APIs are suddenly silent. Those HTTPS connections are in trouble and about to fail; errors are going to occur deep inside apps. I’m going to see sluggish response from my phone.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2kBQqHqSUvvn7Ucnc0lxCs/e4eca9863819afc21b67e57b8d616980/dropped-tcp-.svg" />
            
            </figure><p>The IP address associated with my phone has abruptly changed as I go from home to roam. TCP connections either stall or get dropped resulting in a weird delay while internal timers inform apps that connections have disappeared or as connections are re-established. It’s irritating, because it takes me so long just to figure out what I'm gonna wear, and now I’m waiting for an app that worked fine moments ago.</p><p>The same thing will happen multiple times on my trip as I jump around the cell towers and service providers along the route. It might be tempting to blame it on the train, but it’s really that the Internet was never meant to work this way. We weren’t meant to be carrying around pocket supercomputers that roam across lossy, noisy networks all the while trying to remain productive while complaining about sub-second delays in app response time.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2dsnywDKpe0un0wFXB7T7Y/96eaf483e734328bd6d077bee917d545/full-commute.svg" />
            
            </figure><p>One proposed solution to these problems is QUIC: a new way to send packets across the Internet that takes into account what a messy place the Internet really is. A place where people don’t stand still and use the same IP address all the time (the horror!), a place where packets get lost because of radio reflections off concrete buildings (how awful!), a place with no Waze (how terrible!) where congestion comes and goes without a live map.</p><p>QUIC tries to make an HTTPS connection between a computer (phone) and server work reliably despite the poor conditions, it does this with a collection of technologies.</p><p>The first is UDP to replace TCP. UDP is widely used for fire-and-forget protocols where packets are sent but their arrival or ordering is not guaranteed (TCP provides the opposite: it guarantees arrival order and delivery but at a cost). Because UDP doesn’t have TCP’s guarantees it allows developers to innovate new protocols that do guarantee delivery and ordering (on top of UDP) that can incorporate features that TCP lacks.</p><p>One such feature is end-to-end encryption. All QUIC connections are fully encrypted. Another proposed feature is forward-error correction or FEC. When NASA’s Deep Space Network talks to the Voyager 2 spacecraft (which recently left our solar system) it transmits messages that become garbled crossing 17.6 billion km of space (that’s about 11 billion miles). Voyager 2 can’t send back the equivalent of “Say again?” when it receives a garbled message so the messages sent to Voyager 2 contain error-correcting codes that allow it to reconstruct the message from the mess.</p><p>Similarly, QUIC plans to incorporate error-correcting codes that allow missing data to be reconstructed. Although an app or server can send the “Say again?” message, it’s faster if an error-correcting code stops that being needed. The result is snappy apps and websites even in difficult Internet conditions.</p><p>QUIC also solves the HTTP/2 HoL problem. HoL is head of line blocking: because HTTP/2 sits on top of TCP and TCP guarantees delivery order if a packet gets lost the entire TCP connection has to wait while the missing packet is retransmitted. That’s OK if only one stream of data is passing over the TCP connection, but for efficiency it’s better to have multiple streams per connection. Sadly that means all streams wait when a packet gets lost. QUIC solves that because it doesn’t rely on TCP for delivery and ordering and can make an intelligent decision about which streams need to wait and which can continue when a packet goes astray.</p><p>Finally, one of the slower parts of a standard HTTP/2 over TCP connection is the very beginning. When the app or browser makes a connection there’s an initial handshake at the TCP level followed by a handshake to establish encryption. Over a high latency connection (say on a mobile phone on 3G) that creates a noticeable delay. Since QUIC controls all aspects of the connect it merges together connection and encryption into a single handshake.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2dL6kbAv4uFdYpp7WcUTDM/ab0fb0209a086ae42b1660e90f061aa6/full-commute-copy.svg" />
            
            </figure><p>Hopefully, this blog post has helped you see the operation of HTTPS on the real, messy, roaming Internet in a different light. Nick’s more <a href="/head-start-with-quic/">technical blog</a> will tell you how to test out QUIC for yourself. Visit <a href="https://cloudflare-quic.com">https://cloudflare-quic.com</a> to get started.</p><p>If you want to join the early access program for QUIC from Cloudflare you’ll find a button on the <a href="https://dash.cloudflare.com?zone=network">Network</a> tab in the Cloudflare Dashboard.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/JonvDzU5JUlYCBTI1pYNV/687c1d86a678a13738d608ac6a925e7e/image4-1.png" />
            
            </figure><p>As we did with TLS 1.3 we’ll be working closely with IETF as QUIC develops and be continually rolling out the latest versions of the standard as they are created. We look forward to the day when all your connections are QUIC!</p><p><a href="/subscribe/"><i>Subscribe to the blog</i></a><i> for daily updates on all our Birthday Week announcements.</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4qBoeuxUM8tPVqGrVUgV1c/f0cb67075597e6c7807afbbc0a807c15/Cloudflare-Birthday-Week-7.png" />
            
            </figure> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[QUIC]]></category>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Beta]]></category>
            <guid isPermaLink="false">1j6UWopUfEiaG6T8LTE0Wm</guid>
            <dc:creator>John Graham-Cumming</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cache API for Cloudflare Workers is now in Beta!]]></title>
            <link>https://blog.cloudflare.com/cache-api-for-cloudflare-workers-is-now-in-beta/</link>
            <pubDate>Fri, 14 Sep 2018 14:26:51 GMT</pubDate>
            <description><![CDATA[ In October of last year we announced the launch of Cloudflare Workers. Workers allow you to run JavaScript from 150+ of Cloudflare’s data centers. This means that from the moment a request hits the Cloudflare network, you have full control over its destiny.  ]]></description>
            <content:encoded><![CDATA[ <p>In October of last year we announced the launch of Cloudflare Workers. Workers allows you to run JavaScript from 150+ of Cloudflare’s data centers. This means that from the moment a request hits the Cloudflare network, you have full control over its destiny. One of the benefits of using Workers in combination with Cloudflare’s cache is that Workers allow you to have programmatic, and thus very granular control over the Cloudflare cache.</p><p>You can choose what to cache, how long to cache it for, the source it should be cached from, and you can even modify the cached result after it is retrieved from the cache.</p><p>We have seen many of our existing customers use Workers to enhance their usage of the Cloudflare cache, and we have seen many new customers join Cloudflare to take advantage of these unique benefits.</p>
    <div>
      <h2>(Re-)Introducing the Cache API</h2>
      <a href="#re-introducing-the-cache-api">
        
      </a>
    </div>
    <p>You can always have more control, so today we are announcing support for the Cache API! As some of you may know, Cloudflare Workers are built against the existing Service Worker APIs. One of the reasons we originally chose to model Cloudflare Workers after Service Workers was due to the existing familiarity and audience of Service Workers, as well as documentation.</p><p>We’ve received overwhelming feedback and evidence from customers that there are many uses for supporting an implementation modeled after the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Service Workers Cache API</a>. Today we are opening up a beta to offer our customers the ability to explicitly read and write items in our cache from within their Workers. The capability to do this will allow them to implement virtually any cache semantics they might need.</p>
    <div>
      <h2>So what can you do with the Cache API?</h2>
      <a href="#so-what-can-you-do-with-the-cache-api">
        
      </a>
    </div>
    
    <div>
      <h4>Cache Worker output</h4>
      <a href="#cache-worker-output">
        
      </a>
    </div>
    <p>Workers allow you to fully customize and manipulate a response before it is sent back to the user. Whether you are modifying the response from your origin, or assembling a response based on calls to multiple APIs, you can use the Cache API to cache the output and serve it directly on future similar requests.</p>
            <pre><code>async function handleRequest(event) {
    let cache = caches.default
    let response = await cache.match(event.request)
        
    if (!response) {
      response = doSuperComputationallyHeavyThing()
      event.waitUntil(cache.put(event.request, response.clone()))
    }
          
    return  response
}</code></pre>
            
    <div>
      <h4>Cache POST requests</h4>
      <a href="#cache-post-requests">
        
      </a>
    </div>
    <p>Cloudflare ordinarily doesn’t cache POST requests because they can change state on a customer’s origin. However, some APIs and frameworks like GraphQL make every call a POST request, including those that do not change state. For these APIs it’s important to enable caching to speed things up.</p>
            <pre><code>async function handleRequest(event) {
    let cache = caches.default
    let response = await cache.match(event.request)
    
    if (!response){
      response = await fetch(event.request)
      if (response.ok) {
        event.waitUntil(cache.put(event.request, response.clone()))
      }
    }
          
    return response
}</code></pre>
            
    <div>
      <h4>Set Cache-Tag headers from a Worker (Enterprise only)</h4>
      <a href="#set-cache-tag-headers-from-a-worker-enterprise-only">
        
      </a>
    </div>
    <p>One of the ways to purge assets within the Cloudflare cache is using <a href="https://support.cloudflare.com/hc/en-us/articles/206596608-How-to-Purge-Cache-Using-Cache-Tags-Enterprise-only-">Cache-Tags</a>. Cache-Tags allow you to group assets by category, version, etc and purge them all at once using a single API call. Cache-Tags were traditionally set using an origin Cache-Tag header. Some backends, however, don’t allow you control over the response headers that are sent, which makes it challenging to set Cache-Tags at the origin. With the Cache API, you can set Cache-Tags directly from a Worker, without having to modify any code at your origin.</p>
            <pre><code>addEventListener('fetch', event =&gt; {
 event.respondWith(handleRequest(event))
})

/**
* Fetch a request and add a tag
* @param {Request} request
*/
async function handleRequest(event) {
  let request = event.request
  let cache = caches.default
  let response = await cache.match(request)
  if (!response) {
    response = await fetch(request)
    if (response.ok) {
      response = new Response(response.body, response)
      response.headers.append('Cache-Tag', 'apple')
      event.waitUntil(cache.put(request, response.clone()))
    }
  }
  return response
}</code></pre>
            <p>These are just simple examples to get started, and we’ll be publishing many more in the coming weeks. We’re excited to see what everyone builds with the Cache API!</p>
    <div>
      <h2>How to get access</h2>
      <a href="#how-to-get-access">
        
      </a>
    </div>
    <p>We are super excited for you to start playing with the Cache API. <b>You can find </b><a href="https://developers.cloudflare.com/workers/reference/cache-api/"><b>documentation here</b></a><b>, and feel free to start using the APIs.</b></p><p>We want to hear about all the cool ways you are using this. We also want to hear if you are having trouble or running into any issues.</p><p>Please feel free to contact us at <a>cacheapibeta@cloudflare.com</a></p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Cache]]></category>
            <category><![CDATA[API]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">0Yke0iYfO3PMnWVroRpm</guid>
            <dc:creator>Rita Kozlov</dc:creator>
        </item>
        <item>
            <title><![CDATA[Extend your security view from the data center to the edge]]></title>
            <link>https://blog.cloudflare.com/extend-your-security-view-from-the-data-center-to-the-edge/</link>
            <pubDate>Tue, 03 Apr 2018 16:00:00 GMT</pubDate>
            <description><![CDATA[ How great would it be to have a dashboard with a holistic view of threats, malicious server activity, vulnerabilities, sensitive data access levels and a daily scan of resources across all of your applications and services? Now you can.  ]]></description>
            <content:encoded><![CDATA[ <p><i>NOTE: This feature is no longer supported, but the </i><a href="https://www.cloudflare.com/application-services/products/securitycenter/"><b><i>Cloudflare Security Center</i></b></a><i> may offer some solutions for your needs.</i></p><hr /><p>How great would it be to have a dashboard with a holistic view of threats, malicious server activity, vulnerabilities, sensitive data access levels and a daily scan of resources across all of your applications and services? Now you can.</p><p>Cloudflare is thrilled to announce its integration with <a href="http://cloud.google.com/security-command-center/">Cloud Security Command Center</a> (Cloud SCC) for Google Cloud Platform: A security and data risk platform helping enterprises gather data, identify threats, and act on them before they result in business damage or loss.</p><p>The advantage of the Cloud SCC solution is that it surfaces insights from both the Google Cloud Platform, as well as Cloudflare’s edge, in a unified dashboard.</p>
    <div>
      <h4>What Cloudflare data is visible within the Cloud SCC dashboard?</h4>
      <a href="#what-cloudflare-data-is-visible-within-the-cloud-scc-dashboard">
        
      </a>
    </div>
    <p>Through Cloudflare’s API endpoints, data is pushed to Google’s Cloud SCC dashboard and domain name information mapped to the appropriate Google Cloud asset. Cloudflare’s branded card in the Cloud SCC dashboard is automatically populated with a summary of top theat origins, top types of threats, and latest Web Application Firewall (WAF) events.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1hveZOziqaIW73xHMVMflh/917c17d9c4658a6614129406f98abeb8/google-cloud-security-command-center-1.png" />
            
            </figure><p>To view a full list of Cloudflare events, click on the Cloudflare card in Cloud SCC and it will take you to a “Cloudflare Findings” page. From there, you can select a time period of visible events. The “Findings” table shows what type of event, when it happened, and which asset (website, application, or API) was involved.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/581jGoYHslbvAymW9XI8YW/7ff3178a389540818636a6a7c08bdb3c/CSCC-CF-page-1.png" />
            
            </figure><p>Every Cloudflare finding offers detailed information, including: country source, IP source of original request, requested Hostname, requested URI, User Agent, protocol type, method (GET/POST), action taken, rule triggered, and more.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5jiOJsvuqIppc8MQpphb2u/b853d6b80dbfc1624788d22040e7e891/CSCC-event-details-1.png" />
            
            </figure><p>Cloudflare’s findings in the Cloud SCC dashboard highlight which requests were blocked or challenged, and why. To take action on this data, you’ll need to login to your Cloudflare dashboard (link available directly from within Cloud SCC) or configure changes through the Cloudflare API.</p> ]]></content:encoded>
            <category><![CDATA[Google Cloud]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Beta]]></category>
            <guid isPermaLink="false">40vKNlKRkXhJVJDDFSLqL5</guid>
            <dc:creator>Kamilla Amirova</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Workers is now on Open Beta]]></title>
            <link>https://blog.cloudflare.com/cloudflare-workers-is-now-on-open-beta/</link>
            <pubDate>Thu, 01 Feb 2018 17:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare Workers Beta is now open!

Cloudflare Workers lets you run JavaScript on Cloudflare’s edge, deploying globally to over 120+ data centers around the world in less than 30 seconds. Your code can intercept and modify any request made to your website. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare Workers Beta is now open!</p><p><a href="/introducing-cloudflare-workers/">Cloudflare Workers</a> lets you run JavaScript on Cloudflare’s edge, deploying globally to over 120+ data centers around the world in less than 30 seconds. Your code can intercept and modify any request made to your website, make outbound requests to any URL on the Internet, and replace much of what you might need to configure your CDN to do today. Even better, it will do this from all our edge locations around the world, closer to many of your users than your origin servers can ever be. You will have a fully functional Turing-complete language in your fingertips which will allow you to build powerful applications on the edge. The only limit is your imagination.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6AaPlK00VtBiP9qpWLzvXm/1359c7153f10c4cc8cb355aef8cec143/Screenshot-2018-02-01-09.20.49_preview.png" />
            
            </figure><p>To get started:</p><ul><li><p>Sign in to your account on <a href="https://cloudflare.com/">cloudflare.com</a>.</p></li><li><p>Visit the Workers tab.</p></li><li><p>Launch the editor.</p></li><li><p>Write <a href="https://developers.cloudflare.com/workers/">some code</a> and save it.</p></li><li><p>Go to the routes tab and prescribe on what requests you want to run Workers for</p></li></ul><p>That’s it!</p><p>You can start by writing a simple <a href="https://developers.cloudflare.com/workers/writing-workers/">‘hello world’</a> script, but chances are that you are going write Workers that are more complicated. You can check out our page with recipes to:</p><ul><li><p><a href="https://developers.cloudflare.com/workers/recipes/a-b-testing/">Run A/B tests on the edge</a></p></li><li><p><a href="https://developers.cloudflare.com/workers/recipes/conditional-routing/">Perform conditional routing on the edge</a></p></li><li><p><a href="https://developers.cloudflare.com/workers/recipes/return-403/">Filter requests based on headers/IP address/URL parameters</a></p></li><li><p><a href="https://developers.cloudflare.com/workers/recipes/aggregating-multiple-requests/">Aggregate responses from multiple endpoints and send it back to the client</a></p></li><li><p><a href="https://developers.cloudflare.com/workers/recipes/hotlink-protection/">Protect your assets against hot-linking</a></p></li></ul><p>We will keep adding new recipes to our <a href="https://developers.cloudflare.com/workers/">docs</a>. All the recipes are in a <a href="https://github.com/cloudflare/worker-examples">Github repository</a>; if you'd like to add your own, send us a pull request.</p><p>Check out the <a href="https://community.cloudflare.com/tags/workers">Workers Community</a> to see what other people are building. Please share your feedback and questions!</p><p>Cloudflare Workers is completely free during the open beta. We do intend on charging for Workers, but we will notify you of our plans at least thirty days before any changes are made.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">5GaYWUU2oc9ua5FKW0Z9Bd</guid>
            <dc:creator>Irtefa</dc:creator>
        </item>
        <item>
            <title><![CDATA[Want to try Warp? We just enabled the beta for you]]></title>
            <link>https://blog.cloudflare.com/get-started-with-warp/</link>
            <pubDate>Thu, 23 Nov 2017 02:00:00 GMT</pubDate>
            <description><![CDATA[ Tomorrow is Thanksgiving in the United States. It’s a holiday for getting together with family characterized by turkey dinner and whatever it is that happens in American football. ]]></description>
            <content:encoded><![CDATA[ <p><i>NOTE: Prior to launch, this product was renamed Argo Tunnel. Read more in the </i><a href="/argo-tunnel/"><i>launch announcement</i></a><i>.</i></p><p>Tomorrow is Thanksgiving in the United States. It’s a holiday for getting together with family characterized by turkey dinner and whatever it is that happens in American football. While celebrating with family is great, if you use a computer for your main line of work, sometimes the conversation turns to how to setup the home wifi or can Russia really use Facebook to hack the US election. Just in case you’re a geek who finds yourself in that position this week, we wanted to give you something to play with. To that end, we’re opening the <a href="http://warp.cloudflare.com">Warp</a> beta to all Cloudflare users. Feel free to tell your family there’s been an important technical development you need to attend to immediately and enjoy!</p>
    <div>
      <h3>Hello Warp! Getting Started</h3>
      <a href="#hello-warp-getting-started">
        
      </a>
    </div>
    <p>Warp allows you to expose a locally running web server to the internet without having to open up ports in the firewall or even needing a public IP address. Warp connects a web server directly to the Cloudflare network where Cloudflare acts as your web server’s network gateway. Every request reaching your origin must travel to the Cloudflare network where you can apply rate limits, access policies and authentication before the request hits your origin. Plus, because your origin is never exposed directly to the internet, attackers can’t bypass protections to reach your origin.</p><p>Warp is really easy to get started with. If you use homebrew (we also have <a href="https://warp.cloudflare.com/downloads/">packages for Linux and Windows</a>) you can do:</p>
            <pre><code>$ brew install cloudflare/cloudflare/warp
$ cloudflare-warp login
$ cloudflare-warp --hostname warp.example.com --hello-world</code></pre>
            <p>In this example, replace example.com with the domain you chose at the login command. The warp.example.com subdomain doesn’t need to exist yet in DNS, Warp will automatically add it for you.</p><p>That last command spins up a web server on your machine serving the hello warp world webpage. Then Warp starts up an encrypted virtual tunnel from that web server to the Cloudflare edge. When you visit warp.example.com (or whatever domain you chose), your request first hits a Cloudflare data center, then is routed back to your locally running hello world web server on your machine.</p><p>If someone far away visits warp.example.com, they connect to the Cloudflare data center closest to them, and then are routed to the Cloudflare data center your Warp instance is connected to, and then over the Warp tunnel back to your web server. If you want to make that connection between Cloudflare data centers really fast, <a href="https://www.cloudflare.com/a/traffic/">enable Argo</a>, which bypasses internet latencies and network congestions on optimized routes linking the Cloudflare data centers.</p><p>To point Warp at a real web server you are running instead of the hello world web server, replace the hello-world flag with the location of your locally running server:</p>
            <pre><code>$ cloudflare-warp --hostname warp.example.com http://localhost:8080</code></pre>
            
    <div>
      <h3>Using Warp for Load Balancing</h3>
      <a href="#using-warp-for-load-balancing">
        
      </a>
    </div>
    <p>Let’s say you have multiple instances of your application running and you want to balance load between them or always route to the closest one for any given visitor. As you spin up Warp, you can register the origins behind Warp to a load balancer. For example, I can run this on 2 different servers (e.g. one on a container in ECS and one on a container in GKE):</p>
            <pre><code>$ cloudflare-warp --hostname warp.example.com --lb-pool origin-pool-1 http://localhost:8080</code></pre>
            <p>And connections to warp.example.com will be routed seamlessly between the two servers. You can do this with an existing origin pool or a brand new one. If you visit the <a href="https://www.cloudflare.com/a/traffic/">load balancing dashboard</a> you will see the new pool created with your origins in it, or the origins added to an existing pool.</p><p>You can also <a href="https://www.cloudflare.com/a/traffic/">set up a health check</a> so that if one goes offline, it automatically gets deregistered from the load balancer pool and requests are only routed to the online pools.</p>
    <div>
      <h3>Automating Warp with Docker</h3>
      <a href="#automating-warp-with-docker">
        
      </a>
    </div>
    <p>You can add Warp to your Dockerfile so that as containers spin up or as you autoscale, containers automatically register themselves with Warp to connect to Cloudflare. This acts as a kind of service discovery.</p><p>A reference <a href="https://warp.cloudflare.com/docs/docker/">Dockerfile is available here</a>.</p>
    <div>
      <h3>Requiring User Authentication</h3>
      <a href="#requiring-user-authentication">
        
      </a>
    </div>
    <p>If you use Warp to expose dashboards, staging sites and other internal tools to the internet that you don’t want to be available for everyone, we have a new product in beta that allows you to quickly put up a login page in front of your Warp tunnel.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/24ItxFhwmPF9EcZc1qHE45/9028a584093a8597833b93318c7cc256/1Screen-Shot-2017-11-08-at-9.00.33-AM.png" />
            
            </figure><p>To get started, go to the <a href="https://www.cloudflare.com/a/access/">Access tab in the Cloudflare dashboard</a>.</p><p>There you can define which users should be able to login to use your applications. For example, if I wanted to limit access to warp.example.com to just people who work at Cloudflare, I can do:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/sGHDnCCZoCGhGRqM1GICF/ae667903ba8524e99308853be795b13a/Screen-Shot-2017-11-22-at-11.24.51-AM.png" />
            
            </figure>
    <div>
      <h3>Enjoy!</h3>
      <a href="#enjoy">
        
      </a>
    </div>
    <p>Enjoy the Warp beta! (But don't wander too deep into the Warp tunnel and forget to enjoy time with your family.) The whole <a href="https://community.cloudflare.com/t/cloudflare-warp-beta/5656">Warp team is following this thread</a> for comments, ideas, feedback and show and tell. We’re excited to see what you build.</p> ]]></content:encoded>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Argo Smart Routing]]></category>
            <category><![CDATA[Cloudflare Tunnel]]></category>
            <guid isPermaLink="false">4HMPtPqGBoeFZ65Yv3Tnf3</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
        <item>
            <title><![CDATA[NCC Group's Cryptography Services audits our Go TLS 1.3 stack]]></title>
            <link>https://blog.cloudflare.com/ncc-groups-cryptography-services-audit-of-tls-1-3/</link>
            <pubDate>Wed, 15 Feb 2017 00:49:19 GMT</pubDate>
            <description><![CDATA[ The Cloudflare TLS 1.3 beta is run by a Go implementation of the protocol based on the Go standard library, crypto/tls.  ]]></description>
            <content:encoded><![CDATA[ <p><i>The following is a guest post from Scott Stender</i></p><p>The Cloudflare <a href="/tls-1-3-explained-by-the-cloudflare-crypto-team-at-33c3/">TLS 1.3 beta</a> is run by a Go implementation of the protocol based on the Go standard library, <code>crypto/tls</code>. Starting from that excellent Go codebase allowed us to quickly start experimenting, to be the first wide server deployment of the protocol, and to effectively track the changes to the specification draft.</p><p>Of course, the security of a TLS implementation is critical, so we engaged NCC Group's Cryptography Services to perform an audit at the end of 2016.</p><p>You can find the codebase <a href="https://github.com/cloudflare/tls-tris">on the Cloudflare GitHub</a>. It's a drop-in replacement for <code>crypto/tls</code> and comes with a <code>go</code> wrapper to patch the standard library as needed.</p><p>The code is developed in the open but is currently targeted only at internal use: the repository is frequently rebased and the API is not guaranteed to be stable or fully documented. You can take <a href="https://gist.github.com/FiloSottile/37d6516af411582e2aa35a981bf12102">a sneak peek at the API here</a>.</p><p>The final goal is to upstream the patches to the Go project so that all users of the Go standard library benefit from it. You can <a href="https://go-review.googlesource.com/q/status:open+project:go+branch:dev.tls">follow the process here</a>.</p><p>Below we republish the article about the audit first appeared <a href="https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2017/february/ncc-groups-cryptography-services-complete-an-audit-of-cloudfares-tls13/">on the NCC Group's blog</a>.</p>
    <div>
      <h3>NCC Group's Cryptography Services Complete an Audit of Cloudflare's TLS1.3</h3>
      <a href="#ncc-groups-cryptography-services-complete-an-audit-of-cloudflares-tls1-3">
        
      </a>
    </div>
    <p>NCC Group's Cryptography Services practice recently completed a two-week audit of Cloudflare's TLS 1.3 implementation. The audit took place between November 11, 2016 and December 9, 2016.</p><p>The TLS standard was last updated almost ten years ago and this version brings new features and a simplified handshake to the protocol. Many old cryptographic algorithms have been replaced with more modern ones, key exchanges have forward secrecy by default, the handshake phase will be faster, certificates will be able to enjoy security-proven signature schemes, MAC-then-Encrypt constructions are out—the weakest features of older TLS versions have been updated or removed.</p><p>Cryptography Services analyzed Cloudflare's TLS 1.3 implementation for protocol-level flaws and for deviations from the draft specification. The team found a small number of issues during the review—all of which were promptly fixed—and was pleased with the quality of the code.</p><p>Cloudflare built their implementation of TLS 1.3 on the Go programming language's standard TLS library, making use of the existing base to correctly and safely parse TLS packets. While building on top of older versions can be challenging, Cloudflare has added TLS 1.3 code in a safe and segregated way, with new defenses against downgrade attacks being added in the final implementation of the specification. This permits support for older versions of TLS while being free from unexpected conflicts or downgrades.</p><p>Using Go and its standard libraries enables Cloudflare to avoid common implementation issues stemming from vulnerable strcpy and memcpy operations, pointer arithmetic and manual memory management while providing a best-in-class crypto API.</p><p>Cloudflare implemented a conservative subset of the TLS 1.3 specification. State-of-the-art algorithms, such as Curve25519, are given priority over legacy algorithms. Session resumption is limited to the forward secure option. Cloudflare's implementation also considers efficiency, using AES-GCM if it detects accelerated hardware support and the faster-in-software Chacha20-Poly1305 in its absence.</p><p>There is still work to be done before TLS 1.3 enjoys large scale adoption. Cloudflare is paving the way with its reliable server implementation of TLS 1.3, and Firefox and Chrome's client implementations make end-to-end testing of the draft specification possible. NCC Group applauds the work of the IETF and these early implementers.</p> ]]></content:encoded>
            <category><![CDATA[TLS 1.3]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">7Ku7L3U2Iem97ina6czjj5</guid>
            <dc:creator>Guest Author</dc:creator>
        </item>
        <item>
            <title><![CDATA[TLS 1.3 explained by the Cloudflare Crypto Team at 33c3]]></title>
            <link>https://blog.cloudflare.com/tls-1-3-explained-by-the-cloudflare-crypto-team-at-33c3/</link>
            <pubDate>Wed, 01 Feb 2017 14:57:00 GMT</pubDate>
            <description><![CDATA[ Nick Sullivan and I gave a talk about TLS 1.3 at 33c3, the latest Chaos Communication Congress. The congress, attended by more that 13,000 hackers in Hamburg, has been one of the hallmark events of the security community for more than 30 years. ]]></description>
            <content:encoded><![CDATA[ <p><a href="/author/nick-sullivan/">Nick Sullivan</a> and I gave a talk about <a href="/tag/tls%201.3/">TLS 1.3</a> at <a href="https://events.ccc.de/tag/33c3/">33c3</a>, the latest Chaos Communication Congress. The congress, attended by more that 13,000 hackers in Hamburg, has been one of the hallmark events of the security community for more than 30 years.</p><p>You can watch the recording below, or <a href="https://media.ccc.de/v/33c3-8348-deploying_tls_1_3_the_great_the_good_and_the_bad">download it in multiple formats and languages on the CCC website</a>.</p><p>The talk introduces TLS 1.3 and explains how it works in technical detail, why it is faster and more secure, and touches on its history and current status.</p><p>.fluid-width-video-wrapper { margin-bottom: 45px; }</p><p>The <a href="https://speakerdeck.com/filosottile/tls-1-dot-3-at-33c3">slide deck is also online</a>.</p><p>This was an expanded and updated version of the <a href="/tls-1-3-overview-and-q-and-a/">internal talk previously transcribed on this blog</a>.</p>
    <div>
      <h3>TLS 1.3 hits Chrome and Firefox Stable</h3>
      <a href="#tls-1-3-hits-chrome-and-firefox-stable">
        
      </a>
    </div>
    <p>In related news, TLS 1.3 is reaching a percentage of Chrome and Firefox users this week, so websites with the Cloudflare TLS 1.3 beta enabled will load faster and more securely for all those new users.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/lIyLFsHXlAipFcgZ1nPWr/e71e81c8a7849214051b75430e1c169e/Screen-Shot-2017-01-30-at-20.14.53.png" />
            
            </figure><p>You can enable the TLS 1.3 beta from the Crypto section of your control panel.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7jji24riIIZQ2OEC6Xc93r/88d0ae02211b14fd407c065c5880ad31/image00.png" />
            
            </figure> ]]></content:encoded>
            <category><![CDATA[TLS 1.3]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Chrome]]></category>
            <category><![CDATA[Firefox]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">2zdHVDhrFKGUtMgVjYallG</guid>
            <dc:creator>Filippo Valsorda</dc:creator>
        </item>
        <item>
            <title><![CDATA[DNSSEC is Open for Beta]]></title>
            <link>https://blog.cloudflare.com/dnssec-is-open-for-beta/</link>
            <pubDate>Tue, 20 Oct 2015 20:54:48 GMT</pubDate>
            <description><![CDATA[ Since January, CloudFlare has been running a small, private beta for DNSSEC. Starting today, the DNSSEC beta is open for everyone.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Since January, Cloudflare has been running a small, <a href="/help-us-test-our-dnssec-implementation/">private beta</a> for DNSSEC. Starting today, the DNSSEC beta is open for everyone. To request access, email <a>dnssec-beta@cloudflare.com</a>.</p>
    <div>
      <h3>A Background on DNS and DNSSEC</h3>
      <a href="#a-background-on-dns-and-dnssec">
        
      </a>
    </div>
    <p>DNS is the system that lets your browser know which web server to connect to when you request to visit a website. It’s the underlying backbone of the usable internet, and yet, is vulnerable to on-path attacker attacks.</p><p>In DNS, an attacker sitting in the middle of your connection to the internet can tell your browser to connect to any web server they’d like. Browsers trust any DNS records they receive as a response to a DNS query, because DNS, invented in 1983 before the public consumption of the Internet, does not perform any authentication.</p><p>There is a solution. It’s called DNSSEC and it adds cryptographic hashes and signatures for authenticating DNS records. You can read more about DNSSEC and how it works in a <a href="/dnssec-an-introduction/">previous blog post</a>.</p><p>The DNSSEC beta is open to all websites that use CloudFlare for DNS. If you want to be a part of our beta and be one of the first CloudFlare websites with DNSSEC, email us for beta access: <a>dnssec-beta@cloudflare.com</a>.</p> ]]></content:encoded>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Beta]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Reliability]]></category>
            <guid isPermaLink="false">3dVBsBVen9VqS2y2268vDU</guid>
            <dc:creator>Dani Grant</dc:creator>
        </item>
    </channel>
</rss>