
<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>Sat, 04 Apr 2026 11:28:17 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Announcing Rollbacks and API Access for Pages]]></title>
            <link>https://blog.cloudflare.com/rollbacks-and-api-access-for-pages/</link>
            <pubDate>Wed, 23 Jun 2021 13:00:24 GMT</pubDate>
            <description><![CDATA[ Today we announce two new features: rollbacks and the Pages API. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>A couple of months ago, we announced the general availability of <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>: the easiest way to host and collaboratively develop websites on Cloudflare’s global network. It’s been amazing to see over 20,000 incredible sites built by users and hear your feedback. Since then, we’ve released user-requested features like URL redirects, web analytics, and Access integration.</p><p>We’ve been listening to your feedback and today we announce two new features: rollbacks and the Pages API. Deployment rollbacks allow you to host production-level code on Pages without needing to stress about broken builds resulting in website downtime. The API empowers you to create custom functionality and better integrate Pages with your development workflows. Now, it’s even easier to use Pages for production hosting.</p>
    <div>
      <h3>Rollbacks</h3>
      <a href="#rollbacks">
        
      </a>
    </div>
    <p>You can now rollback your production website to a previous working deployment with just a click of a button. This is especially useful when you want to quickly undo a new deployment for troubleshooting. Before, developers would have to push another deployment and then wait for the build to finish updating production. Now, you can restore a working version within a few moments by rolling back to a previous working build.</p><p>To rollback to a previous build, just click the “Rollback to this deployment” button on either the deployments list menu or on a specific deployment page.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/EgmHaPNJ9tsoAkaPDXEqi/df37d8b3c4d95d3428642fe8e4c69796/image3.gif" />
            
            </figure>
    <div>
      <h3>API Access</h3>
      <a href="#api-access">
        
      </a>
    </div>
    <p>The Pages API exposes endpoints for you to easily create automations and to integrate Pages within your development workflow. Refer to the <a href="https://api.cloudflare.com/#pages-project-properties">API documentation</a> for a full breakdown of the object types and endpoints. To get started, navigate to the <a href="https://dash.cloudflare.com/profile/api-tokens">Cloudflare API Tokens</a> page and copy your "Global API Key". Now, you can authenticate and make requests to the API using your email and auth key in the request headers.</p><p>For example, here is an API request to get all projects on an account.</p><p>Request (example)</p>
            <pre><code>curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects" \
     -H "X-Auth-Email: {email}" \
     -H "X-Auth-Key: {auth_key}"</code></pre>
            <p>Response (example)</p>
            <pre><code>{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "name": "NextJS Blog",
    "id": "7b162ea7-7367-4d67-bcde-1160995d5",
    "created_on": "2017-01-01T00:00:00Z",
    "subdomain": "helloworld.pages.dev",
    "domains": [
      "customdomain.com",
      "customdomain.org"
    ],
    "source": {
      "type": "github",
      "config": {
        "owner": "cloudflare",
        "repo_name": "ninjakittens",
        "production_branch": "main",
        "pr_comments_enabled": true,
        "deployments_enabled": true
      }
    },
    "build_config": {
      "build_command": "npm run build",
      "destination_dir": "build",
      "root_dir": "/",
      "web_analytics_tag": "cee1c73f6e4743d0b5e6bb1a0bcaabcc",
      "web_analytics_token": "021e1057c18547eca7b79f2516f06o7x"
    },
    "deployment_configs": {
      "preview": {
        "env_vars": {
          "BUILD_VERSION": {
            "value": "3.3"
          }
        }
      },
      "production": {
        "env_vars": {
          "BUILD_VERSION": {
            "value": "3.3"
          }
        }
      }
    },
    "latest_deployment": {
      "id": "f64788e9-fccd-4d4a-a28a-cb84f88f6",
      "short_id": "f64788e9",
      "project_id": "7b162ea7-7367-4d67-bcde-1160995d5",
      "project_name": "ninjakittens",
      "environment": "preview",
      "url": "https://f64788e9.ninjakittens.pages.dev",
      "created_on": "2021-03-09T00:55:03.923456Z",
      "modified_on": "2021-03-09T00:58:59.045655",
      "aliases": [
        "https://branchname.projectname.pages.dev"
      ],
      "latest_stage": {
        "name": "deploy",
        "started_on": "2021-03-09T00:55:03.923456Z",
        "ended_on": "2021-03-09T00:58:59.045655",
        "status": "success"
      },
      "env_vars": {
        "BUILD_VERSION": {
          "value": "3.3"
        },
        "ENV": {
          "value": "STAGING"
        }
      },
      "deployment_trigger": {
        "type": "ad_hoc",
        "metadata": {
          "branch": "main",
          "commit_hash": "ad9ccd918a81025731e10e40267e11273a263421",
          "commit_message": "Update index.html"
        }
      },
      "stages": [
        {
          "name": "queued",
          "started_on": "2021-06-03T15:38:15.608194Z",
          "ended_on": "2021-06-03T15:39:03.134378Z",
          "status": "active"
        },
        {
          "name": "initialize",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "clone_repo",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "build",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "deploy",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        }
      ],
      "build_config": {
        "build_command": "npm run build",
        "destination_dir": "build",
        "root_dir": "/",
        "web_analytics_tag": "cee1c73f6e4743d0b5e6bb1a0bcaabcc",
        "web_analytics_token": "021e1057c18547eca7b79f2516f06o7x"
      },
      "source": {
        "type": "github",
        "config": {
          "owner": "cloudflare",
          "repo_name": "ninjakittens",
          "production_branch": "main",
          "pr_comments_enabled": true,
          "deployments_enabled": true
        }
      }
    },
    "canonical_deployment": {
      "id": "f64788e9-fccd-4d4a-a28a-cb84f88f6",
      "short_id": "f64788e9",
      "project_id": "7b162ea7-7367-4d67-bcde-1160995d5",
      "project_name": "ninjakittens",
      "environment": "preview",
      "url": "https://f64788e9.ninjakittens.pages.dev",
      "created_on": "2021-03-09T00:55:03.923456Z",
      "modified_on": "2021-03-09T00:58:59.045655",
      "aliases": [
        "https://branchname.projectname.pages.dev"
      ],
      "latest_stage": {
        "name": "deploy",
        "started_on": "2021-03-09T00:55:03.923456Z",
        "ended_on": "2021-03-09T00:58:59.045655",
        "status": "success"
      },
      "env_vars": {
        "BUILD_VERSION": {
          "value": "3.3"
        },
        "ENV": {
          "value": "STAGING"
        }
      },
      "deployment_trigger": {
        "type": "ad_hoc",
        "metadata": {
          "branch": "main",
          "commit_hash": "ad9ccd918a81025731e10e40267e11273a263421",
          "commit_message": "Update index.html"
        }
      },
      "stages": [
        {
          "name": "queued",
          "started_on": "2021-06-03T15:38:15.608194Z",
          "ended_on": "2021-06-03T15:39:03.134378Z",
          "status": "active"
        },
        {
          "name": "initialize",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "clone_repo",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "build",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        },
        {
          "name": "deploy",
          "started_on": null,
          "ended_on": null,
          "status": "idle"
        }
      ],
      "build_config": {
        "build_command": "npm run build",
        "destination_dir": "build",
        "root_dir": "/",
        "web_analytics_tag": "cee1c73f6e4743d0b5e6bb1a0bcaabcc",
        "web_analytics_token": "021e1057c18547eca7b79f2516f06o7x"
      },
      "source": {
        "type": "github",
        "config": {
          "owner": "cloudflare",
          "repo_name": "ninjakittens",
          "production_branch": "main",
          "pr_comments_enabled": true,
          "deployments_enabled": true
        }
      }
    }
  },
  "result_info": {
    "page": 1,
    "per_page": 100,
    "count": 1,
    "total_count": 1
  }
}</code></pre>
            <p>Here’s another quick example using the API to rollback to a previous deployment:</p><p>Request (example)</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/{project_name}/deployments/{deployment_id}/rollback" \
     -H "X-Auth-Email: {email}" \
     -H "X-Auth-Key: {auth_key"</code></pre>
            <p>Response (example)</p>
            <pre><code>{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "id": "f64788e9-fccd-4d4a-a28a-cb84f88f6",
    "short_id": "f64788e9",
    "project_id": "7b162ea7-7367-4d67-bcde-1160995d5",
    "project_name": "ninjakittens",
    "environment": "preview",
    "url": "https://f64788e9.ninjakittens.pages.dev",
    "created_on": "2021-03-09T00:55:03.923456Z",
    "modified_on": "2021-03-09T00:58:59.045655",
    "aliases": [
      "https://branchname.projectname.pages.dev"
    ],
    "latest_stage": {
      "name": "deploy",
      "started_on": "2021-03-09T00:55:03.923456Z",
      "ended_on": "2021-03-09T00:58:59.045655",
      "status": "success"
    },
    "env_vars": {
      "BUILD_VERSION": {
        "value": "3.3"
      },
      "ENV": {
        "value": "STAGING"
      }
    },
    "deployment_trigger": {
      "type": "ad_hoc",
      "metadata": {
        "branch": "main",
        "commit_hash": "ad9ccd918a81025731e10e40267e11273a263421",
        "commit_message": "Update index.html"
      }
    },
    "stages": [
      {
        "name": "queued",
        "started_on": "2021-06-03T15:38:15.608194Z",
        "ended_on": "2021-06-03T15:39:03.134378Z",
        "status": "active"
      },
      {
        "name": "initialize",
        "started_on": null,
        "ended_on": null,
        "status": "idle"
      },
      {
        "name": "clone_repo",
        "started_on": null,
        "ended_on": null,
        "status": "idle"
      },
      {
        "name": "build",
        "started_on": null,
        "ended_on": null,
        "status": "idle"
      },
      {
        "name": "deploy",
        "started_on": null,
        "ended_on": null,
        "status": "idle"
      }
    ],
    "build_config": {
      "build_command": "npm run build",
      "destination_dir": "build",
      "root_dir": "/",
      "web_analytics_tag": "cee1c73f6e4743d0b5e6bb1a0bcaabcc",
      "web_analytics_token": "021e1057c18547eca7b79f2516f06o7x"
    },
    "source": {
      "type": "github",
      "config": {
        "owner": "cloudflare",
        "repo_name": "ninjakittens",
        "production_branch": "main",
        "pr_comments_enabled": true,
        "deployments_enabled": true
      }
    }
  }
}</code></pre>
            <p>Try out an API request with one of your projects by replacing {account_id}, {deployment_id},{email}, and {auth_key}. You can find your <code>account_id</code> in the URL address bar by navigating to the <a href="https://dash.cloudflare.com/">Cloudflare Dashboard</a>. (Ex: <code>41643ed677c7c7gba4x463c4zdb9563c</code>).</p><p>Refer to the <a href="https://api.cloudflare.com/#pages-project-properties">API documentation</a> for a full breakdown of the object types and endpoints.</p>
    <div>
      <h3>Using the Pages API on Workers</h3>
      <a href="#using-the-pages-api-on-workers">
        
      </a>
    </div>
    <p>The Pages API is even more powerful and simple to use with <a href="https://workers.cloudflare.com/?&amp;_bt=521144407143&amp;_bk=&amp;_bm=b&amp;_bn=g&amp;_bg=123914288844&amp;_placement=&amp;_target=&amp;_loc=9003761&amp;_dv=c&amp;awsearchcpc=1&amp;gclid=CjwKCAjwiLGGBhAqEiwAgq3q_glwMF_1OxraB8Ot18vFR78uKF9rCAWNALrvlHmfQRPcKSWiKYwTPBoCwgMQAvD_BwE&amp;gclsrc=aw.ds">Cloudflare Workers</a>: the easiest way to deploy serverless functions globally. Below are three ways you can use the Pages API on Workers.</p><p><b>1. Triggering a new build every hour:</b> Suppose you have a CMS that pulls data from live sources to compile a static output. You can keep the static content as fresh as possible by triggering new builds periodically using the API. This is easy to do on Workers using Cron Triggers, so let’s walk through an example.</p><p>First, let’s create a new Worker by navigating to <a href="http://workers.new/">workers.new</a>. If you haven’t used Workers before, feel free to go through the <a href="https://developers.cloudflare.com/workers/get-started/guide">getting started guide</a> to learn more. However, you’ll need to have set up a Pages project to follow along. Next, you can copy and paste this template for the new worker. Then, customize the values such as {account_id}, {project_name}, {auth_key}, and {your_email}.</p>
            <pre><code>const endpoint = "https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/{project_name}/deployments";
const email = "{your_email}";
addEventListener("scheduled", (event) =&gt; {
  event.waitUntil(handleScheduled(event.scheduledTime));
});
async function handleScheduled(request) {
  const init = {
    method: "POST",
    headers: {
      "content-type": "application/json;charset=UTF-8",
      "X-Auth-Email": email,
      "X-Auth-Key": API_KEY,
      //We recommend you store API keys as secrets using the Workers dashboard or using Wrangler as documented here https://developers.cloudflare.com/workers/cli-wrangler/commands#secret
    },
  };
  const response = await fetch(endpoint, init);
  return new Response(200);
}</code></pre>
            
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/n9hdXplYEOTptwrYLue08/e5f87b8bdf8e3e12472f906689b8a139/image2-11.png" />
            
            </figure><p>To finish configuring the script, click the back arrow near the top left of the window and click on the settings tab. Then, set an environment variable “API_KEY” with the value of your Cloudflare Global key and click “Encrypt” and then “Save”.</p><p>The script just makes a POST request to the deployments' endpoint to trigger a new build. Click “Quick edit” to go back to the code editor to finish testing the script. You can test out your configuration and make a request by clicking on the “Trigger scheduled event” button in the “Schedule” tab near the tabs saying “HTTP” and “Preview”. You should see a new queued build on your Project through the Pages dashboard. Now, you can click “Save and Deploy” to publish your work. Finally, back to the worker settings page by clicking the back arrow near the top left of the window.</p><p>All that’s left to do is set a cron trigger to periodically run this Worker on the “Triggers tab”. Click on “Add Cron Trigger”.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4SomjQN0tprTNYqLhQD01k/0c970e8c710598c6df67906eb710c32e/image4-7.png" />
            
            </figure><p>Next, we can input “0 * * * *” to trigger the build every hour.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4dxsHy7Yf9qLp9AI3mPu2F/ddd564bc11a8525b6335878b737f4220/image5-3.png" />
            
            </figure><p>Finally, click save and your automation using the Pages API will trigger a new build every hour.</p><p><b>2. Deleting old deployments after a week</b>: Pages hosts and serves all project deployments on preview links. Suppose you want to keep your project relatively private and prevent access to old deployments. You can use the API to delete deployments after a month so that they are no longer public online. This is easy to do on Workers using Cron Triggers.</p><p><b>3. Sharing project information</b>: Imagine you are working on a development team using Pages to build our websites. You probably want an easy way to share deployment preview links and build status without having to share Cloudflare accounts. Using the API, you can easily share project information, including deployment status and preview links, and serve this content as HTML from a Cloudflare Worker.</p><p>Find the code snippets for all three examples <a href="https://developers.cloudflare.com/pages/platform/api">here</a>.</p>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>We will continue making the API more powerful with features such as supporting prebuilt deployments in the future. We are excited to see what you build with the API and hope you enjoy using rollbacks. At Cloudflare, we are committed to building the best developer experience on Pages, and we always appreciate hearing your feedback. Come chat with us and share more feedback on the <a href="https://discord.com/invite/cloudflaredev">Workers Discord</a> (We have a dedicated #pages-help channel!).</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Cloudflare Pages]]></category>
            <category><![CDATA[API]]></category>
            <guid isPermaLink="false">7El1bjwnuizA874aA3crBv</guid>
            <dc:creator>David Song</dc:creator>
        </item>
        <item>
            <title><![CDATA[Location-based personalization at the edge with Cloudflare Workers]]></title>
            <link>https://blog.cloudflare.com/location-based-personalization-using-workers/</link>
            <pubDate>Tue, 13 Apr 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ Geolocation data access is now available and free for all developers on our Workers platform, including users on the free plan! ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We’re excited to announce an update to Cloudflare Workers, our serverless code platform built on our global network. Geolocation data is now accessible and free for all developers on our Workers platform, including users on the free plan!</p><p>You can now serve personalized experiences for users based on their location using Workers. Personalization is critical to building intuitive apps for users and it unlocks new possibilities for what you can build on our platform. Whether you’re building a social networking app or an automatic shipping cost estimator for an e-commerce site, a one-size-fits-all experience doesn’t cut it. Location-based personalization helps you show what’s most relevant to your users, be it tickets for movies in their area or content in their local language.</p><p>With geolocation data available on the server side, there’s no configuration needed for users to set their location.</p><p>Each request to a Worker includes the user’s (example data shown):</p><ul><li><p>Country: “US”</p></li><li><p>City: “Austin”</p></li><li><p>Continent: “NA”</p></li><li><p>Latitude: "30.27130"</p></li><li><p>Longitude: “-97.74260”</p></li><li><p>Postal code: "78701"</p></li><li><p>Metro code(dma): “635”</p></li><li><p>Region: “Texas”</p></li><li><p>Timezone: “America/Chicago”</p></li></ul><p>Geolocation data on Workers makes it even easier to build server rendered apps and customized services.</p><p>Refer to the <a href="https://developers.cloudflare.com/workers/runtime-apis/request#incomingrequestcfproperties">documentation</a> to learn more.</p><p>In case you need some inspiration on how you can use this data, here are some quick and fun examples to get you started:</p>
    <div>
      <h3>Hello World</h3>
      <a href="#hello-world">
        
      </a>
    </div>
    <p>Hello World! This is a simple Worker to show you the available geolocation data fields and how to access them. Refer to the <a href="https://developers.cloudflare.com/workers/examples/geolocation-hello-world">source code</a> and <a href="https://geolocation-hello-world.r.workers.dev/">live demo</a> to learn more.</p>
    <div>
      <h3>Personalized UI Design</h3>
      <a href="#personalized-ui-design">
        
      </a>
    </div>
    <p>This is a Worker that customizes the user interface based on the user’s local time. The background changes throughout the day showing blue gradients during daylight and darker gradients at night. It’d be interesting to implement automatic dark mode for apps on Workers using a similar approach as well.</p><p>Traditionally, websites customize the user experience by loading JavaScript and cookies into the client side, which causes longer load times and other challenges. Web apps like the example above would have to store cookies and have delays updating the visuals to wait for the client side code to personalize the experience for the user. With Workers, you can take full advantage of server rendered apps and eliminate these challenges while decreasing load times.</p><p>Refer to the <a href="https://developers.cloudflare.com/workers/examples/geolocation-custom-styling">source code</a> and <a href="https://geolocation-custom-design.r.workers.dev/">live demo</a> to learn more.</p>
    <div>
      <h3>Location Based Applications</h3>
      <a href="#location-based-applications">
        
      </a>
    </div>
    <p>This is a Worker reporting the air quality near your location using <a href="https://aqicn.org/">the World Air Quality Project’s API</a>. For other ideas, you could build a simple analytics service or a review platform for local businesses.</p><p>Refer to the <a href="https://developers.cloudflare.com/workers/examples/geolocation-app-weather">source code</a> and <a href="https://geolocation-app-weather.r.workers.dev/">live demo</a> to learn more.</p><p>These are just some examples of what you can make using geolocation. We are excited to see what you build and we’d love to hear from you in our Workers <a href="https://discord.gg/TGG8Fw4zKP">Discord</a>.</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Serverless]]></category>
            <guid isPermaLink="false">5RkjcyepFQ1kM4byxCZU1U</guid>
            <dc:creator>David Song</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Deploy Buttons]]></title>
            <link>https://blog.cloudflare.com/introducing-deploy-buttons/</link>
            <pubDate>Thu, 20 Aug 2020 19:01:15 GMT</pubDate>
            <description><![CDATA[ Deploy Buttons help you deploy a project to the Workers Platform without even needing to set up a local development environment. Now, it’s as easy as clicking a Deploy Button and three short steps to deploy using our new web-based deploy tool.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>When I first try out new development platforms, the first thing I do is get an OSS (Open Source Software) project I find on Github up and running. I used to start by following tutorials or digging through documentation. It’s a little bit counterintuitive. Let me share with you why. One reason is that Hello, World! examples rarely show the real “magic” of the platform. I want to feel excited and get a sense of how other people are creatively using the platform.</p><p>For example, I love it when I can build and deploy an OSS <a href="https://github.com/scitbiz/flutter_pokedex">Pokedex</a> app in a few minutes on Flutter to see if the platform actually lives up to the hype. It’s so much easier to do this than to spend a few hours following tutorials and documentation to get through the initial learning curve. You can think of it as shortening the <a href="/making-magic-reimagining-developer-experiences-for-the-world-of-serverless/">time to first dopamine</a>.</p><p>Another reason is that it makes learning the new platform much faster. Building off of an experienced developer’s work shows me which classes and functions are most useful to learn. There’s more nuance to building out full applications than is usually explained in the documentation. I can see how the pieces fit together and get a deeper understanding.</p><p>When I started my internship on the Workers team, I realized I could help create the magical experience of trying out a new platform quickly for the Workers dev experience. The team and I have spent the last few months working hard with the Workers team to make this possible. Today, I’m happy to share with you: Deploy Buttons.</p><p>Deploy Buttons let you deploy a project to the Workers Platform without even needing to set up a local development environment. Before Deploy Buttons, new developers had to jump between multiple places like the signup pages, the docs, the dashboard, and Wrangler to deploy a project. Now, it’s as easy as clicking a Deploy Button and three short steps to deploy using our new web-based deploy tool. This is the fastest way for beginners to get something live in less than five minutes, and for developers to share their projects with others by creating their own deploy buttons.</p><p>Try this button to deploy a GraphQL db:</p>
            <figure>
            <a href="https://deploy.workers.cloudflare.com/?url=https://github.com/signalnerve/workers-graphql-server">
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6mIGxNuovWilwnhFBVpWUM/c16e5d8c19b51f10f87f83e3474f7ea4/button.svg_xml" />
            </a>
            </figure><p>We’ve also curated a <a href="http://deploy.workers.cloudflare.com/">few awesome projects</a> to try deploying now with this new deploy flow.</p><p>Before Deploy Buttons, things were a bit more complicated. When you found a project you like on GitHub or an example on our template gallery, you had to go to cloudflare.com to create an account, go to the docs to set up a local development environment, clone the project, and finally, learn how to use wrangler to deploy it. Now, you can just click on the deploy button to quickly get a project up and running with Workers to experience the magic of serverless.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/11cLi5av4Q8vhzvZm6kxOt/0571890de73be1ed68f359be204a502d/deploytool.png" />
            
            </figure><p>Here’s how it works. For example, if you find an interesting Workers project on GitHub and want to deploy it, you would click the “Deploy to Workers Button” on the <a href="https://github.com/bytesizedxyz/cloudflare-worker-cra">repo README</a>. This would take you to our new web-based deploy tool where you can deploy that project in just three steps. First, connect your Github account. Second, connect your Cloudflare account. Third, click “Deploy” and the project will be forked to your Github account and deployed to Workers with our Github action.</p>

    <div>
      <h3>Want to create your own Deploy Button for your projects?</h3>
      <a href="#want-to-create-your-own-deploy-button-for-your-projects">
        
      </a>
    </div>
    <ol><li><p>Add a GitHub Actions workflow to your project.</p></li></ol><p>Add a new file to .github/workflows, such as .github/workflows/deploy.yml, and create a GitHub workflow for deploying your project. It should include a set of events, including at least repository_dispatch, but probably push and maybe schedule as well. Add a step for publishing your project using wrangler-action:</p>
            <pre><code>name: Build
on:
  push:
  pull_request:
  repository_dispatch:
deploy:
  runs-on: ubuntu-latest
  timeout-minutes: 60
  needs: test
  steps:
    - uses: actions/checkout@v2
    - name: Publish
      uses: cloudflare/wrangler-action@1.2.0</code></pre>
            <ol><li><p>Add support for CF_API_TOKEN and CF_ACCOUNT_ID in your repo workflow:</p></li></ol>
            <pre><code># Update "Publish" step from last code snippet
- name: Publish
  uses: cloudflare/wrangler-action@1.2.0
  with:
    apiToken: ${{ secrets.CF_API_TOKEN }}
  env:
    CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}</code></pre>
            <ol><li><p>Add the Markdown code for your button to your project's README, replacing the example url parameter with your repository URL.</p></li></ol>
            <figure>
            <a href="https://deploy.workers.cloudflare.com/?url=https://github.com/YOURUSERNAME/YOURREPO">
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/59lOKk9dO4ihyDPCik5Yso/762e86effd0f44b5bb1885d8e10abc7d/button.svg_xml" />
            </a>
            </figure>
            <pre><code>[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/YOURUSERNAME/YOURREPO)</code></pre>
            <p>Does your project use features only available in a paid Workers plan like Workers KV? Providing the paid=true query parameter to the /button and the deploy application paths will render a "Deploy to Workers Bundled" button, as seen below -- it will also render a notice in the UI that the project requires Workers Bundled:</p>
            <figure>
            <a href="https://deploy.workers.cloudflare.com/?url=https://github.com/YOURUSERNAME/YOURREPO&amp;paid=true">
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4TlG5fqH4m4NUBe8pml5SI/7c138e438e015d54e0ab99927a923f16/button" />
            </a>
            </figure>
            <pre><code>[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button?paid=true)](https://deploy.workers.cloudflare.com/?url=https://github.com/YOURUSERNAME/YOURREPO&amp;paid=true)</code></pre>
            <p>Thanks for tuning in. If you have any feedback, please fill out our <a href="https://docs.google.com/forms/d/e/1FAIpQLScD29hGSr_ArVWuOhn7izRMw9aXfoCbkeud3qGUlZdgw32tFQ/viewform">feedback survey</a>. We have more exciting features and improvements to announce soon for making the developer experience for Workers even better.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Serverless]]></category>
            <guid isPermaLink="false">3ksQyZfnlCIX7Fryvqgj70</guid>
            <dc:creator>David Song</dc:creator>
        </item>
        <item>
            <title><![CDATA[New and improved Workers Docs]]></title>
            <link>https://blog.cloudflare.com/new-and-improved-workers-docs/</link>
            <pubDate>Wed, 19 Aug 2020 11:00:00 GMT</pubDate>
            <description><![CDATA[ Following user feedback about Workers Docs, we reorganized and reformatted all of our content. The documentation is now intuitive to navigate and the content is now easy and enjoyable to read. ]]></description>
            <content:encoded><![CDATA[ <p>I’m happy to announce several updates to the Workers Docs that will allow you to take full advantage of our Workers platform. We integrated your feedback about the Docs user experience and design. We reorganized and reformatted all of our content. We upgraded the Docs engine to add new UI components. The documentation is now intuitive to navigate and the content is now easy and enjoyable to read.</p><p>You can find our new and improved documentation site <a href="https://developers.cloudflare.com/workers/">here</a> and can find the docs engine on our <a href="https://github.com/cloudflare/workers-docs-engine">repo</a>.</p><p>We hope this creates a better developer experience for you and makes the Docs more approachable to beginners. We plan to use our work and improvements for the Workers Docs to revamp docs for other Cloudflare products too.</p><p>Here’s a more detailed breakdown of the Workers Docs update.</p><p><b>Content Organization:</b> We reorganized site content into four categories to make it easier for you to read and find content: Tutorials, How-to guides, Technical reference, and Learning. The new content structure is heavily inspired by <a href="https://documentation.divio.com/">Divio’s documentation system</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5AuVdBd7Vr34z7Paugcex4/78e8959b7d2bc38edf68bff527c81ce8/image2-workers-body.png" />
            
            </figure><p>The tutorials section groups together step by step guides for building a specific project on Workers (e.g. teaching a beginner how to cook). The how-to guides are a collection of examples to help developers understand and implement a specific feature of the Workers platform (e.g. a recipe in a cookbook). In the new Docs, the how-to guides section is split into the examples and starters pages. You can think of the examples as code snippets and the starters as fully completed and cloneable projects. The technical reference is a descriptive breakdown of each technical component for Workers (e.g. a reference encyclopedia article). In the new Docs, we decided to split the Reference section into three groups for Platform, Runtime APIs, and Wrangler documentation to make content easier to find. The learning section builds understanding for a specific topic or concept about the Workers platform (e.g. an article on culinary social history.)</p><p>The key insight is that by breaking content up in this way, each of the four types of documentation only has one job so it can really nail it. Plus, it makes it easier to find what you are looking for.</p><p><b>Improved Formatting:</b>  We added more structure and detail to our content. Here are a few examples. First, reference pages like the one for Request class now give more context with a background section explaining use cases and tips on how to use the class. We also added a table of contents to the right sidebar to make browsing through a page much easier.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1gchVZ4Y6CxOCk7PiI4yg5/d47704ae6a4682b5c78e1f5a0bd5c23c/image8-2.png" />
            
            </figure><p>We also cleaned up the formatting for content such as class breakdowns. This used to be done through chunky paragraphs of text. In the new Docs, each variable and parameter is listed and explained with plenty of whitespace for readability</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4v3Mo4S3jYPxslkWmBVGwn/ea7c02d8d4829c0c729db1d168b0e687/image5-2.png" />
            
            </figure><p>Similarly, we have improved the formatting for command breakdowns which used to be tables. It’s now easy to read through with the same list based format for class breakdowns.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZtI7fGgSMKomCXZosAoHv/45b97bdf0a88ebbaeea66620a390b1dd/image1-9.png" />
            
            </figure><p><b>Redesigned Pages:</b> With our Docs engine rewrite, we added new UI components and created new page designs. For instance, with the examples page, we added tags so you can sort by category. Also, the entire layout has been improved to make it easier to read and understand each example.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Xi8Mx0ijmU7U8UsFTzQGE/5ede82ff1f86a6207993dd5e861d3a5c/image3-4.png" />
            
            </figure><p>Another great example is the tutorials page. We updated the page to show the difficulty and length of each tutorial. This should make the tutorials and learning how to develop on Workers more approachable for beginners. We also added new tutorials such how to manage multiple Workers projects with Lerna.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1XaqdiSSFGz1GS7XhEaPqg/c55dab57061498df7f4c42221e3cf29f/image4-4.png" />
            
            </figure><p><b>Accurate Search:</b> We updated the design for our Algolia docs search. The text is now easier to read and the results are prioritized better than before.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7rnTrrcvfPoFg6JyHosYZF/cc20c581a927c4bf6257d1343910209e/image6-3.png" />
            
            </figure><p><b>Dark Mode:</b> You can now customize the Docs to your liking and switch between light and dark mode. We designed these two themes to be really easy to read and visually appealing.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4tWhvPaxxAXKU4nmXb1uet/d8f42f8bf412c3e74d1c50c45c1bad68/image7-2.png" />
            
            </figure><p>I hope this update makes using the docs a better experience for you. We have more updates planned and are always looking to improve. Please feel submit an issue <a href="https://github.com/cloudflare/workers-docs-engine/issues/new">here</a> if you have any feedback.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Serverless]]></category>
            <guid isPermaLink="false">69brylqk6gHyuyjE1YUzSm</guid>
            <dc:creator>David Song</dc:creator>
        </item>
    </channel>
</rss>