<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nikita Savchenko</title>
    <description>The latest articles on Forem by Nikita Savchenko (@nikitaeverywhere).</description>
    <link>https://forem.com/nikitaeverywhere</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F525098%2F742e90ef-7d53-47a3-89a0-b83d6ca31be1.jpg</url>
      <title>Forem: Nikita Savchenko</title>
      <link>https://forem.com/nikitaeverywhere</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nikitaeverywhere"/>
    <language>en</language>
    <item>
      <title>Claude Code's Source Didn't Leak. It Was Already Public for Years.</title>
      <dc:creator>Nikita Savchenko</dc:creator>
      <pubDate>Wed, 01 Apr 2026 22:56:31 +0000</pubDate>
      <link>https://forem.com/nikitaeverywhere/claude-codes-source-didnt-leak-it-was-already-public-for-years-34le</link>
      <guid>https://forem.com/nikitaeverywhere/claude-codes-source-didnt-leak-it-was-already-public-for-years-34le</guid>
      <description>&lt;p&gt;I build a JavaScript obfuscation tool (&lt;a href="https://afterpack.dev" rel="noopener noreferrer"&gt;AfterPack&lt;/a&gt;), so when the Claude Code "leak" hit &lt;a href="https://venturebeat.com/technology/claude-codes-source-code-appears-to-have-leaked-heres-what-we-know" rel="noopener noreferrer"&gt;VentureBeat&lt;/a&gt;, &lt;a href="https://fortune.com/2026/03/31/anthropic-source-code-claude-code-data-leak-second-security-lapse-days-after-accidentally-revealing-mythos/" rel="noopener noreferrer"&gt;Fortune&lt;/a&gt;, and &lt;a href="https://www.theregister.com/2026/03/31/anthropic_claude_code_source_code/" rel="noopener noreferrer"&gt;The Register&lt;/a&gt; this week, I did what felt obvious — I analyzed the supposedly leaked code to see what was actually protected.&lt;/p&gt;

&lt;p&gt;I &lt;a href="https://afterpack.dev/blog/claude-code-source-leak/?utm_source=devto&amp;amp;utm_medium=cross-post&amp;amp;utm_campaign=claude-code-source-leak" rel="noopener noreferrer"&gt;wrote a detailed breakdown&lt;/a&gt; on the AfterPack blog. Here's the core of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happened
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://web.dev/articles/source-maps" rel="noopener noreferrer"&gt;source map&lt;/a&gt; file — a standard debugging artifact defined in &lt;a href="https://tc39.es/ecma426/" rel="noopener noreferrer"&gt;ECMA-426&lt;/a&gt; — was accidentally included in version 2.1.88 of the &lt;a href="https://www.npmjs.com/package/@anthropic-ai/claude-code" rel="noopener noreferrer"&gt;&lt;code&gt;@anthropic-ai/claude-code&lt;/code&gt;&lt;/a&gt; package on npm. Security researcher &lt;a href="https://x.com/shoucccc" rel="noopener noreferrer"&gt;Chaofan Shou&lt;/a&gt; spotted it, and within 24 hours a &lt;a href="https://github.com/instructkr/claw-code" rel="noopener noreferrer"&gt;clean-room Rust rewrite&lt;/a&gt; hit 110K GitHub stars and a breakdown site (&lt;a href="https://www.ccleaks.com/" rel="noopener noreferrer"&gt;ccleaks.com&lt;/a&gt;) cataloged every hidden feature.&lt;/p&gt;

&lt;p&gt;This is the second time — a &lt;a href="https://www.bleepingcomputer.com/news/artificial-intelligence/claude-code-source-code-accidentally-leaked-in-npm-package/" rel="noopener noreferrer"&gt;nearly identical source map leak&lt;/a&gt; happened in February 2025.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code Was Already There
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; ships as a single bundled &lt;code&gt;cli.js&lt;/code&gt; on npm — 13MB, 16,824 lines of JavaScript. It's been publicly accessible since launch. You can view it right now at &lt;a href="https://unpkg.com/@anthropic-ai/claude-code@2.1.89/cli.js" rel="noopener noreferrer"&gt;unpkg.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I analyzed it. It's minified, not &lt;a href="https://en.wikipedia.org/wiki/Obfuscation_(software)" rel="noopener noreferrer"&gt;obfuscated&lt;/a&gt;. Here's what that means in practice:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technique&lt;/th&gt;
&lt;th&gt;Present?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Variable name mangling&lt;/td&gt;
&lt;td&gt;Yes (standard &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Minification" rel="noopener noreferrer"&gt;minification&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whitespace removal&lt;/td&gt;
&lt;td&gt;Yes (standard minification)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String encryption/encoding&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://en.wikipedia.org/wiki/Control-flow_integrity" rel="noopener noreferrer"&gt;Control flow flattening&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dead code injection&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-defending / anti-tamper&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Property name mangling&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All 148,000+ string literals sit in plaintext — system prompts, tool descriptions, behavioral instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Asked Claude to Deobfuscate Itself
&lt;/h2&gt;

&lt;p&gt;This is the part that got me. I pointed &lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude&lt;/a&gt; — &lt;a href="https://www.anthropic.com/" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;'s own model — at its own minified &lt;code&gt;cli.js&lt;/code&gt; and it just... explained it.&lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree" rel="noopener noreferrer"&gt;AST&lt;/a&gt;-based extraction, we parsed the full 13MB file in 1.47 seconds and pulled out 147,992 strings. System prompts, tool descriptions, 837 telemetry events (all prefixed with &lt;code&gt;tengu_&lt;/code&gt; — Claude Code's &lt;a href="https://en.wikipedia.org/wiki/Tengu" rel="noopener noreferrer"&gt;internal codename&lt;/a&gt;), 504 environment variables, a &lt;a href="https://www.datadoghq.com/" rel="noopener noreferrer"&gt;DataDog&lt;/a&gt; API key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ghuntley.com/tradecraft/" rel="noopener noreferrer"&gt;Geoffrey Huntley&lt;/a&gt; published a full cleanroom transpilation of Claude Code months before this leak using a similar approach — LLMs converting minified JS to readable TypeScript. His &lt;a href="https://github.com/ghuntley/claude-code-source-code-deobfuscation" rel="noopener noreferrer"&gt;deobfuscation repo&lt;/a&gt; on GitHub demonstrates the technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Source Maps Actually Added
&lt;/h2&gt;

&lt;p&gt;To be fair, source maps did surface some genuinely sensitive stuff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal code comments and TODOs&lt;/li&gt;
&lt;li&gt;The full 1,884-file project tree with original filenames&lt;/li&gt;
&lt;li&gt;Feature flags with codenames like &lt;code&gt;tengu_amber_flint&lt;/code&gt; and &lt;code&gt;tengu_cobalt_frost&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;KAIROS — an unreleased autonomous daemon mode&lt;/li&gt;
&lt;li&gt;Anti-distillation mechanisms that inject decoy tools to poison training data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's real exposure. But the actual code logic was already there in &lt;code&gt;cli.js&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Happens Everywhere
&lt;/h2&gt;

&lt;p&gt;I ran our &lt;a href="https://afterpack.dev/security-scanner" rel="noopener noreferrer"&gt;Security Scanner&lt;/a&gt; on &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub.com&lt;/a&gt; and found email addresses and internal URLs in their production JavaScript and &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Source_map" rel="noopener noreferrer"&gt;source maps&lt;/a&gt;. Same with &lt;a href="https://claude.ai" rel="noopener noreferrer"&gt;claude.ai&lt;/a&gt;. Same class of exposure, zero headlines.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Makes This Urgent
&lt;/h2&gt;

&lt;p&gt;The reality is simple: minification was never security. It's a size optimization that bundlers like &lt;a href="https://esbuild.github.io/" rel="noopener noreferrer"&gt;esbuild&lt;/a&gt;, &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, and &lt;a href="https://rollupjs.org/" rel="noopener noreferrer"&gt;Rollup&lt;/a&gt; do by default. Variable renaming slows down human readers but &lt;a href="https://en.wikipedia.org/wiki/Large_language_model" rel="noopener noreferrer"&gt;LLMs&lt;/a&gt; read minified code like you read formatted code.&lt;/p&gt;

&lt;p&gt;System prompts are the new trade secrets. Telemetry names reveal product roadmaps. Environment variables expose what you're not ready to ship. And every JavaScript application — &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; frontends, &lt;a href="https://www.electronjs.org/" rel="noopener noreferrer"&gt;Electron&lt;/a&gt; apps, &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; CLIs — ships code that AI can now analyze trivially.&lt;/p&gt;

&lt;p&gt;You can check what your site exposes: &lt;code&gt;npx afterpack audit https://your-site.com&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://afterpack.dev/blog/claude-code-source-leak/?utm_source=devto&amp;amp;utm_medium=cross-post&amp;amp;utm_campaign=claude-code-source-leak" rel="noopener noreferrer"&gt;AfterPack&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>security</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Software Engineer in the AI Era</title>
      <dc:creator>Nikita Savchenko</dc:creator>
      <pubDate>Mon, 30 Mar 2026 15:11:42 +0000</pubDate>
      <link>https://forem.com/nikitaeverywhere/how-to-software-engineer-in-the-ai-era-56h7</link>
      <guid>https://forem.com/nikitaeverywhere/how-to-software-engineer-in-the-ai-era-56h7</guid>
      <description>&lt;p&gt;I genuinely believe &lt;strong&gt;programming languages are becoming assembler&lt;/strong&gt; — and I don't mean that metaphorically.&lt;/p&gt;

&lt;p&gt;C abstracted assembly. C++ abstracted C. JavaScript abstracted memory management. Each layer let humans think one level higher. The same leap just happened — and the new abstraction layer is English.&lt;/p&gt;

&lt;p&gt;The language I work in now is English. Whether the target is TypeScript, Rust, or Python — source code is a lower-level artifact generated from higher-level intent. I write close to 0% of code by hand. I write documentation and sophisticated prompts.&lt;/p&gt;

&lt;p&gt;I &lt;a href="https://nikitaeverywhere.com/posts/how-to-software-engineer-in-ai-era/?utm_source=devto&amp;amp;utm_medium=cross-post&amp;amp;utm_campaign=how-to-software-engineer-in-ai-era" rel="noopener noreferrer"&gt;explored this in depth&lt;/a&gt; with a full walkthrough of the AfterPack case study. Here I want to focus on what actually changed in the workflow and what it means for anyone in software — whether you write code, lead teams, or make architecture decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mental Model
&lt;/h2&gt;

&lt;p&gt;Every AI tool boils down to one equation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input + Context → LLM → Output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lk66qzkikisqx9y3ppa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lk66qzkikisqx9y3ppa.png" alt="The Magic Box — Input + Context → AI tool → Output" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The quality of output is directly proportional to the quality of input. I've watched the same LLM give a junior mediocre code and a senior production-ready architecture. The difference was entirely in the context provided. This applies to everyone — whether you're prompting for code, architecture decisions, or product strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Lifecycle Changed
&lt;/h2&gt;

&lt;p&gt;If you're only using AI for code autocomplete, you're at maybe 10%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideation and Research:&lt;/strong&gt; Pressure-test ideas across multiple models (Claude, Gemini, GPT — trained on different data, different blind spots). Competitive landscape analysis. Demand validation with Google Ads keyword data. What used to take a team weeks now takes hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planning and Architecture:&lt;/strong&gt; This is where I spend the most time — significantly more than on implementation. Load context into the LLM: existing architecture, constraints, business requirements. Ask for multiple approaches. Have it argue against its own recommendations. Planning mode is king — days in planning, then execution in ~30 minutes. When I come to QA, it mostly just works when planned right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design:&lt;/strong&gt; I skip Figma for many use cases now. Give the LLM your existing UI and design system — 15 minutes later, new pages match your patterns. Pro tip: Gemini Pro creates better initial visuals, but Claude handles long-term code evolution far better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt; The fastest part of the cycle now. Refactor 100+ files by new design patterns — one-shot in 10 minutes. Previously a week of tedious work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing and QA:&lt;/strong&gt; AI writes tests, runs them, interprets failures, fixes code. But on real products, you spend most time here — verifying outputs. Taste and judgment are still yours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Brain Goes TikTok
&lt;/h2&gt;

&lt;p&gt;Here's what nobody warned me about. When AI handles implementation this fast, you become the bottleneck. So you try to keep up — I run 3-5 Claude terminals in parallel. One is auditing a codebase, another implementing an API, a third writing product specs. You're constantly jumping between contexts, reviewing outputs, catching mistakes.&lt;/p&gt;

&lt;p&gt;It's incredibly brain-intensive. Coding used to be more relaxing — you'd hold one idea for 10-20 minutes, type it out, debug, move on. Now you're a rapid context-switcher. I joke that TikTok was training us for AI-assisted engineering all along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottleneck Is Human Synchronization
&lt;/h2&gt;

&lt;p&gt;Your role becomes judge, quality controller, architect deciding what to build and why. But the deeper bottleneck isn't you individually — it's &lt;strong&gt;human synchronization&lt;/strong&gt;. Meetings, handoffs, miscommunication, waiting for approvals. When execution takes 30 minutes, spending 3 days aligning on requirements becomes the dominant cost.&lt;/p&gt;

&lt;p&gt;Who thrives now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solo builders&lt;/strong&gt; shipping entire products alone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small teams&lt;/strong&gt; with clear ownership and less meetings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senior generalists&lt;/strong&gt; who can be PM, PO, QA, and engineer all in one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One person carries the work that previously required a team. For larger orgs, you still need role separation — but each person's blast radius is dramatically larger.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AfterPack Story
&lt;/h2&gt;

&lt;p&gt;What this looks like in practice: I'm building &lt;a href="https://www.afterpack.dev" rel="noopener noreferrer"&gt;AfterPack&lt;/a&gt; — a Rust-based JavaScript obfuscator. I spent three weeks on core architecture without writing a single line of Rust.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Documentation first.&lt;/strong&gt; 20+ spec files. Different AI agents worked on different parts — no Rust, just careful system design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript prototyping.&lt;/strong&gt; Prototyped obfuscation transforms in JS first. Multiple iterations. Agents tried to break the prototypes and suggested improvements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adversarial testing.&lt;/strong&gt; Claude Code running overnight: "keep iterating until a fresh Claude instance with no context can't deobfuscate the output."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm writing production Rust — a language I'd barely touched. My actual language is English. I focus on architecture, data structures, algorithms. The LLM handles the Rust.&lt;/p&gt;

&lt;p&gt;The previous generation of JavaScript obfuscators took 2-3 years. I'm shipping something more advanced in a fraction of that time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working Effectively with AI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context is everything.&lt;/strong&gt; Write documentation before anything else. What you want, why, constraints, what "good" looks like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start in planning mode.&lt;/strong&gt; Multiple approaches. Model argues against itself. Prototype in a simpler language first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use multiple models.&lt;/strong&gt; Claude, Gemini, GPT — different training data, different perspectives. Critical for planning and review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own the architecture.&lt;/strong&gt; AI implements any architecture you describe. Your job is describing the right one — that's the part that won't be automated anytime soon.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where to Start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New to software:&lt;/strong&gt; get an AI assistant, describe what you want in plain English. You'll learn from watching it reason.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not using AI yet:&lt;/strong&gt; build your next feature entirely AI-assisted. Planning, implementation, testing — all of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already using AI daily:&lt;/strong&gt; focus on context quality. Better documentation, more planning mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team lead or exec:&lt;/strong&gt; the biggest productivity gains aren't in individual speed — they're in reducing coordination overhead. Rethink whether every process and meeting is still necessary when execution is this fast.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://nikitaeverywhere.com/posts/how-to-software-engineer-in-ai-era/?utm_source=devto&amp;amp;utm_medium=cross-post&amp;amp;utm_campaign=how-to-software-engineer-in-ai-era" rel="noopener noreferrer"&gt;nikitaeverywhere.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why You Should Build on Cloudflare by Default</title>
      <dc:creator>Nikita Savchenko</dc:creator>
      <pubDate>Mon, 02 Feb 2026 21:27:05 +0000</pubDate>
      <link>https://forem.com/nikitaeverywhere/why-you-should-build-on-cloudflare-by-default-45bg</link>
      <guid>https://forem.com/nikitaeverywhere/why-you-should-build-on-cloudflare-by-default-45bg</guid>
      <description>&lt;p&gt;Hi! I'm Nikita — a product engineer who's worked at Google on &lt;a href="https://cloud.google.com/run" rel="noopener noreferrer"&gt;Cloud Run&lt;/a&gt;, &lt;a href="https://www.revolut.com/" rel="noopener noreferrer"&gt;Revolut&lt;/a&gt; and runs &lt;a href="https://dataunlocker.com" rel="noopener noreferrer"&gt;DataUnlocker&lt;/a&gt;, a SaaS that's handled 50M+ daily requests on Cloudflare. This is my first dev.to post, cross-posted from my &lt;a href="https://nikitaeverywhere.com" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the past five years, &lt;a href="https://www.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt; has been my default infrastructure choice for nearly everything I build. I might be biased, but I genuinely believe Cloudflare gives you the most flexible, robust, easy-to-build, low-maintenance infrastructure — and most importantly — &lt;strong&gt;for FREE&lt;/strong&gt;, until you finally make it.&lt;/p&gt;

&lt;p&gt;When &lt;a href="https://dataunlocker.com" rel="noopener noreferrer"&gt;DataUnlocker&lt;/a&gt; suddenly had to handle 50 million proxy requests per day after a major customer onboarded, I wasn't scrambling. No emergency scaling. No infrastructure panic. The traffic spiked, and Cloudflare just absorbed it like nothing happened.&lt;/p&gt;

&lt;p&gt;If you're still defaulting to &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, &lt;a href="https://cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;, &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, or &lt;a href="https://azure.microsoft.com/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt; without considering Cloudflare first — you're missing out. Seriously. The developer experience, the pricing model, and the global architecture are in a different league.&lt;/p&gt;

&lt;p&gt;Here are &lt;strong&gt;5 facts about Cloudflare you can't ignore&lt;/strong&gt;. Even if just two or three resonate with you, that should be enough to give it a serious look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzydnqsm7by80uvhv9q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzydnqsm7by80uvhv9q2.png" alt="Cloudflare meme" width="800" height="1063"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;P.S. Yes, Cloudflare goes down sometimes. You hear about it because half the internet uses them — not because they're unreliable ☝️&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A Free Tier No One Else Can Offer
&lt;/h2&gt;

&lt;p&gt;Most cloud providers offer free tiers as glorified demos — useful for tutorials, useless for anything long-running for free. Cloudflare is different. You can run a legitimate product on their free tier until you have your first &lt;strong&gt;thousand&lt;/strong&gt; customers.&lt;/p&gt;

&lt;p&gt;Here's what you get for $0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cloudflare.com/cdn/" rel="noopener noreferrer"&gt;CDN &amp;amp; DDoS Protection&lt;/a&gt;&lt;/strong&gt; — unlimited bandwidth, always free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://workers.cloudflare.com/" rel="noopener noreferrer"&gt;Workers&lt;/a&gt;&lt;/strong&gt; — 100,000 requests/&lt;strong&gt;day&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Pages&lt;/a&gt;&lt;/strong&gt; — Unlimited static site traffic (yes, UNLIMITED)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/d1/" rel="noopener noreferrer"&gt;D1&lt;/a&gt;&lt;/strong&gt; — 5GB storage, 25 million reads/day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/r2/" rel="noopener noreferrer"&gt;R2&lt;/a&gt;&lt;/strong&gt; — ~10GB storage, &lt;strong&gt;zero egress fees&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/kv/" rel="noopener noreferrer"&gt;KV&lt;/a&gt;&lt;/strong&gt; — 1GB storage for key-value data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cloudflare.com/zero-trust/products/access/" rel="noopener noreferrer"&gt;Zero Trust&lt;/a&gt;&lt;/strong&gt; — free, no user limit&lt;/li&gt;
&lt;li&gt;Much more in other products, enough to just start shipping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No credit card required. No surprise bills after a traffic spike — you control &lt;a href="https://developers.cloudflare.com/workers/platform/limits/#daily-request" rel="noopener noreferrer"&gt;how to bill it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Compare this to &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, &lt;a href="https://cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;, or &lt;a href="https://azure.microsoft.com/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;, where "free tier" usually means "free until we charge you for data transfer" or "free for 12 months, then a surprise bill."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fun fact:&lt;/strong&gt; R2's zero egress pricing alone saves significant money at scale. &lt;a href="https://aws.amazon.com/s3/pricing/" rel="noopener noreferrer"&gt;AWS S3&lt;/a&gt; charges ~$90 per TB of egress. Serve a few terabytes of images per month and you're looking at real money. R2? Still zero.&lt;/p&gt;

&lt;h3&gt;
  
  
  What About Google Cloud?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/free" rel="noopener noreferrer"&gt;Google Cloud's free tier&lt;/a&gt; gives you one e2-micro VM, 30GB disk, and a handful of services — restricted to US regions. However the bright spot in GCP is &lt;a href="https://cloud.google.com/run" rel="noopener noreferrer"&gt;Cloud Run&lt;/a&gt; — I worked on its UI &lt;a href="https://nikitaeverywhere.com/posts/2020-01-07-google/" rel="noopener noreferrer"&gt;at Google&lt;/a&gt; — with 180,000 vCPU-seconds, 360,000 GiB-seconds, and 2 million requests/month, FREE. This is the closest to Cloudflare in terms of a generous free tier offering.&lt;/p&gt;

&lt;p&gt;But Cloud Run alone doesn't make an architecture. You'll need Cloud SQL, Pub/Sub, Cloud Storage — services with far less generous free tiers. Cloudflare gives you compute, database, storage, queues, and KV all with meaningful free limits.&lt;/p&gt;

&lt;p&gt;And the cold start difference matters: Cloud Run containers take &lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/3-ways-optimize-cloud-run-response-times" rel="noopener noreferrer"&gt;1–3 seconds&lt;/a&gt; even with startup boost. Workers start in under 5 milliseconds. For latency-sensitive apps, that's a different world.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloudflare Containers: The Cloud Run Competitor
&lt;/h3&gt;

&lt;p&gt;As of 2025, Cloudflare launched &lt;a href="https://developers.cloudflare.com/containers/" rel="noopener noreferrer"&gt;Containers&lt;/a&gt; in public beta — their direct answer to Cloud Run. You can now run full Docker containers orchestrated by Workers, with any language or runtime.&lt;/p&gt;

&lt;p&gt;Instance types range from lite (1/16 vCPU, 256 MiB) to standard-4 (4 vCPU, 12 GiB memory, 20 GB disk). Pricing follows the same philosophy: scale-to-zero with 10ms billing granularity. The $5/month Workers Paid plan includes 25 GiB-hours of memory and 375 vCPU-minutes — enough for light container workloads.&lt;/p&gt;

&lt;p&gt;The difference? Your Worker code orchestrates containers programmatically. No YAML manifests, no separate container registry setup. Deploy with &lt;code&gt;wrangler deploy&lt;/code&gt; and your containers spin up on-demand, controlled by JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Global Compute CDN
&lt;/h2&gt;

&lt;p&gt;When people hear "CDN," they think of cached static files. Cloudflare goes further — your code runs at the edge, in &lt;a href="https://www.cloudflare.com/network/" rel="noopener noreferrer"&gt;300+ cities worldwide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Traditional serverless (Lambda, Cloud Functions, Cloud Run) runs in a region. A user in Singapore hitting your US-East function adds 200–300ms of latency before your code even starts. With Workers, the code executes at the data center closest to the user.&lt;/p&gt;

&lt;p&gt;But the real magic is &lt;strong&gt;&lt;a href="https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/" rel="noopener noreferrer"&gt;zero cold starts&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lambda and similar services spin up containers on demand. That first request can take 100–500ms just for the container to wake up. Workers use &lt;a href="https://developers.cloudflare.com/workers/reference/how-workers-works/" rel="noopener noreferrer"&gt;V8 isolates&lt;/a&gt; — the same technology that runs JavaScript in Chrome. An isolate starts in under 5 milliseconds.&lt;/p&gt;

&lt;p&gt;The practical result: &lt;a href="https://www.afterpack.dev" rel="noopener noreferrer"&gt;AfterPack's Pro JavaScript Obfuscation API&lt;/a&gt; feels instant regardless of where users are located. No warming strategies. No provisioned concurrency costs. Just fast by default. And this is given AfterPack is a small Rust binary running on Cloudflare Workers.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Simplicity That Scales
&lt;/h2&gt;

&lt;p&gt;Here's what deploying a new API looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# From zero to globally deployed in 3 commands&lt;/span&gt;
npm create cloudflare@latest my-api
&lt;span class="nb"&gt;cd &lt;/span&gt;my-api
npx wrangler deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your code is now running in 300+ locations worldwide. No IAM policies. No VPC configuration. No subnet planning. No &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; manifests.&lt;/p&gt;

&lt;p&gt;Push to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and it deploys automatically. Need a preview environment? Every PR gets one. Want to roll back? One click.&lt;/p&gt;

&lt;p&gt;I've set up Google Cloud &amp;amp; Digital Ocean infrastructure for production systems. I've written configs, fought with IAM permission boundaries, debugged Kubernetes, and spent days on trying to configure or update &lt;a href="https://cert-manager.io/" rel="noopener noreferrer"&gt;Cert Manager&lt;/a&gt; through its lifecycle. It works, but the complexity tax is real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexity is not a feature — it's a cost.&lt;/strong&gt; Every hour spent on infrastructure is an hour not spent on the actual product.&lt;/p&gt;

&lt;p&gt;Cloudflare's &lt;a href="https://developers.cloudflare.com/workers/wrangler/" rel="noopener noreferrer"&gt;Wrangler CLI&lt;/a&gt; and dashboard assume you want to ship software, not become a cloud architect. For most projects, that's exactly right — you can add complexity later on.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Complete Service Ecosystem
&lt;/h2&gt;

&lt;p&gt;What started as a CDN has become a genuine full-stack platform. Here's what's available:&lt;/p&gt;

&lt;h3&gt;
  
  
  Workers — Serverless Compute
&lt;/h3&gt;

&lt;p&gt;The foundation. Write in JavaScript, TypeScript, Rust, or Python. Workers have a &lt;a href="https://developers.cloudflare.com/workers/platform/limits/" rel="noopener noreferrer"&gt;10MB size limit&lt;/a&gt; (paid plan), 30 seconds of standard CPU time, and up to 5 minutes with extended timeouts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SELECT id, name FROM users LIMIT 10&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  D1 — SQLite at the Edge
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/d1/" rel="noopener noreferrer"&gt;D1&lt;/a&gt; launched in 2022 and brought something genuinely new: a relational database that runs at the edge. It's SQLite under the hood, replicated globally.&lt;/p&gt;

&lt;p&gt;For most applications, D1 is enough. You get familiar SQL, proper transactions, and sub-millisecond reads from the nearest replica.&lt;/p&gt;

&lt;h3&gt;
  
  
  R2 — S3-Compatible Storage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/r2/" rel="noopener noreferrer"&gt;R2&lt;/a&gt; is S3-compatible with one killer difference: &lt;strong&gt;zero egress fees&lt;/strong&gt;. Store files, serve them globally, pay only for storage and operations.&lt;/p&gt;

&lt;p&gt;If you're building anything with significant file serving — image hosting, video delivery, software downloads — the economics are dramatically better than AWS.&lt;/p&gt;

&lt;h3&gt;
  
  
  KV — Global Key-Value Store
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/kv/" rel="noopener noreferrer"&gt;KV&lt;/a&gt; is eventually consistent key-value storage. Great for configuration, feature flags, session data, and caching. Reads are fast from anywhere; writes propagate globally within about 60 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Queues — Async Message Processing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/queues/" rel="noopener noreferrer"&gt;Queues&lt;/a&gt; handle background jobs and async processing. Push messages from one Worker, consume them in another.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Producer: send work to the queue&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MY_QUEUE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;process_upload&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fileKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uploads/image.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Consumer: process messages in batches&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageBatch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;QueueMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;processJob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Durable Objects — Stateful Edge Computing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/durable-objects/" rel="noopener noreferrer"&gt;Durable Objects&lt;/a&gt; are the advanced tool — stateful actors that live at the edge. Use them for real-time collaboration, game servers, rate limiting, or anything needing consistent state.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Cloudflare Catches Up Fast
&lt;/h2&gt;

&lt;p&gt;The AI wave hit, and Cloudflare responded quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/workers-ai/" rel="noopener noreferrer"&gt;Workers AI&lt;/a&gt;&lt;/strong&gt; — Run inference at the edge with popular models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/ai-gateway/" rel="noopener noreferrer"&gt;AI Gateway&lt;/a&gt;&lt;/strong&gt; — Route between AI providers with caching and rate limiting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/vectorize/" rel="noopener noreferrer"&gt;Vectorize&lt;/a&gt;&lt;/strong&gt; — Vector database for embeddings and similarity search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Integration&lt;/strong&gt; — Model Context Protocol support for AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They ship features within weeks of trends emerging. Not everything lands perfectly, but the velocity is impressive lately.&lt;/p&gt;

&lt;p&gt;I've been with Cloudflare since the early days of &lt;a href="https://www.dataunlocker.com/" rel="noopener noreferrer"&gt;DataUnlocker&lt;/a&gt; around 2020 — and honestly, I wouldn't have written this article a few years ago. Today, unlike before, they have a complete product set that lets you just ship products of any complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture Patterns in Practice
&lt;/h2&gt;

&lt;p&gt;Here's where Cloudflare really shines compared to traditional infrastructure. Let me walk through common patterns and show how much simpler they become.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Gateway Pattern
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;, building an API gateway means: ingress controller, TLS certificates, load balancer configuration, service definitions, deployment manifests, and probably Helm charts to tie it all together. You need to pick a region, think about failover, and hope your YAML indentation is correct.&lt;/p&gt;

&lt;p&gt;On Cloudflare? You write a Worker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Worker (auth, routing, validation) → D1 / External API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flexibility is yours to decide. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single Worker&lt;/strong&gt; — If your API is small (fits in 10MB), one Worker handles everything. Deploy with &lt;code&gt;npx wrangler deploy&lt;/code&gt; and you're done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Split by domain&lt;/strong&gt; — Group related endpoints into separate Workers. Auth in one, billing in another, core API in a third.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1000 endpoints = 1000 Workers&lt;/strong&gt; — Each API route gets its own Worker. Share common code via packages, deploy independently. Useful for large teams where different groups own different endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is: Cloudflare doesn't tell you how to architect. You're not fighting the platform — you choose the structure that fits your team and codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Static + API Pattern
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pages (Next.js/React/Vue/Svelte) → Worker API → D1 + R2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Pages&lt;/a&gt; hosts the frontend with automatic builds from Git. Workers handle the API. D1 for structured data, R2 for files. This covers 90% of web applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; deserves special mention — it's the frontend framework for most serious web apps now, and &lt;a href="https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/" rel="noopener noreferrer"&gt;Cloudflare supports it well&lt;/a&gt;. App Router, Pages Router, SSG, SSR, ISR, Server Components, Server Actions — all work. I use Next.js with static export on Cloudflare Pages for this very site, and it's seamless. The only limitation is Node.js in Middleware (a Next.js 15.2 feature), which most apps don't need anyway.&lt;/p&gt;

&lt;p&gt;Compare to traditional setup: S3 + CloudFront for static files, EC2 or Lambda for API, RDS for database, separate S3 bucket for uploads, IAM roles connecting everything, VPC configuration... and you're still picking a region.&lt;/p&gt;

&lt;h3&gt;
  
  
  Async Processing Pattern
&lt;/h3&gt;

&lt;p&gt;Every serious backend needs asynchronous processing. User uploads a file — you don't make them wait while you process it. You accept the upload, queue the work, return immediately.&lt;/p&gt;

&lt;p&gt;Traditional approach: spin up &lt;a href="https://www.rabbitmq.com/" rel="noopener noreferrer"&gt;RabbitMQ&lt;/a&gt; or &lt;a href="https://kafka.apache.org/" rel="noopener noreferrer"&gt;Kafka&lt;/a&gt;, write consumer services, handle retries with exponential backoff, manage dead letter queues, monitor broker health. It's a whole subsystem to maintain.&lt;/p&gt;

&lt;p&gt;On Cloudflare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Worker (accepts request) → Queue → Worker (processes) → R2 (stores result)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://developers.cloudflare.com/queues/" rel="noopener noreferrer"&gt;Queues&lt;/a&gt; handle the message delivery. Workers consume messages in batches. Retries and backoff are built in. You define what handles what declaratively in &lt;code&gt;wrangler.toml&lt;/code&gt;. That's it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Producer: accept upload, queue for processing&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fileId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomUUID&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UPLOADS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PROCESS_QUEUE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;fileId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;transform&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;fileId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;processing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Consumer: process queued work&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MessageBatch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Job&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UPLOADS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;processFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESULTS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fileId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ack&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI Workflows
&lt;/h3&gt;

&lt;p&gt;Cloudflare jumped on AI infrastructure quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/workers-ai/" rel="noopener noreferrer"&gt;Workers AI&lt;/a&gt;&lt;/strong&gt; — Run inference at the edge. Models run on Cloudflare's GPUs, you just call the API from your Worker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/ai-gateway/" rel="noopener noreferrer"&gt;AI Gateway&lt;/a&gt;&lt;/strong&gt; — Proxy requests to OpenAI, Anthropic, or other providers. Add caching, rate limiting, logging without changing your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://developers.cloudflare.com/vectorize/" rel="noopener noreferrer"&gt;Vectorize&lt;/a&gt;&lt;/strong&gt; — Vector database for embeddings. Build RAG applications without external vector stores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Integration&lt;/strong&gt; — Model Context Protocol support for building AI agents that can use tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern for AI apps looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → Worker (orchestration) → AI Gateway → LLM Provider
                              → Vectorize (embeddings)
                              → D1 (conversation history)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can build sophisticated AI agents entirely on Cloudflare — isolated, scalable, globally distributed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Compute: The Full Stack
&lt;/h2&gt;

&lt;p&gt;Cloudflare quietly became an everything provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cloudflare.com/products/registrar/" rel="noopener noreferrer"&gt;Domain Registrar&lt;/a&gt;&lt;/strong&gt; — At-cost domain registration (since September 2018). No markup, no upsells.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email Routing&lt;/strong&gt; — Route emails to your domain without running mail servers (private beta since September 2025)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS&lt;/strong&gt; — &lt;a href="https://www.dnsperf.com/" rel="noopener noreferrer"&gt;Fastest DNS provider&lt;/a&gt; according to independent benchmarks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DDoS Protection&lt;/strong&gt; — Included by default, no extra configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSL/TLS&lt;/strong&gt; — Automatic certificates, zero maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One dashboard. One bill. One company to deal with.&lt;/p&gt;

&lt;p&gt;I moved all my domains to Cloudflare Registrar lately. Combined with their DNS, every domain I own is managed in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest Limitations
&lt;/h2&gt;

&lt;p&gt;Cloudflare isn't the right choice for everything. Be realistic about these gaps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-running compute&lt;/strong&gt; — Workers cap at 5 minutes (extended). For longer workloads, &lt;a href="https://developers.cloudflare.com/containers/" rel="noopener noreferrer"&gt;Containers&lt;/a&gt; (beta) now support extended runtimes with up to 4 vCPUs and 12 GiB memory — though for heavy ML training or multi-hour jobs, traditional servers are still the answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPU workloads&lt;/strong&gt; — No GPU access. Workers AI handles inference, but if you're training models or need raw CUDA, look elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex relational databases at scale&lt;/strong&gt; — D1 is excellent for most apps, but if you need advanced PostgreSQL features, complex joins across billions of rows, or specialized extensions, a dedicated database (Supabase, Neon, PlanetScale) might be better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise compliance&lt;/strong&gt; — HIPAA, FedRAMP, SOC2 with specific requirements? AWS and GCP still lead here with more certifications and audit trails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vendor lock-in&lt;/strong&gt; — While Workers use standard JavaScript and D1 uses SQLite, some services (Durable Objects, KV) have Cloudflare-specific APIs. Plan accordingly if portability matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you haven't tried Cloudflare beyond basic CDN:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign up&lt;/strong&gt; — No credit card required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a domain&lt;/strong&gt; — Switch nameservers, or start without a domain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy a Pages site&lt;/strong&gt; — &lt;code&gt;npm create cloudflare@latest&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a D1 database&lt;/strong&gt; — &lt;code&gt;wrangler d1 create my-db&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build something real&lt;/strong&gt; — Start small, expand as needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The learning curve is gentle. The documentation is solid. The community is active.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;I'm not paid to write this. I genuinely believe Cloudflare should be your default choice for most projects. Not because it's perfect — it isn't — but because the balance of simplicity, capability, and cost is unmatched.&lt;/p&gt;

&lt;p&gt;If you're spending more time configuring infrastructure than building features, maybe it's time to try something simpler yet powerful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Products:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://workers.cloudflare.com/" rel="noopener noreferrer"&gt;Workers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/d1/" rel="noopener noreferrer"&gt;D1 Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/r2/" rel="noopener noreferrer"&gt;R2 Storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/kv/" rel="noopener noreferrer"&gt;KV Key-Value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/queues/" rel="noopener noreferrer"&gt;Queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/durable-objects/" rel="noopener noreferrer"&gt;Durable Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/workers-ai/" rel="noopener noreferrer"&gt;Workers AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/ai-gateway/" rel="noopener noreferrer"&gt;AI Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/vectorize/" rel="noopener noreferrer"&gt;Vectorize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/network/" rel="noopener noreferrer"&gt;Global Network Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/products/registrar/" rel="noopener noreferrer"&gt;Domain Registrar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/containers/" rel="noopener noreferrer"&gt;Containers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Comparisons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/free" rel="noopener noreferrer"&gt;Google Cloud Free Tier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/run" rel="noopener noreferrer"&gt;Google Cloud Run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/s3/pricing/" rel="noopener noreferrer"&gt;AWS S3 Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rabbitmq.com/" rel="noopener noreferrer"&gt;RabbitMQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kafka.apache.org/" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/" rel="noopener noreferrer"&gt;Next.js on Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Author's Projects:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://dataunlocker.com" rel="noopener noreferrer"&gt;DataUnlocker&lt;/a&gt; - protect web apps network traffic from ad blockers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.afterpack.dev" rel="noopener noreferrer"&gt;AfterPack&lt;/a&gt; - javascript obfuscator for modern web applications. Stop shipping source code!&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://nikitaeverywhere.com/posts/2020-01-07-google/" rel="noopener noreferrer"&gt;Starting Career at Google&lt;/a&gt; — My work on Cloud Run&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;External:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.dnsperf.com/" rel="noopener noreferrer"&gt;DNSPerf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/blog/topics/developers-practitioners/3-ways-optimize-cloud-run-response-times" rel="noopener noreferrer"&gt;Cloud Run Cold Start Optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/" rel="noopener noreferrer"&gt;How Cloudflare Workers Eliminated Cold Starts&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>programming</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
