
<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, 10 Apr 2026 04:27:03 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Announcing the Cloudflare Images Sourcing Kit]]></title>
            <link>https://blog.cloudflare.com/cloudflare-images-sourcing-kit/</link>
            <pubDate>Fri, 13 May 2022 12:59:25 GMT</pubDate>
            <description><![CDATA[ Migrating millions of images into Cloudflare is now simple, fast and at the distance of a few clicks. The new Cloudflare Images Sourcing Kit 
Allows you to define your image sources, reuse them when you need to add new images or refresh existing ones ]]></description>
            <content:encoded><![CDATA[ <p></p><p>When we announced <a href="/announcing-cloudflare-images-beta/">Cloudflare Images to the world</a>, we introduced a way to store images within the product and help customers move away from the egress fees met when using remote sources for their deliveries via Cloudflare.</p><p>To <a href="https://www.cloudflare.com/products/cloudflare-images/">store the images in Cloudflare</a>, customers can upload them <a href="https://developers.cloudflare.com/images/cloudflare-images/upload-images/dashboard-upload/">via UI</a> with a simple drag and drop, or <a href="https://developers.cloudflare.com/images/cloudflare-images/api-request/">via API</a> for scenarios with a high number of objects for which scripting their way through the upload process makes more sense.</p><p>To create flexibility on how to import the images, we’ve recently also included the ability to <a href="https://developers.cloudflare.com/images/cloudflare-images/upload-images/upload-via-url/">upload via URL</a> or <a href="https://developers.cloudflare.com/images/cloudflare-images/upload-images/custom-id/">define custom names and paths for your images</a> to allow a simple mapping between customer repositories and the objects in Cloudflare. It's also possible to <a href="https://developers.cloudflare.com/images/cloudflare-images/serve-images/#serving-images-from-custom-domains">serve from a custom hostname</a> to create flexibility on how your end-users see the path, to improve the delivery performance by removing the need to do TLS negotiations or to improve your brand recognition through URL consistency.</p><p>Still, there was no simple way to tell our product: <i>“Tens of millions of images are in this repository URL. Go and grab them all from me”</i>.  </p><p>In some scenarios, our customers have buckets with millions of images to upload to Cloudflare Images. Their goal is to migrate all objects to Cloudflare through a one-time process, allowing you to drop the external storage altogether.</p><p>In another common scenario, different departments in larger companies use independent systems configured with varying storage repositories, all of which they feed at specific times with uneven upload volumes. And it would be best if they could reuse definitions to get all those new Images in Cloudflare to ensure the portfolio is up-to-date while not paying egregious egress fees by serving the public directly from those multiple storage providers.</p><p>These situations required the upload process to Cloudflare Images to include logistical coordination and scripting knowledge. Until now.</p>
    <div>
      <h3>Announcing the Cloudflare Images Sourcing Kit</h3>
      <a href="#announcing-the-cloudflare-images-sourcing-kit">
        
      </a>
    </div>
    <p>Today, we are happy to share with you our Sourcing Kit, where you can define one or more sources containing the objects you want to migrate to Cloudflare Images.</p><p>But, what exactly is Sourcing? In industries like manufacturing, it implies a number of operations, from selecting suppliers, to vetting raw materials and delivering reports to the process owners.</p><p>So, we borrowed that definition and translated it into a Cloudflare Images set of capabilities allowing you to:</p><ol><li><p>Define one or multiple repositories of images to bulk import;</p></li><li><p>Reuse those sources and import only new images;</p></li><li><p>Make sure that only actual usable images are imported and not other objects or file types that exist in that source;</p></li><li><p>Define the target path and filename for imported images;</p></li><li><p>Obtain Logs for the bulk operations;</p></li></ol><p>The new kit does it all. So let's go through it.</p>
    <div>
      <h3>How the Cloudflare Images Sourcing Kit works</h3>
      <a href="#how-the-cloudflare-images-sourcing-kit-works">
        
      </a>
    </div>
    <p>In the <a href="https://dash.cloudflare.com/?to=/:account/images">Cloudflare Dashboard</a>, you will soon find the Sourcing Kit under Images.</p><p>In it, you will be able to create a new source definition, view existing ones, and view the status of the last operations.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4SZEMoU2nrlZPvDawlEpXZ/f14ac5bdf189995fa2f5c0429811cf6e/image5-12.png" />
            
            </figure><p>Clicking on the create button will launch the wizard that will guide you through the first bulk import from your defined source:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5W4ZRJaDMUAzHpxq3j0Nkc/1401923c512b249b716ddac271ee1ff2/image2-32.png" />
            
            </figure><p>First, you will need to input the Name of the Source and the URL for accessing it. You’ll be able to save the definitions and reuse the source whenever you wish.After running the necessary validations, you’ll be able to define the rules for the import process.</p><p>The first option you have allows an Optional Prefix Path. Defining a prefix allows a unique identifier for the images uploaded from this particular source, differentiating the ones imported from this source.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5syJ0nK1aQtBS1O65s9ao7/1dad4362abe8b7eba03664816090212e/image4-19.png" />
            
            </figure><p>The naming rule in place respects the source image name and path already, so let's assume there's a puppy image to be retrieved at:</p><p><code>[https://my-bucket.s3.us-west-2.amazonaws.com/folderA/puppy.png](https://my-bucket.s3.us-west-2.amazonaws.com/folderA/puppy.png)</code></p><p>When imported without any Path Prefix, you’ll find the image at</p><p><code>[https://imagedelivery.net/&lt;AccountId&gt;/folderA/puppy.png](https://imagedelivery.net/&lt;AccountId&gt;/folderA/puppy.png)</code></p><p>Now, you might want to create an additional Path Prefix to identify the source, for example by mentioning that this bucket is from the Technical Writing department. In the puppy case, the result would be:</p><p><code>[https://imagedelivery.net/&lt;AccountId&gt;/**techwriting**/folderA/puppy.png](https://imagedelivery.net/&lt;AccountId&gt;/techwriting/folderA/puppy.png)</code></p><p>Custom Path prefixes also provide a way to prevent name clashes coming from other sources.</p><p>Still, there will be times when customers don't want to use them. And, when re-using the source to import images, a same path+filename destinations clash might occur.</p><p>By default, we don’t overwrite existing images, but we allow you to select that option and refresh your catalog present in the Cloudflare pipeline.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5xRY7HGX666fWFuaKU8bgm/6f0c97e2c024965bf4129d56c57b224a/image6-12.png" />
            
            </figure><p>Once these inputs are defined, a click on the Create and start migration button at the bottom will trigger the upload process.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/301MOQX804MipTdEAzO3Wz/367288704deb02c6a2d5eb284f214867/image10.png" />
            
            </figure><p>This action will show the final wizard screen, where the migration status is displayed. The progress log will report any errors obtained during the upload and is also available to download.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5qz31zhtbNMiIAiRceslTp/7d2e1128ffd82e86cd4752157fdeaaf9/image7-6.png" />
            
            </figure><p>You can reuse, edit or delete source definitions when no operations are running, and at any point, from the home page of the kit, it's possible to access the status and return to the ongoing or last migration report.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/13JDKst8pmw43G21YQ1yi2/7a5c8ee33a2e3ab31675a4caf97a8e4c/image3-24.png" />
            
            </figure>
    <div>
      <h3>What’s next?</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>With the Beta version of the Cloudflare Images Sourcing Kit, we will allow you to define AWS S3 buckets as a source for the imports. In the following versions, we will enable definitions for other common repositories, such as the ones from Azure Storage Accounts or Google Cloud Storage.</p><p>And while we're aiming for this to be a simple UI, we also plan to make everything available through CLI: from defining the repository URL to starting the upload process and retrieving a final report.</p>
    <div>
      <h3>Apply for the Beta version</h3>
      <a href="#apply-for-the-beta-version">
        
      </a>
    </div>
    <p>We will be releasing the Beta version of this kit in the following weeks, allowing you to source your images from third party repositories to Cloudflare.</p><p>If you want to be the first to use Sourcing Kit, request to join the waitlist on the <a href="https://dash.cloudflare.com/?to=/:account/images">Cloudflare Images dashboard</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/75BuXJQtfqBDv8SOx3JKzs/3b765c95ac58e7bb7a8eeade89d323ea/image1-39.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Cloudflare Images]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">72mbRGNXN4aGuGsSccsIqq</guid>
            <dc:creator>Paulo Costa</dc:creator>
            <dc:creator>Natalie Yeh</dc:creator>
            <dc:creator>Yevgen Safronov</dc:creator>
        </item>
        <item>
            <title><![CDATA[Route to Workers, automate your email processing]]></title>
            <link>https://blog.cloudflare.com/announcing-route-to-workers/</link>
            <pubDate>Fri, 13 May 2022 12:59:17 GMT</pubDate>
            <description><![CDATA[ With Cloudflare Workers and Email Routing you now have a developer platform to implement any logic you ever wanted for programmatically handling incoming Emails. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare Email Routing has quickly grown to a few hundred thousand users, and we’re incredibly excited with the number of feature requests that reach our product team every week. We hear you, we love the feedback, and we want to give you all that you’ve been asking for. What we don’t like is making you wait, or making you feel like your needs are too unique to be addressed.</p><p>That’s why we’re taking a different approach - we’re giving you the power tools that you need to implement any logic you can dream of to <a href="https://www.cloudflare.com/learning/email-security/what-is-email-routing/">process your emails</a> in the fastest, most scalable way possible.</p><p>Today we’re announcing Route to Workers, for which we’ll start a closed beta soon. You can join the waitlist today.</p>
    <div>
      <h3>How this works</h3>
      <a href="#how-this-works">
        
      </a>
    </div>
    <p>When using Route to Workers your Email Routing rules can have a <a href="https://workers.cloudflare.com/">Worker</a> process the messages reaching any of your custom Email addresses.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/17zXoE30zcRH8XdOgci0py/3dd2868758481e957215529847dff0f6/image2-28.png" />
            
            </figure><p>Even if you haven’t used <a href="https://workers.cloudflare.com/">Cloudflare Workers</a> before, we are making onboarding as easy as can be. You can start creating Workers straight from the Email Routing dashboard, with just one click.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6tmTsfaRFW1eI3LwwHYIvC/7ea2e60847a0a33919a07d4d89b3be5b/image3-21.png" />
            
            </figure><p>After clicking <i>Create</i>, you will be able to choose a starter that allows you to get up and running with minimal effort. Starters are templates that pre-populate your Worker with the code you would write for popular use cases such as creating a blocklist or allowlist, content based filtering, tagging messages, pinging you on Slack for urgent emails, etc.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1Wfm69IvlhvolGTkLDJnsw/8b40ecf79ec76e9c6807c00824e2de25/image7-4.png" />
            
            </figure><p>You can then use the code editor to make your new Worker process emails in exactly the way you want it to - the options are endless.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/48OuwXjGEQxxYScTLkQrKz/973af80c91c5a7c03704da9eb51a4404/Editor--Schedule.png" />
            
            </figure><p>And for those of you that prefer to jump right into writing their own code, you can go straight to the editor without using a starter. You can write Workers with a language you likely already know. Cloudflare built Workers to execute JavaScript and WebAssembly and has continuously added support for new <a href="https://developers.cloudflare.com/workers/platform/languages/">languages</a>.</p><p>The Workers you’ll use for processing emails are just regular Workers that listen to incoming events, implement some logic, and reply accordingly. You can use all the features that a normal Worker would.</p><p>The main difference being that instead of:</p>
            <pre><code>export default {
  async fetch(request, env, ctx) {
    handleRequest(request);
  }
}</code></pre>
            <p>You'll have:</p>
            <pre><code>export default {
  async email(message, env, ctx) {
    handleEmail(message);
  }
}</code></pre>
            <p>The new `email` event will provide you with the "from", "to" fields, the full headers, and the raw body of the message. You can then use them in any way that fits your use case, including calling other APIs and orchestrating complex decision workflows. In the end, you can decide what action to take, including rejecting or forwarding the email to one of your Email Routing destination addresses.</p><p>With these capabilities you can easily create logic that, for example, only accepts messages coming from one specific address and, when one matches the criteria, forwards to one or more of your verified destination addresses while also immediately alerting you on Slack. Code for such feature could be as simple as this:</p>
            <pre><code>export default {
   async email(message, env, ctx) {
       switch (message.to) {
           case "marketing@example.com":
               await fetch("https://webhook.slack/notification", {
                   body: `Got a marketing email from ${ message.from }, subject: ${ message.headers.get("subject") }`,
               });
               sendEmail(message, [
                   "marketing@corp",
                   "sales@corp",
               ]);
               break;

           default:
               message.reject("Unknown address");
       }
   },
};</code></pre>
            <p>Route to Workers enables everyone to programmatically process their emails and use them as triggers for any other action. We think this is pretty powerful.</p>
    <div>
      <h3>Process up to 100,000 emails/day for free</h3>
      <a href="#process-up-to-100-000-emails-day-for-free">
        
      </a>
    </div>
    <p>The first 100,000 Worker requests (or Email Triggers) each day are free, and paid plans start at just $5 per 10 million requests. You will be able to keep track of your Email Workers usage right from the Email Routing dashboard.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5LzWjwFo75nURlnz7tWB5h/30a52bd0fe2a50101ddb2f7dc65c39dc/Slice-1.jpeg.jpeg" />
            
            </figure>
    <div>
      <h3>Join the Waitlist</h3>
      <a href="#join-the-waitlist">
        
      </a>
    </div>
    <p>You can join the waitlist today by going to the Email section of your dashboard, navigating to the Email Workers tab, and clicking the Join Waitlist button.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/KFRb5ebiPf2x9MaHXiytF/1aeef42073a4b8397f6d1ff436a5c938/image1-36.png" />
            
            </figure><p>We are expecting to start the closed beta in just a few weeks, and can’t wait to hear about what you’ll build with it!</p><p>As usual, if you have any questions or feedback about Email Routing, 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> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Email]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">7uCXvlDsBt3FCDnUJGIlEf</guid>
            <dc:creator>João Sousa Botto</dc:creator>
            <dc:creator>Natalie Yeh</dc:creator>
        </item>
    </channel>
</rss>