
<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>Thu, 09 Apr 2026 03:01:46 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Community Update: empowering startups building on Cloudflare and creating an inclusive community]]></title>
            <link>https://blog.cloudflare.com/2024-community-update/</link>
            <pubDate>Fri, 05 Apr 2024 13:00:04 GMT</pubDate>
            <description><![CDATA[ We’re excited to close out Developer Week by sharing updates on our Workers Launchpad program, our latest Developer Challenge, and the work we’re doing to ensure our community spaces – like our Discord and Community forums – are safe and inclusive for all developers ]]></description>
            <content:encoded><![CDATA[ <p></p><p>With millions of developers around the world building on Cloudflare, we are constantly inspired by what you all are building with us. Every Developer Week, we’re excited to get your hands on new products and features that can help you be more productive, and creative, with what you’re building. But we know our job doesn’t end when we put new products and features in your hands during Developer Week. We also need to cultivate welcoming community spaces where you can come get help, share what you’re building, and meet other developers building with Cloudflare.</p><p>We’re excited to close out Developer Week by sharing updates on our Workers Launchpad program, our latest Developer Challenge, and the work we’re doing to ensure our community spaces – like our Discord and Community forums – are safe and inclusive for all developers.</p>
    <div>
      <h3>Helping startups go further with Workers Launchpad</h3>
      <a href="#helping-startups-go-further-with-workers-launchpad">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3o4VVoNQNo8wsyIhpDVu8Y/a102faa451bd9cc03e88f850f66bbe2e/image2-13.png" />
            
            </figure><p>In late 2022, we initiated the <a href="https://www.businesswire.com/news/home/20221117005263/en/Cloudflare%E2%80%99s-%E2%80%9CWorkers-Launchpad%E2%80%9D-Funding-Program-Grows-to-2-Billion-Announces-First-Cohort-of-Startups">$2 billion Workers Launchpad Funding Program</a> aimed at aiding the more than one million developers who use Cloudflare's Developer Platform. This initiative particularly benefits startups that are investing in building on Cloudflare to propel their business growth.</p><p>The Workers Launchpad Program offers a variety of resources to help builders scale faster and reach more customers. The program includes, but is not limited to:</p><ul><li><p>Fostering a community of like-minded founders</p></li><li><p>Facilitating introductions to the Launchpad’s VC partner network of 40+ leading investors</p></li><li><p>Company-building support and mentorship through virtual Founders Bootcamp sessions</p></li><li><p>Organizing technical office hours with our engineers</p></li><li><p>Access to preview upcoming Cloudflare products and Product Managers</p></li><li><p>Culminating in a Demo Day, for participants to share their stories globally with investors and prospective customers.</p></li></ul><p>So far, 50 amazing startups from 13 countries have successfully graduated from the Workers Launchpad program. We finished up <a href="https://cloudflare.tv/shows/workers-launchpad-demo-day/workers-launchpad-demo-day-cohort-1/5ZnnPRZA">Cohort #1</a> in March 2023, and <a href="https://cloudflare.tv/shows/workers-launchpad-demo-day/workers-launchpad-demo-day-cohort-2/3vVqLOgq">Cohort #2</a> wrapped up August 2023.</p>
    <div>
      <h3>Meet Cohort #3 of the Workers Launchpad!</h3>
      <a href="#meet-cohort-3-of-the-workers-launchpad">
        
      </a>
    </div>
    <p>Since the end of Cohort #2, we have received hundreds of new applications from startups across the globe. Startup applicants showcased incredible tools and software across a variety of industries, including AI, SaaS, Supply Chain, Media, Gaming, Hospitality, and Developer Productivity. While we were encouraged by this wave of applicants' ability to build amazing technology, there were a few that stood out that are leveraging Cloudflare’s Developer Suite to scale their business.</p><p>With that being said, we would like to introduce you to the <b>29</b> startups that have been chosen to participate in Cohort #3 of Workers Launchpad:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/22LQ03omUvMEgQUGjtWzjw/7ebdcad1968f750fd021beb7e5cf7b76/image4-9.png" />
            
            </figure><p>Below, you will find a brief summary of what problems these startups are looking to solve:</p>
<table>
  <tr>
    <td><a href="https://www.autoblocks.ai/"><span>Autoblocks AI</span></a></td>
    <td><span>Evaluation &amp; testing platform to improve AI product quality.</span></td>
  </tr>
  <tr>
    <td><a href="https://www.massluminosity.com/"><span>BEAM (by Mass Luminosity)</span></a></td>
    <td><span>A next-gen live streaming platform that elevates creator-viewer interactions to the next level.</span></td>
  </tr>
  <tr>
    <td><a href="https://bentoml.com/"><span>BentoML</span></a></td>
    <td><span>Run any AI model in your cloud.</span></td>
  </tr>
  <tr>
    <td><a href="https://bohr.io/"><span>bohr.io</span></a></td>
    <td><span>An easy and fast development platform.</span></td>
  </tr>
  <tr>
    <td><a href="https://cleverev.net/"><span>CleverEV</span></a></td>
    <td><span>Manage EV charging infrastructure and experience for clients.</span></td>
  </tr>
  <tr>
    <td><a href="https://cloneable.ai/"><span>Cloneable</span></a></td>
    <td><span>Provides low/no-code tools to build and deploy applications to any device, instantly.</span></td>
  </tr>
    <tr>
    <td><a href="https://diaflow.io/"><span>Diaflow (by Toothless)</span></a></td>
    <td><span>Build GenAI-powered workflow automation and internal tools in minutes.</span></td>
  </tr>  
    <tr>
    <td><a href="https://dulia.io/"><span>Dulia</span></a></td>
    <td><span>Managed edge powered serverless AI platform.</span></td>
  </tr>
  <tr>
    <td><a href="https://erxes.io/"><span>Erxes</span></a></td>
    <td><span>Open-source experience operating system empowering businesses.</span></td>
  </tr>
  <tr>
    <td><a href="https://exporio.cloud/"><span>Exporio</span></a></td>
    <td><span>AI-first A/B testing and personalization platform.</span></td>
  </tr>
  <tr>
    <td><a href="https://helicone.ai/"><span>Helicone</span></a></td>
    <td><span>GenAI observability platform built for developers.</span></td>
  </tr>
  <tr>
    <td><a href="https://www.houdinigraphql.com/"><span>Houdini</span></a></td>
    <td><span>An end-to-end solution for building and deploying GraphQL applications.</span></td>
  </tr>
  <tr>
    <td><a href="https://intelligage.io/"><span>Intelligage</span></a></td>
    <td><span>Humanize your AI for customers.</span></td>
  </tr>
  <tr>
    <td><a href="http://langbase.com/"><span>Langbase</span></a></td>
    <td><span>Ship hyper-personalized AI apps in seconds — any LLM, any data, any developer.</span></td>
  </tr>
  <tr>
    <td><a href="https://milkshake.app/"><span>Milkshake</span></a></td>
    <td><span>Create websites via mobile within minutes.</span></td>
  </tr>
  <tr>
    <td><a href="https://nadrama.com/"><span>Nadrama</span></a></td>
    <td><span>Kubernetes PaaS in your cloud account, in minutes.</span></td>
  </tr>
  <tr>
    <td><span><a href="https://hub.nuxt.com"><span>NuxtHub</span></a> (by </span><a href="http://nuxtlabs.com/"><span>NuxtLabs</span></a><span>)</span></td>
    <td><span>Build full-stack applications on Cloudflare with zero configuration.</span></td>
  </tr>
  <tr>
    <td><a href="https://www.panaptico.com/"><span>Panaptico</span></a></td>
    <td><span>High performance networking fabrics for specialized workloads.</span></td>
  </tr>
  <tr>
    <td><a href="https://www.joinplayroom.com/"><span>Playroom</span></a></td>
    <td><span>Platform for game developers to build multiplayer games in minutes.</span></td>
  </tr>
  <tr>
    <td><a href="https://puzzlelabs.ai/"><span>Puzzle Labs</span></a></td>
    <td><span>P2P, prompt-first knowledge base for teams to collaborate with AI.</span></td>
  </tr>
  <tr>
    <td><a href="https://resilis.io/"><span>Resilis</span></a></td>
    <td><span>Intelligent edge caching for REST APIs.</span></td>
  </tr>
  <tr>
    <td><a href="https://scrappi.com/"><span>Scrappi</span></a></td>
    <td><span>A better way to collect, create and collaborate.</span></td>
  </tr>
  <tr>
    <td><a href="https://starlightlabs.co/"><span>Starlight Labs</span></a></td>
    <td><span>AI native game studio.</span></td>
  </tr>
  <tr>
    <td><a href="https://t4stack.com/"><span>T4 Stack</span></a></td>
    <td><span>Ship feature parity on universal apps.</span></td>
  </tr>
  <tr>
    <td><a href="https://textcortext.com/"><span>TextCortex AI</span></a></td>
    <td><span>AI copilot platform to leverage the power of easy customization and integration.</span></td>
  </tr>
  <tr>
    <td><a href="https://unfetch.com/"><span>Unfetch</span></a></td>
    <td><span>Generate and run scripts with AI to complete tasks within seconds.</span></td>
  </tr>
  <tr>
    <td><a href="https://unkey.dev/"><span>Unkey</span></a></td>
    <td><span>Redefines API management for developers. Add authentication, analytics, and rate-limiting to your APIs in minutes.</span></td>
  </tr>
  <tr>
    <td><a href="https://unnug.com/"><span>Unnug</span></a></td>
    <td><span>Transformative cloud compiler with an emphasis on user on-premises, cloud, and edge resources.</span></td>
  </tr>
  <tr>
    <td><a href="https://wope.com/"><span>Wope</span></a></td>
    <td><span>AI-powered marketing agent that leverages Gen AI to optimize businesses' online presence and drive more traffic.</span></td>
  </tr>
</table><p>The Cloudflare team is looking forward to working with Cohort #3 participants and sharing what they are building on Cloudflare. To follow along with Cohort #3 of Workers Launchpad, follow <a href="https://twitter.com/CloudflareDev">@CloudflareDev</a> and join our <a href="https://discord.cloudflare.com/">Developer Discord</a> server.</p><p>Are you a startup and interested in joining Cohort #4? Apply <a href="https://cfl.re/launchpad">here</a>!</p>
    <div>
      <h3>AI developer challenge</h3>
      <a href="#ai-developer-challenge">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6uJzbIHQKIDkfxkvADC3WU/5ffa47dc2a72eb3f82d67b435c9a88ae/image3-10.png" />
            
            </figure><p>Now that <a href="/workers-ai-ga-huggingface-loras-python-support">Workers AI is GA</a>, we’re excited to see what our community can build.  We’ve teamed up with our friends at DEV who will be running an <a href="https://dev.to/devteam/join-us-for-the-cloudflare-ai-challenge-3000-in-prizes-5f99">AI Developer challenge</a>, which officially launched on Wednesday, April 3, and runs until Sunday, April 14, 2024, when submissions close.</p><p>For this challenge, you will build a Workers AI application that makes use of AI task types from Cloudflare’s growing catalog of <a href="https://developers.cloudflare.com/workers-ai/models/">Open Models</a>. Apps will be evaluated on innovation, creativity, and demonstration of underlying technology with prizes awarded by DEV for the best overall app, as well as projects leveraging multiple models and tasks. For more information and details on how to participate, including DEV’s rules and requirements, head over to the <a href="https://dev.to/challenges/cloudflare">official challenge page</a>.</p>
    <div>
      <h3>Creating an inclusive community</h3>
      <a href="#creating-an-inclusive-community">
        
      </a>
    </div>
    <p>Our community has been growing really fast over the past year, so fast that it’s becoming more difficult to welcome each new member that joins our Discord server every day, and Developer Week has always been one of the main drivers of this growth.</p><p>When you come into the Cloudflare developer community, it’s important to us that you’re entering a space that is safe and welcoming. Even though we already have rules for the server and community forums, we needed guidelines for our community programs, so that’s why we’ve created a new <a href="https://community.cloudflare.com/t/cloudflare-community-programs-code-of-conduct/637702">Code of Conduct</a> that promotes inclusivity, respect, and will help us create a better community for everyone.</p><p>Do you want to be part of this and help us create a more inclusive and helpful community? Then please share your feedback and tell us what you would like to see improved in our community and our Discord server in this <a href="https://discord.com/channels/595317990191398933/1224816612423766097">thread</a>.</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Community]]></category>
            <guid isPermaLink="false">1SjE8JApK53MLw5DsSpr2O</guid>
            <dc:creator>Ricky Robinett</dc:creator>
            <dc:creator>Veronica Marin</dc:creator>
            <dc:creator>Christopher Rotas</dc:creator>
        </item>
        <item>
            <title><![CDATA[LangChain Support for Workers AI, Vectorize and D1]]></title>
            <link>https://blog.cloudflare.com/langchain-support-for-workers-ai-vectorize-and-d1/</link>
            <pubDate>Wed, 31 Jan 2024 14:00:12 GMT</pubDate>
            <description><![CDATA[ During Developer Week, we announced LangChain support for Cloudflare Workers. Since then, we’ve been working with the LangChain team on deeper integration of many tools across Cloudflare’s developer platform and are excited to share what we’ve been up to ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7vfmv2IUCSWhFxb0iIhRwp/d0ac73a938febe9bc24538979871acba/X2uuTU5jqOf4kskV9IUy6-EFJtW1QL7NCTeaIK1Ezs29fHv5rxii32xZ_eAu-9IHMQQhzevrxEeUR4Zq5_C0Y_HmIciI-GZaj-RbEnRI4vnshmYAV6jymeq1KXQr.png" />
            
            </figure><p>During Developer Week, we announced <a href="/langchain-and-cloudflare/">LangChain support for Cloudflare Workers</a>. Langchain is an open-source framework that allows developers to create powerful AI workflows by combining different models, providers, and plugins using a declarative API — and it dovetails perfectly with Workers for creating full stack, AI-powered applications.</p><p>Since then, we’ve been working with the LangChain team on deeper integration of many tools across Cloudflare’s developer platform and are excited to share what we’ve been up to.</p><p>Today, we’re announcing five new key integrations with LangChain:</p><ol><li><p><a href="https://js.langchain.com/docs/integrations/chat/cloudflare_workersai">Workers AI Chat Models</a>: This allows you to use <a href="https://developers.cloudflare.com/workers-ai/models/text-generation/">Workers AI text generation</a> to power your chat model within your LangChain.js application.</p></li><li><p><a href="https://js.langchain.com/docs/integrations/llms/cloudflare_workersai">Workers AI Instruct Models</a>: This allows you to use Workers AI models fine-tuned for instruct use-cases, such as Mistral and CodeLlama, inside your Langchain.js application.</p></li><li><p><a href="https://js.langchain.com/docs/integrations/text_embedding/cloudflare_ai">Text Embeddings Models</a>: If you’re working with text embeddings, you can now use <a href="https://developers.cloudflare.com/workers-ai/models/text-embeddings/">Workers AI text embeddings</a> with LangChain.js.</p></li><li><p><a href="https://js.langchain.com/docs/integrations/vectorstores/cloudflare_vectorize">Vectorize Vector Store</a>: When working with a Vector database and LangChain.js, you now have the option of using <a href="https://developers.cloudflare.com/vectorize/">Vectorize</a>, Cloudflare’s powerful vector database.</p></li><li><p><a href="https://js.langchain.com/docs/integrations/chat_memory/cloudflare_d1">Cloudflare D1-Backed Chat Memory</a>: For longer-term persistence across chat sessions, you can swap out LangChain’s default in-memory chatHistory that backs chat memory classes like BufferMemory for a <a href="https://developers.cloudflare.com/d1/">Cloudflare D1 instance</a>.</p></li></ol><p>With the addition of these five Cloudflare AI tools into LangChain, developers have powerful new primitives to integrate into new and existing AI applications. With LangChain’s expressive tooling for mixing and matching AI tools and models, you can use Vectorize, Cloudflare AI’s text embedding and generation models, and <a href="https://www.cloudflare.com/developer-platform/products/d1/">Cloudflare D1 </a>to build a fully-featured AI application in just a few lines of code.</p><blockquote><p>This is a full persistent chat app powered by an LLM in 10 lines of code–deployed to <a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> Workers, powered by <a href="https://twitter.com/LangChainAI?ref_src=twsrc%5Etfw">@LangChainAI</a> and <a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> D1.</p><p>You can even pass in a unique sessionId and have completely user/session-specific conversations 🤯 <a href="https://t.co/le9vbMZ7Mc">https://t.co/le9vbMZ7Mc</a> <a href="https://t.co/jngG3Z7NQ6">pic.twitter.com/jngG3Z7NQ6</a></p><p>— Kristian Freeman (@kristianf_) <a href="https://twitter.com/kristianf_/status/1704592544099631243?ref_src=twsrc%5Etfw">September 20, 2023</a></p></blockquote>
    <div>
      <h3>Getting started with a Cloudflare + LangChain + Nuxt Multi-source Chatbot template</h3>
      <a href="#getting-started-with-a-cloudflare-langchain-nuxt-multi-source-chatbot-template">
        
      </a>
    </div>
    <p>You can get started by using LangChain’s Cloudflare Chatbot template: <a href="https://github.com/langchain-ai/langchain-cloudflare-nuxt-template">https://github.com/langchain-ai/langchain-cloudflare-nuxt-template</a></p><p>This application shows how various pieces of Cloudflare Workers AI fit together and expands on the concept of <a href="https://developers.cloudflare.com/workers-ai/tutorials/build-a-retrieval-augmented-generation-ai/">retrieval augmented generation (RAG)</a> to build a conversational retrieval system that can route between multiple data sources, choosing the one more relevant based on the incoming question. This method helps cut down on distraction from off-topic documents getting pulled in by a vector store’s similarity search, which could occur if only a single database were used.</p><p>The base version runs entirely on the Cloudflare Workers AI stack with the Llama 2-7B model. It uses:</p><ul><li><p>A chat variant of Llama 2-7B run on Cloudflare Workers AI</p></li><li><p>A Cloudflare Workers AI embeddings model</p></li><li><p>Two different Cloudflare Vectorize DBs (though you could add more!)</p></li><li><p>Cloudflare Pages for hosting</p></li><li><p>LangChain.js for orchestration</p></li><li><p>Nuxt + Vue for the frontend</p></li></ul><p>The two default data sources are <a href="https://www.cloudflare.com/resources/assets/slt3lc6tev37/3HWObubm6fybC0FWUdFYAJ/5d5e3b0a4d9c5a7619984ed6076f01fe/Cloudflare_for_Campaigns_Security_Guide.pdf">a PDF detailing some of Cloudflare's features</a> and <a href="https://lilianweng.github.io/posts/2023-06-23-agent/">a blog post by Lilian Weng at OpenAI</a> that talks about autonomous agents.</p><p>The bot will classify incoming questions as being about Cloudflare, AI, or neither, and draw on the corresponding data source for more targeted results. Everything is fully customizable - you can change the content of the ingested data, the models used, and all prompts!</p><p>And if you have access to the <a href="https://smith.langchain.com/">LangSmith</a> beta, the app also has tracing set up so that you can easily <a href="https://smith.langchain.com/public/24807f4a-4335-497e-bfbf-3a1de019b22e/r">see and debug each step</a> in the application.</p>
    <div>
      <h3>We can’t wait to see what you build</h3>
      <a href="#we-cant-wait-to-see-what-you-build">
        
      </a>
    </div>
    <p>We can't wait to see what you all build with LangChain and Cloudflare. Come tell us about it in <a href="https://discord.cloudflare.com/">discord</a> or on our <a href="https://community.cloudflare.com/">community forums</a>.</p> ]]></content:encoded>
            <category><![CDATA[LangChain]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[D1]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">5JnxNQ7W8w3O5d2wAroT18</guid>
            <dc:creator>Ricky Robinett</dc:creator>
            <dc:creator>Kristian Freeman</dc:creator>
            <dc:creator>Jacob Lee (Guest Author)</dc:creator>
        </item>
        <item>
            <title><![CDATA[A step-by-step guide to transferring domains to Cloudflare]]></title>
            <link>https://blog.cloudflare.com/a-step-by-step-guide-to-transferring-domains-to-cloudflare/</link>
            <pubDate>Fri, 23 Jun 2023 09:25:49 GMT</pubDate>
            <description><![CDATA[ Getting the domain transfer process wrong could mean downtime and disruption. We’ve built a domain transfer checklist to help you quickly and safely transfer your domains to Cloudflare ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5m5xyu3d7H4TFzymFCKDWZ/56264f55a7a3d1d72f799f4018577c62/image1-36.png" />
            
            </figure><p><a href="https://www.cloudflare.com/learning/dns/how-to-transfer-a-domain-name/">Transferring your domains</a> to a new <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrar</a> isn’t something you do every day, and getting any step of the process wrong could mean downtime and disruption. That’s why this Speed Week we’ve prepared a domain transfer checklist. We want to empower anyone to quickly transfer their domains to <a href="https://www.cloudflare.com/products/registrar/">Cloudflare Registrar</a>, without worrying about missing any steps along the way or being left with any unanswered questions.</p>
    <div>
      <h2>Domain Transfer Checklist</h2>
      <a href="#domain-transfer-checklist">
        
      </a>
    </div>
    
    <div>
      <h3>Confirm eligibility</h3>
      <a href="#confirm-eligibility">
        
      </a>
    </div>
    <ul><li><p><b>Confirm you want to use Cloudflare’s nameservers:</b> We <a href="/cloudflare-registrar/">built our registrar specifically for customers</a> who want to use other Cloudflare products. This means domains registered with Cloudflare can only use our <a href="https://www.cloudflare.com/learning/dns/dns-records/dns-ns-record/">nameservers</a>. <i>If your domain requires non-Cloudflare nameservers then we’re not the right registrar for you.</i></p></li><li><p><b>Confirm Cloudflare supports your domain’s </b><a href="https://www.cloudflare.com/learning/dns/top-level-domain/"><b>TLD</b></a><b>:</b> You can view the <a href="https://www.cloudflare.com/tld-policies/">full list of TLDs we currently support here</a>. <i>Note: We plan to support </i><a href="https://www.cloudflare.com/application-services/products/registrar/buy-dev-domains/"><i>.dev </i></a><i>and </i><a href="https://www.cloudflare.com/application-services/products/registrar/buy-app-domains/"><i>.app</i></a><i> by mid-July 2023.</i></p></li><li><p><b>Confirm your domain is not a premium domain or internationalized domain name (IDNs): </b> Cloudflare currently does not support premium domains or internationalized domain names (Unicode).</p></li><li><p><b>Confirm your domain hasn’t been registered or transferred in the past 60 days:</b> ICANN rules prohibit a domain from being transferred if it has been registered or previously transferred within the last 60 days.</p></li><li><p><b>Confirm your WHOIS Registrant contact information hasn’t been updated in the past 60 days:</b> ICANN rules also prohibit a domain from being transferred if the WHOIS Registrant contact information was modified in the past 60 days.</p></li></ul>
    <div>
      <h3>Before you transfer</h3>
      <a href="#before-you-transfer">
        
      </a>
    </div>
    <ul><li><p><b>Gather your credentials for your current registrar: </b> Make sure you have your credentials for your current registrar. It’s possible you haven’t logged in for many years and you may have to reset your password.</p></li><li><p><b>Make note of your current DNS settings: </b> Make note of your current DNS settings: When transferring your domain, Cloudflare will automatically scan your <a href="https://www.cloudflare.com/learning/dns/dns-records/">DNS records</a>, but you’ll want to capture your current settings in case there are any issues. If your current provider supports it, you could use the standard <a href="https://en.wikipedia.org/wiki/Zone_file">BIND Zone File format</a> to export your records.</p></li><li><p><b>Remove WHOIS privacy (if necessary): </b> In most cases, domains may be transferred even if WHOIS privacy services have been enabled. However, some registrars may prohibit the transfer if the WHOIS privacy service has been enabled.</p></li><li><p><b>Disable DNSSEC: </b> You can disable <a href="https://www.cloudflare.com/dns/dnssec/how-dnssec-works/">DNSSEC</a> by removing the DS record at your current DNS host and <a href="https://developers.cloudflare.com/registrar/account-options/enable-dnssec/">disabling DNSSEC in the Cloudflare dashboard</a>.</p></li><li><p><b>Renew your domain if up for renewal in the next 15 days: </b> If your domain is up for renewal, you’ll need to renew it with your current registrar before initiating a transfer to Cloudflare.</p></li><li><p><b>Unlock the domain:</b> Registrars include a lightweight safeguard to prevent unauthorized users from starting domain transfers – often called a <a href="https://www.cloudflare.com/products/registrar/custom-domain-protection/">registrar or domain lock</a>. This lock prevents any other registrar from attempting to initiate a transfer. Only the registrant can enable or disable this lock, typically through the administration interface of the registrar.</p></li><li><p><b>Sign up for Cloudflare: </b> If you don’t already have a Cloudflare account, you can <a href="https://dash.cloudflare.com/sign-up">sign up here</a>.</p></li><li><p><b>Add your domain to Cloudflare: </b> You can add a new domain to your Cloudflare account by <a href="https://developers.cloudflare.com/fundamentals/get-started/setup/add-site/">following these instructions</a>.</p></li><li><p><b>Add a valid credit card to your Cloudflare account: </b> If you haven’t already added a payment method into your  Cloudflare dashboard billing profile, you’ll be prompted to add one when you add your domain.</p></li><li><p><b>Review DNS records at Cloudflare: </b> Once you’ve added your domain, <a href="https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/#review-dns-records">review the DNS records that Cloudflare automatically configured</a> with what you have at your current registrar to make sure nothing was missed.</p></li><li><p><b>Change your DNS nameservers to Cloudflare: </b> In order to transfer your domain, your <a href="https://developers.cloudflare.com/dns/zone-setups/full-setup/">nameservers will need to be set to Cloudflare</a>.</p></li><li><p><b>(optional) Configure Cloudflare Email Routing:</b> If you’re using <a href="https://www.cloudflare.com/learning/email-security/what-is-email-routing/">email forwarding</a>, ensure that you <a href="/migrating-to-cloudflare-email-routing/">follow this guide to migrate to Cloudflare Email Routing</a>.</p></li><li><p><b>Wait for your DNS changes to propagate</b>: Registrars can take up to 24 hours to process nameserver updates. You will receive an email when Cloudflare has confirmed that these changes are in place. You can’t proceed with transferring your domain until this process is complete.</p></li></ul>
    <div>
      <h3>Initiating and confirming transfer process</h3>
      <a href="#initiating-and-confirming-transfer-process">
        
      </a>
    </div>
    <ul><li><p><b>Request an authorization code:</b> Cloudflare needs to confirm with your old registrar that the transfer flow is authorized. To do that, your old registrar will provide an authorization code to you. This code is often referred to as an authorization code, auth code, authinfo code, or transfer code. You will need to input that code to complete your transfer to Cloudflare. We will use it to confirm the transfer is authentic.</p></li><li><p><b>Initiate your transfer to Cloudflare:</b> Visit the <a href="https://dash.cloudflare.com/?to=/:account/domains/transfer">Transfer Domains section</a> of your Cloudflare dashboard. Here you’ll be presented with any domains available for transfer. If your domain isn’t showing, ensure you completed all the proceeding steps. If you have, <a href="https://developers.cloudflare.com/registrar/get-started/transfer-domain-to-cloudflare/#5-initiate-your-transfer-to-cloudflare">review the list on this page</a> to see if any apply to your domain.</p></li><li><p><b>Review the transfer price:</b> When you transfer a domain, you are required by ICANN to pay to extend its registration by one year from the expiration date. You will not be billed at this step. Cloudflare will only bill your card when you input the auth code and confirm the contact information at the conclusion of your transfer request.</p></li><li><p><b>Input your authorization code:</b> In the next page, input the authorization code for each domain you are transferring.</p></li><li><p><b>Confirm or input your contact information:</b> In the final stage of the transfer process, input the contact information for your registration. Cloudflare Registrar redacts this information by default but is required to collect the authentic contact information for this registration.</p></li><li><p><b>Approve the transfer with Cloudflare:</b> Once you have requested your transfer, Cloudflare will begin processing it, and send a Form of Authorization (FOA) email to the registrant, if the information is available in the public WHOIS database. The FOA is what authorizes the domain transfer.</p></li><li><p><b>Approve the transfer with your previous registrar:</b> After this step, your previous registrar will also email you to confirm your request to transfer. Most registrars will include a link to confirm the transfer request. If you follow that link, you can accelerate the transfer operation. If you do not act on the email, the registrar can wait up to five days to process the transfer to Cloudflare. You may also be able to approve the transfer from within your current registrar dashboard.</p></li><li><p><b>Follow your transfer status in your Cloudflare dashboard:</b> Your domain <a href="https://developers.cloudflare.com/registrar/get-started/transfer-domain-to-cloudflare/#transfer-statuses">transfer status</a> will be viewable under Account Home &gt; Overview &gt; Domain Registration for your domain.</p></li></ul>
    <div>
      <h3>After you transfer</h3>
      <a href="#after-you-transfer">
        
      </a>
    </div>
    <ul><li><p><b>Test your site and email:</b> After the transfer is complete, you’ll want to test your site to ensure everything is working properly. If you encounter any issues or have any questions you can always talk with us on our <a href="https://community.cloudflare.com">community forums</a> or <a href="https://discord.cloudflare.com/">Discord server</a>.</p></li><li><p><b>Build something new:</b> Perhaps this is a domain that you bought but haven’t launched anything on yet. Now that you’ve transferred it, it’s a great time to build and launch something new on it. You could <a href="https://developers.cloudflare.com/pages/get-started/c3/">start a new project built on your favorite frontend framework using C3</a>, <a href="https://developers.cloudflare.com/pages/tutorials/build-a-blog-using-nuxt-and-sanity/">build a blog using Nuxt.js and Sanity.io on Cloudflare Pages</a>, or <a href="/magic-in-minutes-how-to-build-a-chatgpt-plugin-with-cloudflare-workers/">try building your first ChatGPT plugin with Cloudflare Workers</a>.</p></li></ul><p></p> ]]></content:encoded>
            <category><![CDATA[Speed Week]]></category>
            <category><![CDATA[Registrar]]></category>
            <guid isPermaLink="false">5c81CYDEsT2QhMZUb9llqF</guid>
            <dc:creator>Ricky Robinett</dc:creator>
        </item>
        <item>
            <title><![CDATA[Recapping Developer Week]]></title>
            <link>https://blog.cloudflare.com/developer-week-2023-wrap-up/</link>
            <pubDate>Mon, 22 May 2023 13:00:45 GMT</pubDate>
            <description><![CDATA[ Developer Week 2023 is officially a wrap. Let’s take a look at everything we shipped last week ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5qWUJQ8FUS29Sd4V8fUad0/227aaf519821a76ac4e8133a1e3bc2ab/image1-60.png" />
            
            </figure><p>Developer Week 2023 is officially a wrap. Last week, we shipped 34 posts highlighting what has been going on with our developer platform and where we’re headed in the future – including new products &amp; features, in-depth tutorials to help you get started, and customer stories to inspire you.</p><p>We’ve loved already hearing feedback from you all about what we’ve shipped:</p><blockquote><p>🤯 Serverless machine learning deployments - OMG! We used to need a team of devops to deploy a todo list MVP, it’s now 3 clicks with workers. They’re gonna do the same with ML workloads. Just like that. Boom. <a href="https://t.co/AcKUQ79fv0">https://t.co/AcKUQ79fv0</a></p><p>— Thibaut Tiberghien (@tibotiber) <a href="https://twitter.com/tibotiber/status/1658295956574703616?ref_src=twsrc%5Etfw">May 16, 2023</a></p></blockquote><blockquote><p>.<a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> is totally rocking it with these AI releases 🤘 <a href="https://t.co/7dQb6TUWg3">https://t.co/7dQb6TUWg3</a></p><p>— Philipp Tsipman (@ptsi) <a href="https://twitter.com/ptsi/status/1658695906483642371?ref_src=twsrc%5Etfw">May 17, 2023</a></p></blockquote><blockquote><p>Love this direction, for open source, for demos and running things on edge.</p><p>It's still in development, but as someone who've built an AI product on top of Cloudflare and has been asking for something like this, I'm really excited! <a href="https://t.co/AnywRDqecb">https://t.co/AnywRDqecb</a></p><p>— Altryne - targum.video (@altryne) <a href="https://twitter.com/altryne/status/1658134302700470274?ref_src=twsrc%5Etfw">May 15, 2023</a></p></blockquote><blockquote><p>I've been waiting for this. Next on my list is a <a href="https://twitter.com/remix_run?ref_src=twsrc%5Etfw">@remix_run</a> app using <a href="https://twitter.com/CockroachDB?ref_src=twsrc%5Etfw">@CockroachDB</a> deployed to Workers. The new multi-region capabilities of <a href="https://twitter.com/hashtag/CockroachDB?src=hash&amp;ref_src=twsrc%5Etfw">#CockroachDB</a> <a href="https://twitter.com/hashtag/serverless?src=hash&amp;ref_src=twsrc%5Etfw">#serverless</a> should pair wonderfully with <a href="https://twitter.com/Cloudflare?ref_src=twsrc%5Etfw">@Cloudflare</a> deployments. <a href="https://t.co/RwnJ2K0ToY">https://t.co/RwnJ2K0ToY</a></p><p>— Aydrian Howard (@itsaydrian) <a href="https://twitter.com/itsaydrian/status/1658480164152672260?ref_src=twsrc%5Etfw">May 16, 2023</a></p></blockquote><blockquote><p>Yes! Loving this! I definitely this is the right direction and will help the general DevX and onboarding to the platform a lot ❤️! <a href="https://t.co/rEQWreeS96">https://t.co/rEQWreeS96</a></p><p>— Adrien Baron (@BaronAdri) <a href="https://twitter.com/BaronAdri/status/1659094809133342720?ref_src=twsrc%5Etfw">May 18, 2023</a></p></blockquote><p>We hope you’re able to spend the coming weeks slinging some code and experimenting with some of the new tools we shipped last week. As you’re building, join us in our <a href="http://discord.cloudflare.com/">developers discord</a> and let us know what you think.</p><p>In case you missed any of our announcements here’s a handy recap:</p>
    <div>
      <h3>AI announcements</h3>
      <a href="#ai-announcements">
        
      </a>
    </div>
    <table>
<thead>
  <tr>
    <th>Announcement</th>
    <th>Summary</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/ai-will-transform-programming/">Batteries included: how AI will transform the who and how of programming </a></td>
    <td>The emergence of large language models (LLMs) is going to change the way developers write, debug, and modify code. Developer Platforms need to evolve to integrate AI capabilities to assist developers in their journeys. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/introducing-constellation/">Introducing Constellation, bringing AI to the Cloudflare stack </a></td>
    <td>Run pre-trained machine learning models and inference tasks on Cloudflare’s global network with Constellation AI. We’ll maintain a catalog of verified and ready-to-use models, or you can upload and train your own. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/introducing-cursor-the-ai-assistant-for-docs/">Introducing Cursor: the Cloudflare AI Assistant</a></td>
    <td>When getting started with a new technology comes a lot of questions on how to get started. Finding answers quickly is a time-saver. To help developers build in the fastest way possible we’ve introduced Cursor,  an experimental AI assistant, to answer questions you may have about the Developer Platform. The assistant responds with both text and relevant links to our documentation to help you go further. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/cloudflare-chatgpt-plugins/">Query Cloudflare Radar and our docs using ChatGPT plugins </a></td>
    <td>ChatGPT, recently allowed the ability for developers to create custom extensions to make ChatGPT even more powerful.  It’s now possible to provide guidance to the conversational workflows within ChatGPT such as up-to-date statistics and product information. We’ve published plugins for Radar and our Developer Documentation and a tutorial showing how you can <a href="http://staging.blog.mrk.cfdata.org/magic-in-minutes-how-to-build-a-chatgpt-plugin-with-cloudflare-workers/">build your own plugin using Workers</a>. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/zero-trust-ai-security/">A complete suite of Zero Trust security tools to help get the most from AI</a> </td>
    <td>With any new technology comes concerns about risk and AI is no different. If you want to build with AI and maintain a Zero Trust security posture, <a href="http://staging.blog.mrk.cfdata.org/zero-trust-ai-security/">Cloudflare One offers a collection of features to build with AI</a> without increased risk. We’ve also compiled some best practices around securing your LLM. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/cloudflare-r2-mosaicml-train-llms-anywhere-faster-cheaper/">Cloudflare R2 and MosaicML enable training LLMs on any compute, anywhere in the world, with zero switching costs</a></td>
    <td>Training large language models requires massive amount of compute which has led AI companies to look at multi-cloud architectures, with R2 and MosaicML companies can build these infrastructures at a fraction of the cost. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/r2-super-slurper-ga/">The S3 to R2 Super Slurper is now Generally Available</a></td>
    <td>After partnering with hundreds of early adopters to migrate objects to R2 during the beta, the Super Slurper is now generally available. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/ai-startups-eligible/">A raft of Cloudflare services for AI startups</a></td>
    <td>AI startups no longer need affiliation with an accelerator or an employee referral to gain access to the Startup Program.  Bootstrapped AI startups can apply today to get free access to Cloudflare services including R2, Workers, Pages, and a host of other security and developer services. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/secure-generative-ai-applications/">How to secure Generative AI applications</a></td>
    <td>11 tips for securing your generative AI application. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/langchain-and-cloudflare/">Using LangChain JS and Cloudflare Workers together</a></td>
    <td>A tutorial on building your first LangChainJS and Workers application to build more sophisticated applications by switching between LLMs or chaining prompts together.</td>
  </tr>
</tbody>
</table>
    <div>
      <h3>Data announcements</h3>
      <a href="#data-announcements">
        
      </a>
    </div>
    <table>
<thead>
  <tr>
    <th>Announcement</th>
    <th>Summary</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/announcing-database-integrations/">Announcing database integrations: a few clicks to connect to Neon, PlanetScale, and Supabase on Workers</a></td>
    <td>We’ve partnered with other database providers, including Neon, PlanetScale, and Supabase, to make authenticating and connecting back to your databases there just work, without having to copy-paste credentials and connection strings back and forth.</td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/workers-tcp-socket-api-connect-databases/">Announcing connect() - a new API for creating TCP sockets from Cloudflare Workers </a></td>
    <td>Connect back to existing PostgreSQL and MySQL databases directly from Workers with outbound TCP sockets allowing you to connect to any database when building with Workers. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/d1-turning-it-up-to-11/">D1: We turned it up to 11</a></td>
    <td>D1 is now not only significantly faster, but has a raft of new features, including the ability to time travel: restore your database to any minute within the last 30 days, without having to make a manual backup.</td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/announcing-workers-smart-placement/">Smart Placement speed up applications by moving code close to your backend - no config needed</a></td>
    <td>Bringing compute closer to the end user isn’t always the right answer to improve performance. Smart Placement for Workers and Pages Functions moves compute to the optimal location whether that is closer to the end user or closer to backend services and data. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/snowflake-r2-global-data-lake/">Use Snowflake with R2 to extend your global data lake</a></td>
    <td>Get valuable insights from your data when you use Snowflake to query data stored in your R2 data lake and load data from R2 into Snowflake’s Data Cloud. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/r2-is-faster-than-s3/">Developer Week Performance Update: Spotlight on R2</a></td>
    <td>Retrieving objects from storage needs to be fast. R2 is 20-40% faster than Amazon S3 when serving media content via public access. </td>
  </tr>
</tbody>
</table>
    <div>
      <h3>Developer experience announcements</h3>
      <a href="#developer-experience-announcements">
        
      </a>
    </div>
    <table>
<thead>
  <tr>
    <th>Announcement</th>
    <th>Summary</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/making-cloudflare-for-web/">Making Cloudflare the best place for your web applications</a></td>
    <td>Create Cloudflare CLI (C3) is a companion CLI to Wrangler giving you a single entry-point to configure Cloudflare via CLI. Pick your framework, all npm dependencies are installed, and you’ll receive a URL for where your application was deployed. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/improved-quick-edit/">A whole new Quick Edit in Cloudflare Workers</a></td>
    <td>QuickEdit for Workers powered by VSCode giving you a familiar environment to edit Workers directly in the dash. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/pages-and-workers-are-converging-into-one-experience/">Bringing a unified developer experience to Cloudflare Workers and Pages</a></td>
    <td>Manage all your Workers scripts and Pages projects from a single place in the Cloudflare dashboard. Over the next year we’ll be working to converge these two separate experiences into one eliminating friction when building.</td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/moderizing-cloudflare-pages-builds-toolbox/">Modernizing the toolbox for Cloudflare Pages builds</a></td>
    <td>Now in beta, the build system for Pages includes the latest versions of Node.js, Python, Hugo, and more. You can opt in to use this for existing projects or stay on the existing system, so your builds won’t break. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/wrangler3/">Improved local development with Wrangler and workerd</a></td>
    <td>Having a local development environment that mimics production as closely as possible helps to ensure everything runs as expected in production. You can test every aspect prior to deployment. Wrangler 3 now leverages Miniflare3 based on workerd with local-by-default development. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/updated-tos/">Goodbye, section 2.8 and  hello to Cloudflare’s new terms of service</a></td>
    <td>Our terms of service were not clear about serving content hosted on the Developer Platform via our CDN. We’ve made it clearer that customers can use the CDN to serve video and other large files  stored on the Developer Platform including Images, Pages, R2, and Stream. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/workers-node-js-apis-stream-path/">More Node.js APIs in Cloudflare Workers-Streams, Pat, StringDecoder</a></td>
    <td>We’ve expanded support Node.js APIs to increase compatibility with the existing ecosystem of open source npm packages.</td>
  </tr>
</tbody>
</table>
    <div>
      <h3>But wait, there’s more</h3>
      <a href="#but-wait-theres-more">
        
      </a>
    </div>
    <table>
<thead>
  <tr>
    <th>Announcement</th>
    <th>Summary</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/powering-platforms-on-workers/">How Cloudflare is powering the next generation of platforms with Workers</a> </td>
    <td>A retrospective on the first year of Workers for Platform, what’s coming next, and featuring how customers like Shopify and Grafbase are building with it. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/building-cloudflare-on-cloudflare/">Building Cloudflare on Cloudflare</a></td>
    <td>A technical deep dive into how we are rearchitecting internal services to use Workers.  </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/secrets-store/">Announcing Cloudflare Secrets Store</a></td>
    <td>A centralized repository to store sensitive data for use across all of Cloudflare’s products. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/messages-at-your-speed-with-concurrency-and-explicit-acknowledgement/">Cloudflare Queues: messages at your speed with consumer concurrency and explicit acknowledgement</a></td>
    <td>Announcing new features for Queues to ensure queues don’t fall behind, and processing time doesn’t slow down. </td>
  </tr>
  <tr>
    <td><a href="http://staging.blog.mrk.cfdata.org/browser-rendering-open-beta/">Workers Browser Rendering API enters open beta</a></td>
    <td>Deploy a Worker script that requires Browser Rendering capabilities through Wrangler. </td>
  </tr>
</tbody>
</table>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <p>If you missed any of the announcements or want to also view the associated Cloudflare TV segments, where blog authors went through each announcement, you can now watch all the <a href="https://cloudflare.tv/shows/developer-week">Developer Week videos on Cloudflare TV</a>.</p> ]]></content:encoded>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">NqW2I3nDOkf5dszWns7si</guid>
            <dc:creator>Ricky Robinett</dc:creator>
            <dc:creator>Dawn Parzych</dc:creator>
        </item>
        <item>
            <title><![CDATA[Using LangChainJS and Cloudflare Workers together]]></title>
            <link>https://blog.cloudflare.com/langchain-and-cloudflare/</link>
            <pubDate>Thu, 18 May 2023 13:00:18 GMT</pubDate>
            <description><![CDATA[ We are incredibly stoked that our friends at LangChain have announced LangChainJS Support for Cloudflare Workers! In this post we'll show you how to build a sample application. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We are incredibly stoked that our friends at LangChain have announced <a href="https://blog.langchain.dev/js-envs/">LangChainJS Support for Multiple JavaScript Environments (including Cloudflare Workers)</a>. During Developer Week 2023 we wanted to celebrate this launch and our future collaborations with LangChain.</p><blockquote><p><i>“Our goal for LangChain is to empower developers around the world to build with AI. We want LangChain to work wherever developers are building, and to spark their creativity to build new and innovative applications. With this new launch, we can't wait to see what developers build with LangChainJS and Cloudflare Workers. And we're excited to put more of Cloudflare's developer tools in the hands of our community in the coming months.” - </i><b><i>Harrison Chase</i></b><i>, Co-Founder and CEO, LangChain</i></p></blockquote><p>In this post, we’ll share why we’re so excited about LangChain and walk you through how to build your first LangChainJS + Cloudflare Workers application.</p><p>For the uninitiated, <a href="https://docs.langchain.com/docs/">LangChain</a> is a framework for building applications powered by <a href="https://www.cloudflare.com/learning/ai/what-is-large-language-model/">large language models (LLMs)</a>. It not only lets you fairly seamlessly switch between different LLMs, but also gives you the ability to chain prompts together. This allows you to build more sophisticated applications across multiple LLMs, something that would be way more complicated without the help of LangChain.</p>
    <div>
      <h3>Building your first LangChainJS + Cloudflare Workers application</h3>
      <a href="#building-your-first-langchainjs-cloudflare-workers-application">
        
      </a>
    </div>
    <p>There are a few prerequisites you have to set up in order to build this application:</p><ol><li><p>An OpenAI account: If you don’t already have one, you can <a href="https://platform.openai.com/signup">sign up for free</a>.</p></li><li><p>A paid Cloudflare Workers account: If you don’t already have an account, you can <a href="https://dash.cloudflare.com/sign-up">sign up here</a> and upgrade your Workers for $5 per month.</p></li><li><p>Node &amp; npm: If this is your first time working with node, you can <a href="https://nodejs.org/en/">get it here</a>.</p></li></ol><p>Next create a new folder called <code>langchain-workers</code>, navigate into that folder and then within that folder run <code>npm create cloudflare@latest</code>.</p><p>When you run <code>npm create cloudflare@latest</code> you’ll select the following options:</p><ul><li><p><b>Where do you want to create your application?</b> <i>langchain-worker</i></p></li><li><p><b><b><b>What type of application do you want to create?</b></b></b><b><b> </b></b><i><b><b>"Hello World" script</b></b></i></p></li><li><p><b><b><b>Do you want to use TypeScript</b></b></b><b><b> </b></b><i><b><b>No</b></b></i></p></li></ul><p><b>Do you want to deploy your application?</b> _No_With our Worker created, we’ll need to set up the environment variable for our OpenAI API Key. You can <a href="https://platform.openai.com/account/api-keys">create an API key in your OpenAI dashboard</a>. Save your new API key someplace safe, then we’ll use wrangler to safely and securely store our API key in an environment variable that our Worker can access:</p>
            <pre><code>npx wrangler secret put OPENAI_API_KEY</code></pre>
            <p>Then we’ll install LangChainjs using npm:</p>
            <pre><code>npm install langchain</code></pre>
            <p>Before we start writing code we can make sure everything is working properly by running <code>wrangler dev</code>. With <code>wrangler dev</code> running you can press <code>b</code> to open a browser. When you do, you'll see “Hello World!” in your browser.</p>
    <div>
      <h3>A sample application</h3>
      <a href="#a-sample-application">
        
      </a>
    </div>
    <p>One common way you may want to use a language model is to combine it with your own text. LangChain is a great tool to accomplish this goal and that’s what we’ll be doing today in our sample application. We’re going to build an application that lets us use the OpenAI language model to ask a question about an article on Wikipedia. Because I live in (and love) Brooklyn, we’ll be using the <a href="https://en.wikipedia.org/wiki/Brooklyn">Wikipedia article about Brooklyn</a>. But you can use this code for any Wikipedia article, or website, you’d like.</p><p>Because language models only know about the data that they were trained on, if we want to use a language model with new or specific information we need a way to pass a model that information. In LangChain we can accomplish this using a <a href="https://js.langchain.com/docs/modules/schema/document">”document”</a>. If you’re like me, when you hear “document” you often think of a specific file format but in LangChain a document is an object that consists of some text and optionally some metadata. The text in a document object is what will be used when interacting with a language model and the metadata is a way that you can track information about your document.</p><p>Most often you’ll want to create documents from a source of pre-existing text. LangChain helpfully provides us with different <a href="https://js.langchain.com/docs/modules/indexes/document_loaders/">document loaders</a> to make loading text from many different sources easy. There are document loaders for different types of text formats (for example: CSV, PDFs, HTML, unstructured text) and that content can be loaded locally or from the web. A document loader will both retrieve the text for you and load that text into a document object. For our application, we’ll be using the <a href="https://js.langchain.com/docs/modules/indexes/document_loaders/examples/web_loaders/web_cheerio">webpages with Cheerio</a> document loader. <a href="https://cheerio.js.org/">Cheerio</a> is a lightweight library that will let us read the content of a webpage. We can install it using <code>npm install cheerio</code>.</p><p>After we’ve installed cheerio we’ll import the CheerioWebBaseLoader at the top of our <code>src/index.js</code> file:</p>
            <pre><code>import { CheerioWebBaseLoader } from "langchain/document_loaders/web/cheerio";</code></pre>
            <p>With CheerioWebBaseLoader imported, we can start using it within our fetch function:.</p>
            <pre><code>    async fetch(request, env, ctx) {
        const loader = new CheerioWebBaseLoader(
          “https://en.wikipedia.org/wiki/Brooklyn"
        );
        const docs = await loader.load();
        console.log(docs);

        return new Response("Hello World!");
  },</code></pre>
            <p>In this code, we’re configuring our loader with the Wikipedia URL for the article about Brooklyn, run the <code>load()</code> function and log the result to the console. Like I mentioned earlier, if you want to try this with a different Wikipedia article or website, LangChain makes it very easy. All we have to do is change the URL we’re passing to our CheerioWebBaseLoader.</p><p>Let’s run <code>npx wrangler dev</code>, load up our page locally and watch the output in our console. You should see:</p>
            <pre><code>Loaded page
Array(1) [ Document ]</code></pre>
            <p>Our document loader retrieved the content of the webpage, put that content in a document object and loaded it into an array.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6eUEj1m3fLXaX22XfWzZc1/9b080aef6c13b4bd4db31c740b2998f1/image7-8.png" />
            
            </figure><p>This is great, but there’s one more improvement we can make to this code before we move on – splitting our text into multiple documents.</p><p>Many language models have limits on the amount of text you can pass to them. As well, some LLM APIs charge based on the amount of text you send in your request. For both of these reasons, it’s helpful to only pass the text you need in a request to a language model.</p><p>Currently, we’ve loaded the entire content of the Wikipedia page about Brooklyn into one document object and would send the entirety of that text with every request to our language model. It would be more efficient if we could only send the relevant text to our language model when we have a question. The first step in doing this is to split our text into smaller chunks that are stored in multiple document objects. To assist with this LangChain gives us the very aptly named <a href="https://js.langchain.com/docs/modules/indexes/text_splitters/">Text Splitters</a>.</p><p>We can use a text splitter by updating our loader to use the <code>loadAndSplit()</code> function instead of <code>load()</code>. Update the line where we assign docs to this:</p>
            <pre><code>const docs = await loader.loadAndSplit();</code></pre>
            <p>Now start the application again with <code>npx wrangler dev</code> and load our page. This time in our console you’ll see something like this:</p>
            <pre><code>Loaded page
Array(227) [ Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document, Document... ]</code></pre>
            <p>Instead of an array with one document object, our document loader has now split the text it retrieved into multiple document objects. It’s still a single Wikipedia article, LangChain just split that text into chunks that would be more appropriately sized for working with a language model.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7qjMlbP8yfVegK2PT9BPm/31015f843d9a5dd7ad1d80f100da91f7/image3-18.png" />
            
            </figure><p>Even though our text is split into multiple documents, we still need to be able to understand what text is relevant to our question and should be sent to our language model. To do this, we’re going to introduce two new concepts – <a href="https://www.cloudflare.com/learning/ai/what-are-embeddings/">embeddings</a> and <a href="https://www.cloudflare.com/learning/ai/what-is-vector-database/">vector stores</a>.</p><p>Embeddings are a way of representing text with numerical data. For our application we’ll be using <a href="https://platform.openai.com/docs/guides/embeddings">OpenAI Embeddings</a> to generate our embeddings based on the document objects we just created. When you generate embeddings the result is a vector of floating point numbers. This makes it easier for computers to understand the relatedness of the strings of text to each other. For each document object we pass the embedding API, a vector will be created.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6WDcDosuQet5YbgNuU1ZQG/657e7684615f81785e69a4cb5fc03be9/image2-28.png" />
            
            </figure><p>When we compare vectors, the closer numbers are to each other the more related the strings are. Inversely, the further apart the numbers are then the less related the strings are. It can be helpful to visualize how these numbers would allow us to place each document in a virtual space:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2bngW4Ms4zz7PZIAZxnR2F/31f66eabc1b8b6b7630fe8bff4ce80f7/image1-47.png" />
            
            </figure><p>In this illustration, you could imagine how the text in the document objects that are bunched together would be more similar than the document object further off. The grouped documents could be text pulled from the article’s section on the history of Brooklyn. It’s a longer section that would have been split into multiple documents by our text splitter. But even though the text was split the embeddings would allow us to know this content is closely related to each other. Meanwhile, the document further away could be the text on the climate of Brooklyn. This section was smaller, not split into multiple documents, and the current climate is not as related to the history of Brooklyn, so it’s placed further away.</p><p>Embeddings are a pretty fascinating and complicated topic. If you’re interested in understanding more, here's a <a href="https://www.youtube.com/watch?v=5MaWmXwxFNQ">great explainer video</a> that takes an in-depth look at the embeddings.</p><p>Once you’ve generated your documents and embeddings, you need to store them someplace for future querying. Vector stores are a kind of database optimized for storing &amp; querying documents and their embeddings. For our vector store, we’ll be using <a href="https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/memory">MemoryVectorStore</a> which is an ephemeral in-memory vector store. LangChain also has support for many of your favorite vector databases like <a href="https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/chroma">Chroma</a> and <a href="https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/pinecone">Pinecone</a>.</p><p>We’ll start by adding imports for OpenAIEmbeddings and MemoryVectorStore at the top of our file:</p>
            <pre><code>import { OpenAIEmbeddings } from "langchain/embeddings/openai";
import { MemoryVectorStore } from "langchain/vectorstores/memory";</code></pre>
            <p>Then we can remove the <code>console.log()</code> function we had in place to show how our loader worked and replace them with the code to create our Embeddings and Vector store:</p>
            <pre><code>const store = await MemoryVectorStore.fromDocuments(docs, new OpenAIEmbeddings({ openAIApiKey: env.OPENAI_API_KEY}));</code></pre>
            <p>With our text loaded into documents, our embeddings created and both stored in a vector store we can now query our text with our language model. To do that we’re going to introduce the last two concepts that are core to building this application – <a href="https://js.langchain.com/docs/modules/models/">models</a> and <a href="https://js.langchain.com/docs/modules/chains/">chains</a>.</p><p>When you see models in LangChain, it’s not about generating or creating models. Instead, LangChain provides a standard interface that lets you access many different language models. In this app, we’ll be using the <a href="https://js.langchain.com/docs/modules/models/llms/integrations#openai">OpenAI model</a>.</p><p>Chains enable you to combine a language model with other sources of information, APIs, or even other language models. In our case, we’ll be using the <a href="https://js.langchain.com/docs/modules/chains/index_related_chains/retrieval_qa">RetreivalQAChain</a>. This chain retrieves the documents from our vector store related to a question and then uses our model to answer the question using that information.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/17hBMkJMZe5P3UHUfdCmCl/db5da651d7f7c204a31d0729fe9f6c5d/image4-18.png" />
            
            </figure><p>To start, we’ll add these two imports to the top of our file:</p>
            <pre><code>import { OpenAI } from "langchain/llms/openai";
import { RetrievalQAChain } from "langchain/chains";</code></pre>
            <p>Then we can put this all into action by adding the following code after we create our vector store:</p>
            <pre><code>        const model = new OpenAI({ openAIApiKey: env.OPENAI_API_KEY});
        const chain = RetrievalQAChain.fromLLM(model, store.asRetriever());

        const question = "What is this article about? Can you give me 3 facts about it?";

        const res = await chain.call({
            query: question,
        });

        return new Response(res.text); </code></pre>
            <p>In this code the first line is where we instantiate our model interface and pass it our API key. Next we create a chain passing it our model and our vector store. As mentioned earlier, we’re using a RetrievalQAChain which will look in our vector store for documents related to our query and then use those documents to get an answer for our query from our model.</p><p>With our chain created, we can call the chain by passing in the query we want to ask. Finally, we send the response text we got from our chain as the response to the request our Worker received. This will allow us to see the response in our browser.</p><p>With all our code in place, let’s test it again by running <code>npx wrangler dev</code>. This time when you open your browser you will see a few facts about Brooklyn:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3Eb3EUM6vGAZVPf1nlkxs/8169139105040b3ac58fa7171791775b/image6-9.png" />
            
            </figure><p>Right now, the question we’re asking is hard coded. Our goal was to be able to use LangChain to ask any question we want about this article. Let’s update our code to allow us to pass the question we want to ask in our request. In this case, we’ll pass a question as an argument in the query string (e.g. <i>?question=When was Brooklyn founded</i>). To do this we’ll replace the line we’re currently assigning our question with the code needed to pull a question from our query string:</p>
            <pre><code>        const { searchParams } = new URL(request.url);
        const question = searchParams.get('question') ?? "What is this article about? Can you give me 3 facts about it?";</code></pre>
            <p>This code pulls all the query parameters from our URL using a JavaScript URL’s native <a href="https://developer.mozilla.org/en-US/docs/Web/API/URL/searchParams">searchParams property</a>, and gets the value passed in for the “question” parameter. If a value isn’t present for the “question” parameter, we’ll use the default question text we were using previously thanks to <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing">JavaScripts’s nullish coalescing operator</a>.</p><p>With this update, run <code>npx wrangler dev</code> and this time visit your <a href="http://127.0.0.1:8787/?question=When%20was%20Brooklyn%20founded?">local url with a question query string added</a>. Now instead of giving us a few fun facts about Brooklyn, we get the answer of when Brooklyn was founded. You can try this with any question you may have about Brooklyn. Or you can switch out the URL in our document loader and try asking similar questions about different Wikipedia articles.</p><p>With our code working locally, we can deploy it with <code>npx wrangler publish</code>. After this command completes you’ll receive a Workers URL that runs your code.</p>
    <div>
      <h3>You + LangChain + Cloudflare Workers</h3>
      <a href="#you-langchain-cloudflare-workers">
        
      </a>
    </div>
    <p>You can find our full LangChain example application on <a href="https://github.com/rickyrobinett/langchainjs-workers">GitHub</a>. We can’t wait to see what you all build with LangChain and Cloudflare Workers. Join us on <a href="https://discord.com/invite/cloudflaredev">Discord</a> or tag us on <a href="https://www.twitter.com/cloudflaredev">Twitter</a> as you’re building. And if you’re ever having any trouble or questions, you can ask on <a href="https://community.cloudflare.com/">community.cloudflare.com</a>.</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[Product News]]></category>
            <category><![CDATA[Serverless]]></category>
            <guid isPermaLink="false">3PgqHl1LP0y4eOryCewoYN</guid>
            <dc:creator>Ricky Robinett</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Cursor: the Cloudflare AI Assistant]]></title>
            <link>https://blog.cloudflare.com/introducing-cursor-the-ai-assistant-for-docs/</link>
            <pubDate>Mon, 15 May 2023 13:00:42 GMT</pubDate>
            <description><![CDATA[ Check out Cursor - our experimental AI assistant trained to answer questions about Cloudflare’s Developer Platform! ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1VAjf7x1mfBG0W9mVTgOGV/06ecaa94b96579f3b5c9afc5fdf1fa3f/cursor-OG.png" />
            
            </figure><p>Today we’re excited to be launching Cursor – <a href="https://developers.cloudflare.com/workers/ai/">our experimental AI assistant</a>, trained to answer questions about Cloudflare’s Developer Platform. This is just the first step in our journey to help developers build in the fastest way possible using AI, so we wanted to take the opportunity to share our vision for a generative developer experience.</p><p>Whenever a new, disruptive technology comes along, it’s not instantly clear what the native way to interact with that technology will be.</p><p>However, if you’ve played around with Large Language Models (LLMs) such as ChatGPT, it’s easy to get the feeling that this is something that’s going to change the way we work. The question is: how? While this technology already feels super powerful, today, we’re still in the relatively early days of it.</p><p>While Developer Week is all about meeting developers where they are, this is one of the things that’s going to change just that — where developers are, and how they build code. We’re already seeing the beginnings of how the way developers write code is changing, and adapting to them. We wanted to share with you how we’re thinking about it, what’s on the horizon, and some of the large bets to come.</p>
    <div>
      <h2>How is AI changing developer experience?</h2>
      <a href="#how-is-ai-changing-developer-experience">
        
      </a>
    </div>
    <p>If there’s one big thing we can learn from the exploding success of ChatGPT, it’s the importance of pairing technology with the right interface. GPT-3 — the technology powering ChatGPT has been around for some years now, but the masses didn’t come until ChatGPT made it accessible to the masses.</p><p>Since the primary customers of our platform are developers, it’s on us to find the right interfaces to help developers move fast on our platform, and we believe AI can unlock unprecedented developer productivity. And we’re still in the beginning of that journey.</p>
    <div>
      <h3>Wave 1: AI generated content</h3>
      <a href="#wave-1-ai-generated-content">
        
      </a>
    </div>
    <p>One of the things ChatGPT is exceptionally good at is generating new content and articles. If you’re a bootstrapped developer relations team, the first day playing around with ChatGPT may have felt like you struck the jackpot of productivity. With a simple inquiry, ChatGPT can generate in a few seconds a tutorial that would have otherwise taken hours if not days to write out.</p><p>This content still needs to be tested — do the code examples work? Does the order make sense? While it might not get everything right, it’s a massive productivity boost, allowing a small team to multiply their content output.</p><p>In terms of developer experience, examples and tutorials are crucial for developers, especially as they start out with a new technology, or seek validation on a path they’re exploring.</p><p>However, with <a href="https://www.cloudflare.com/learning/ai/what-is-generative-ai/">AI generated</a> content, it’s always going to be limited to well, how much of it you generated. To compare it to the newspaper, this content is still one size fits all. If as a developer you stray ever so slightly off the beaten path (choose a different framework than the one tutorial suggests, or a different database), you’re still left to put the pieces together, navigating tens of open tabs in order to stitch together your application.</p><p>If this content is already being generated by AI, however, why not just go straight to the source, and allow developers to generate their own, personal guides?</p>
    <div>
      <h3>Wave 2: Q&amp;A assistants</h3>
      <a href="#wave-2-q-a-assistants">
        
      </a>
    </div>
    <p>Since developers love to try out new technologies, it’s no surprise that developers are going to be some of the early adopters for technology such as ChatGPT. Many developers are already starting to build applications alongside their trusted bard, ChatGPT.</p><p>Rather than using generated content, why not just go straight to the source, and ask ChatGPT to generate something that’s tailored specifically for you?</p><p>There’s one tiny problem: the information is not always up to date. Which is why plugins are going to become a super important way to interact.</p><p>But what about someone who’s already on Cloudflare’s docs? Here, you want a native experience where someone can ask questions and receive answers. Similarly, if you have a question, why spend time searching the docs, if you can just ask and receive an answer?</p>
    <div>
      <h3>Wave 3: generative experiences</h3>
      <a href="#wave-3-generative-experiences">
        
      </a>
    </div>
    <p>In the examples above, you were still relying on switching back and forth between a dedicated AI interface and the problem at hand. In one tab you’re asking questions, while in another, you’re implementing the answers.</p><p>But taking things another step further, what if AI just met you where you were? In terms of developer experience, we’re already starting to see this in the authoring phase. Tools like GitHub Copilot help developers generate boilerplate code and tests, allowing developers to focus on more complex tasks like designing architecture and algorithms.</p><p>Sometimes, however, the first iteration AI comes up with might not match what you, the developer had in mind, which is why we’re starting to experiment with a flow-based generative approach, where you can ask AI to generate several versions, and build out your design with the one that matches your expectations the most.</p><p>The possibilities are endless, enabling developers to start applications from prompts rather than pre-generated templates.</p><p>We’re excited for all the possibilities AI will unlock to make developers more productive than ever, and we’d love to hear from you how AI is changing the way you change applications.</p><p>We’re also excited to share our first steps into the realm of AI driven developer experience with the release of our first two ChatGPT plugins, and by welcoming a new member of our team —Cursor, our docs AI assistant.</p>
    <div>
      <h2>Our first milestone to AI driven UX: AI Assisted Docs</h2>
      <a href="#our-first-milestone-to-ai-driven-ux-ai-assisted-docs">
        
      </a>
    </div>
    <p>As the first step towards using AI to streamline our developer experience, we’re excited to introduce a new addition to our documentation to help you get answers as quickly as possible.</p>
    <div>
      <h3>How to use Cursor</h3>
      <a href="#how-to-use-cursor">
        
      </a>
    </div>
    <p>Here’s a sample exchange with Cursor:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2KTPs50lW0D4CjAheccUCL/6e7e2956d835574681a72a6487bca28c/image2-7.png" />
            
            </figure><p>You’ll notice that when you ask a question, it will respond with two pieces of information: a text based response answering your questions, and links to relevant pages in our documentation that can help you go further.</p><p>Here’s what happens when we ask “What video formats does Stream support?”.</p><div></div>
<p></p><p>If you were looking through our examples you may not immediately realize that this specific example uses both Workers and R2.</p><p>In its current state, you can think of it as your assistant to help you learn about our products and navigate our documentation in a conversational way. We’re labeling Cursor as experimental because this is the very beginning stages of what we feel like a Cloudflare AI assistant could do to help developers. It is helpful, but not perfect. To deal with its lack of perfection, we took an approach of having it do fewer things better. You’ll find there are many things it isn’t good at today.</p>
    <div>
      <h3>How we built Cursor</h3>
      <a href="#how-we-built-cursor">
        
      </a>
    </div>
    <p>Under the hood, Cursor is powered by Workers, Durable Objects, OpenAI, and the Cloudflare developer docs. It uses the same backend that we’re using to power our ChatGPT Docs plugin, and you can read about that <a href="/cloudflare-chatgpt-plugins/">here</a>.</p><p>It uses the <a href="https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb">“Search-Ask” method</a>, stay tuned for more details on how you can build your own.</p>
    <div>
      <h2>A sneak peek into the future</h2>
      <a href="#a-sneak-peek-into-the-future">
        
      </a>
    </div>
    <p>We’re already thinking about the future, we wanted to give you a small preview of what we think this might look like here:</p><div></div>
<p></p><p>With this type of interface, developers could use a UI to have an AI generate code and developers then link that code together visually. Whether that’s with other code generated by the AI or code they’ve written themselves. We’ll be continuing to explore interfaces that we hope to help you all build more efficiently and can’t wait to get these new interfaces in your hands.</p>
    <div>
      <h2>We need your help</h2>
      <a href="#we-need-your-help">
        
      </a>
    </div>
    <p>Our hope is to quickly update and iterate on how Cursor works as developers around the world use it. As you’re using it to explore our documentation, <a href="http://discord.cloudflare.com/">join us on Discord</a> to let us know your experience.</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[AI]]></category>
            <category><![CDATA[ChatGPT]]></category>
            <category><![CDATA[OpenAI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">3ddhB1ezlTOGPv7Dd6uOsR</guid>
            <dc:creator>Ricky Robinett</dc:creator>
            <dc:creator>Rita Kozlov</dc:creator>
        </item>
        <item>
            <title><![CDATA[Query Cloudflare Radar and our docs using ChatGPT plugins]]></title>
            <link>https://blog.cloudflare.com/cloudflare-chatgpt-plugins/</link>
            <pubDate>Mon, 15 May 2023 13:00:32 GMT</pubDate>
            <description><![CDATA[ We’re excited to share two new Cloudflare ChatGPT plugins – the Cloudflare Radar plugin and the Cloudflare Docs plugin ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/13OKMGwTZyyLLic6XwPfQd/4a942e67cba851aae4420f25a17f94ad/image7-6.png" />
            
            </figure><p>When OpenAI launched ChatGPT plugins in alpha we knew that it opened the door for new possibilities for both Cloudflare users and developers building on Cloudflare. After the launch, our team quickly went to work seeing what we could build, and today we’re very excited to share with you two new Cloudflare ChatGPT plugins – the Cloudflare Radar plugin and the Cloudflare Docs plugin.</p><p>The Cloudflare Radar plugin allows you to talk to ChatGPT about real-time Internet patterns powered by <a href="https://radar.cloudflare.com/">Cloudflare Radar</a>.</p><p>The Cloudflare Docs plugin allows developers to use ChatGPT to help them write and build Cloudflare applications with the most up-to-date information from our documentation. It also serves as an open source example of how to build a ChatGPT plugin with Cloudflare Workers.</p><p>Let’s do a deeper dive into how each of these plugins work and how we built them.</p>
    <div>
      <h3>Cloudflare Radar ChatGPT plugin</h3>
      <a href="#cloudflare-radar-chatgpt-plugin">
        
      </a>
    </div>
    <p>When ChatGPT introduced <a href="https://openai.com/blog/chatgpt-plugins">plugins</a>, one of their use cases was retrieving real-time data from third-party applications and their APIs and letting users ask relevant questions using natural language.</p><p><a href="https://radar.cloudflare.com/">Cloudflare Radar</a> has lots of data about how people use the Internet, a well-documented <a href="https://developers.cloudflare.com/radar/">public API</a>, an OpenAPI specification, and it’s entirely <a href="/technology-behind-radar2/">built on top of Workers</a>, which gives us lots of flexibility for improvements and extensibility. We had all the building blocks to create a ChatGPT plugin quickly. So, that's what we did.</p><p>We added an <a href="https://api.radar.cloudflare.com/.well-known/ai-plugin.json">OpenAI manifest endpoint</a> which describes what the plugin does, some branding assets, and an <a href="https://api.radar.cloudflare.com/.well-known/openai-schema.json">enriched OpenAPI schema</a> to tell ChatGPT how to use our data APIs. The longest part of our work was fine-tuning the schema with good descriptions (written in natural language, obviously) and examples of how to query our endpoints.</p><p>Amusingly, the descriptions ended up much improved by the need to explain the API endpoints to ChatGPT. An interesting side effect is that this benefits us humans also.</p>
            <pre><code>{
    "/api/v1/http/summary/ip_version": {
        "get": {
            "operationId": "get_SummaryIPVersion",
            "parameters": [
                {
                    "description": "Date range from today minus the number of days or weeks specified in this parameter, if not provided always send 14d in this parameter.",
                    "required": true,
                    "schema": {
                        "type": "string",
                        "example": "14d",
                        "enum": ["14d","1d","2d","7d","28d","12w","24w","52w"]
                    },
                    "name": "dateRange",
                    "in": "query"
                }
            ]
        }
    }</code></pre>
            <p>Luckily, <a href="https://github.com/cloudflare/itty-router-openapi">itty-router-openapi</a>, an easy and compact OpenAPI 3 schema generator and validator for Cloudflare Workers that we built and <a href="/technology-behind-radar2/">open-sourced</a> when we launched Radar 2.0, made it really easy for us to add the missing parts.</p>
            <pre><code>import { OpenAPIRouter } from '@cloudflare/itty-router-openapi'

const router = OpenAPIRouter({
  aiPlugin: {
    name_for_human: 'Cloudflare Radar API',
    name_for_model: 'cloudflare_radar',
    description_for_human: "Get data insights from Cloudflare's point of view.",
    description_for_model:
      "Plugin for retrieving the data based on Cloudflare Radar's data. Use it whenever a user asks something that might be related to Internet usage, eg. outages, Internet traffic, or Cloudflare Radar's data in particular.",
    contact_email: 'radar@cloudflare.com',
    legal_info_url: 'https://www.cloudflare.com/website-terms/',
    logo_url: 'https://cdn-icons-png.flaticon.com/512/5969/5969044.png',
  },
})</code></pre>
            <p>We incorporated our changes into itty-router-openapi, and now it <a href="https://github.com/cloudflare/itty-router-openapi#aiplugin">supports</a> the OpenAI manifest and route, and a few other <a href="https://github.com/cloudflare/itty-router-openapi#openai-plugin-support">options</a> that make it possible for anyone to build their own ChatGPT plugin on top of Workers too.</p><p>The Cloudflare Radar ChatGPT is available to non-free ChatGPT users or anyone on OpenAI’s plugin's <a href="https://openai.com/waitlist/plugins">waitlist</a>. To use it, simply open <a href="https://chat.openai.com/">ChatGPT</a>, go to the Plugin store and install Cloudflare Radar.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3R2uxXouXE7NMwAXwzwuLS/4cf0e59cbe09e0f429a06d74e141a206/image6-6.png" />
            
            </figure><p>Once installed, you can talk to it and ask questions about our data using natural language.</p><p>When you add plugins to your account, ChatGPT will prioritize using their data based on what the language model understands from the human-readable descriptions found in the manifest and Open API schema. If ChatGPT doesn't think your prompt can benefit from what the plugin provides, then it falls back to its standard capabilities.</p><p>Another interesting thing about plugins is that they extend ChatGPT's limited knowledge of the world and events after 2021 and can provide fresh insights based on recent data.</p><p>Here are a few examples to get you started:</p><p><b>"What is the percentage distribution of traffic per TLS protocol version?"</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1emtbmUbCUo2RhILUplHft/3789e6672bd172c5d6e3d17ce56f283c/download--5--3.png" />
            
            </figure><p><b>"What's the HTTP protocol version distribution in Portugal?"</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2ADYGYFmtoTb1MUa3YVdzP/5fb35fa683292e30c87a5bbcaa772a2e/download-8.png" />
            
            </figure><p>Now that ChatGPT has context, you can add some variants, like switching the country and the date range.</p><p><b>“How about the US in the last six months?”</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3RKxEE4nzqd5cBMOUfVBlH/14812d97f2fc04aa118bcd401275957d/download--1--5.png" />
            
            </figure><p>You can also combine multiple topics (ChatGPT will make multiple API calls behind the scenes and combine the results in the best possible way).</p><p><b>“How do HTTP protocol versions compare with TLS protocol versions?”</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5kwMCXTMv3vQHmqdpFft2E/f0a525b78399b761a80d4aba84bb6096/download--2--4.png" />
            
            </figure><p>Out of ideas? Ask it “<b>What can I ask the Radar plugin?</b>”, or “<b>Give me a random insight</b>”.</p><p>Be creative, too; it understands a lot about our data, and we keep improving it. You can also add date or country filters using natural language in your prompts.</p>
    <div>
      <h3>Cloudflare Docs ChatGPT plugin</h3>
      <a href="#cloudflare-docs-chatgpt-plugin">
        
      </a>
    </div>
    <p>The Cloudflare Docs plugin is a <a href="https://openai.com/blog/chatgpt-plugins#retrieval">ChatGPT Retrieval Plugin</a> that lets you access the most up-to-date knowledge from our developer documentation using ChatGPT. This means if you’re using ChatGPT to assist you with building on Cloudflare that the answers you’re getting or code that’s being generated will be informed by current best practices and information located within our docs. You can set up and run the Cloudflare Docs ChatGPT Plugin by following the read me in <a href="https://github.com/cloudflare/chatgpt-plugin/tree/main/example-retrieval-plugin">the example repo</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/HTxO668NzSVaOOZ525ZtE/976dd480de0d58039a57f98ae2accb09/image1-20.png" />
            
            </figure><p>The plugin was built entirely on Workers and uses <a href="https://developers.cloudflare.com/workers/learning/how-kv-works/">KV</a> as a vector store. It can also keep its index up-to-date using <a href="https://developers.cloudflare.com/workers/platform/triggers/cron-triggers/">Cron Triggers</a>, <a href="https://developers.cloudflare.com/queues/">Queues</a> and <a href="https://developers.cloudflare.com/workers/runtime-apis/durable-objects/">Durable Objects</a>.</p><p>The plugin is a Worker that responds to POST requests from ChatGPT to a <code>/query</code> endpoint. When a query comes in, the Worker converts the query text into an <a href="https://platform.openai.com/docs/guides/embeddings">embedding vector via the OpenAI embeddings API</a> and uses this to find, and return, the most relevant document snippets from Cloudflare’s developer documentation.</p><p>The way this is achieved is by first converting every document in Cloudflare’s developer documentation on GitHub into embedding vectors (again using OpenAI’s API) and storing them in KV. This storage format allows you to find semantically similar content by doing a <a href="https://en.wikipedia.org/wiki/Similarity_search">similarity search</a> (we use <a href="https://en.wikipedia.org/wiki/Cosine_similarity">cosine similarity</a>), where two pieces of text that are similar in meaning will result in the two embedding vectors having a high similarity score. Cloudflare’s entire developer documentation compresses to under 5MB when converted to embedding vectors, so fetching these from KV is very quick. We’ve also explored building larger vector stores on Workers, as can be seen in <a href="https://ai.cloudflare.com/demos/vector-store/">this demo of 1 million vectors stored on Durable Object storage</a>. We’ll be releasing more open source libraries to support these vector store use cases in the near future.</p><p>So ChatGPT will query the plugin when it believes the user’s question is related to Cloudflare’s developer tools, and the plugin will return a list of up-to-date information snippets directly from our documentation. ChatGPT can then decide how to use these snippets to best answer the user’s question.</p><p>The plugin also includes a “Scheduler” Worker that can periodically refresh the documentation embedding vectors, so that the information is always up-to-date. This is advantageous because ChatGPT’s own knowledge has a cutoff of September 2021 – so it’s not aware of changes in documentation, or new Cloudflare products.</p><p>The Scheduler Worker is triggered by a <a href="https://developers.cloudflare.com/workers/platform/triggers/cron-triggers/">Cron Trigger</a>, on a schedule you can set (eg, hourly), where it will check which content has changed since it last ran via GitHub’s API. It then sends these document paths in messages to a <a href="https://developers.cloudflare.com/queues/">Queue</a> to be processed. Workers will batch process these messages – for each message, the content is fetched from GitHub, and then turned into embedding vectors via OpenAI’s API. A <a href="https://developers.cloudflare.com/workers/runtime-apis/durable-objects/">Durable Object</a> is used to coordinate all the Queue processing so that when all the batches have finished processing, the resulting embedding vectors can be combined and stored in KV, ready for querying by the plugin.</p><p>This is a great example of how Workers can be used not only for front-facing HTTP APIs, but also for scheduled batch-processing use cases.</p>
    <div>
      <h3>Let us know what you think</h3>
      <a href="#let-us-know-what-you-think">
        
      </a>
    </div>
    <p>We are in a time when technology is constantly changing and evolving, so as you experiment with these new plugins please let us know what you think. What do you like? What could be better? Since ChatGPT plugins are in alpha, changes to the plugins user interface or performance (i.e. latency) may occur. If you build your own plugin, we’d love to see it and if it’s open source you can submit a pull request on our <a href="https://github.com/cloudflare/chatgpt-plugin">example repo</a>. You can always find us hanging out in our <a href="http://discord.cloudflare.com/">developer discord</a>.</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[ChatGPT]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[OpenAI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">1V5D6mOrE8HfIU7fkANorJ</guid>
            <dc:creator>Ricky Robinett</dc:creator>
            <dc:creator>Celso Martinho</dc:creator>
            <dc:creator>Michael Hart</dc:creator>
        </item>
        <item>
            <title><![CDATA[Welcome to Developer Week 2023]]></title>
            <link>https://blog.cloudflare.com/welcome-to-developer-week-2023/</link>
            <pubDate>Sun, 14 May 2023 17:00:31 GMT</pubDate>
            <description><![CDATA[ It is an incredibly exciting time to be a developer. We couldn’t imagine a better time to be kicking off Developer Week here at Cloudflare ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5PNUOgKoYSSRygF8QPw7BQ/a78a6990db45215818ca5e5d6d8da988/image1-8.png" />
            
            </figure><p>It is an incredibly exciting time to be a developer.</p><p>The frameworks, libraries and developer tools we depend on keep leveling up in ways that allow us to build more efficiently. On top of that, we’re using AI-powered tools like ChatGPT and GitHub Copilot to ship code quicker than many of us ever could have imagined. This all means we’re spending less time on boilerplate code and setup, and more time writing the code that makes our applications unique.</p><p>It’s not only a time when we’re equipped with the tools to be successful in new ways, but we're also finding inspiration in what’s happening around us. It feels like every day there’s an advancement with AI that changes the boundaries of what we can build. Across meetups, conferences, chat rooms, and every other place we gather as developers, we’re pushing each other to expand our ideas of what is possible.</p><p>With so much excitement permeating through the global developer community, we couldn’t imagine a better time to be kicking off Developer Week here at Cloudflare.</p>
    <div>
      <h3>A focus on developer experience</h3>
      <a href="#a-focus-on-developer-experience">
        
      </a>
    </div>
    <p>A big part of any Innovation Week at Cloudflare is bringing you all new products to play with. And this year will be no different, there will be plenty of new products coming your way over the next seven days, and we can’t wait for you to get your hands on them. But we know that for developers it can sometimes be more exciting to see a tool you already use upgrade its developer experience than to get something new. That’s why as we’ve planned for this Developer Week we have been particularly focused on how we can make our developer experience more seamless by addressing many of your most requested features &amp; fixes.</p><p>Part of making our developer experience more seamless is ensuring you all can bring the technologies you already know and love to Cloudflare. We’ve especially heard this from you all when it comes to deploying <a href="https://www.cloudflare.com/learning/performance/what-is-jamstack/">JAMstack</a> applications on Cloudflare. Without spoiling too much, if you’re using a frontend framework and building JAMstack applications we’re excited about what we’re shipping for you this week.</p>
    <div>
      <h3>A platform born in the Age of AI</h3>
      <a href="#a-platform-born-in-the-age-of-ai">
        
      </a>
    </div>
    <p>We want developers to be able to build anything they’re excited about on Cloudflare. And one thing a lot of us are excited about right now are AI applications. AI is something that’s been part of Cloudflare’s foundation since the beginning. We are a company that was born in the age of AI. A core part of how we work towards our mission to help build a better Internet is by using machine learning to help protect your applications.</p><p>Through this week, we want to empower you with the tools and wisdom we’ve gathered around AI and machine learning. As well as showing you how to use Cloudflare with some of your new favorite AI developer tools. We’ll be shipping sample code, tutorials, tips and best practices. And that wisdom won’t only be coming from us, we’ll be sharing the stories of customers who have built on us and give you all an opportunity to learn from the companies that inspire us.</p>
    <div>
      <h3>Why I joined Cloudflare</h3>
      <a href="#why-i-joined-cloudflare">
        
      </a>
    </div>
    <p>This is special Developer Week for me because it’s my first Developer Week at Cloudflare. I joined a little over a month ago to lead our Developer Relations &amp; Community team.</p><p>When I found out I was joining Cloudflare I called up one of my closest friends, and mentors, to share the news. He immediately said “What are you going to do? Developers are all already using Cloudflare. No matter how big or small of a project I build, I always use Cloudflare. It’s the last thing I set up before I deploy.” He couldn’t have set the stage better for me to share why I’m excited to join and a theme you’ll see throughout this week.</p><p>For many developers, you know us for our CDN, and we are one of the last pieces of infrastructure you set up for your project. Since we launched Cloudflare Workers in 2017, we’ve been shipping tools intended to help empower you not only at the end of your journey, but from the moment you start building a new project. Myself, and my team, are here to help you discover and be successful with all of our developers tools. We’ll be here from the moment you start building, when you go into production and all the way through when you’re scaling your application to millions of users around the world.</p><p>Whether you are one of the over one million developers already building on Cloudflare or you’re starting to use us for the first time during this Developer Week, I can’t wait to meet you.</p>
    <div>
      <h3>Welcome to Developer Week 2023</h3>
      <a href="#welcome-to-developer-week-2023">
        
      </a>
    </div>
    <p>We’re excited to kick off another Developer Week. Through this week we’ll tell you about the new tools we’re shipping and share how many of them were built. We’ll show you how you can use them, and share stories from customers who are using our developer platform today. We hope you’ll be part of the conversation, whether that’s on <a href="https://discord.com/invite/cloudflaredev">Discord</a>, <a href="https://cloudflare.tv/live">Cloudflare TV</a>, <a href="https://community.cloudflare.com/">community.cloudflare.com</a>, or social media.</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div><p></p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">4zGnud6hi8Q4AxnHxyVAeH</guid>
            <dc:creator>Ricky Robinett</dc:creator>
        </item>
    </channel>
</rss>