⚛️ Deploy React on Cloudflare with GitHub Actions

Deployment blueprint • 2026 • ⚙️ GitHub Actions

Advertisement Space - Google AdSense

Key Features

⚡ Vite provides lightning-fast HMR and optimized builds
🌍 Global CDN with 300+ edge locations
🔒 Automatic HTTPS with SSL certificates
🔄 Preview deployments for every pull request
💰 Free tier: 500 builds/month, unlimited bandwidth
📦 Code splitting and tree shaking built-in

📋 Configuration Files

Copy these files into your project:

.github/workflows/deploy.yml
# .github/workflows/deploy.yml
name: Deploy React to Cloudflare Pages

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build React app
        run: npm run build
        env:
          CI: false
          NODE_ENV: production

      - name: Deploy to Cloudflare Pages
        uses: cloudflare/pages-action@v1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          projectName: my-react-app
          directory: dist
          gitHubToken: ${{ secrets.GITHUB_TOKEN }}

# vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  build: {
    outDir: 'dist',
    sourcemap: true,
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
        },
      },
    },
  },
})

# package.json
{
  "name": "my-react-app",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/react": "^18.2.43",
    "@types/react-dom": "^18.2.17",
    "@vitejs/plugin-react": "^4.2.1",
    "typescript": "^5.2.2",
    "vite": "^5.0.8"
  }
}

# tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

📦 Need all the files?

Download the complete blueprint with README, package.json, and all configuration files.

📥 Browse All Files

Configuration Summary

🚀
Framework
React
☁️
Cloud Provider
Cloudflare Pages & Workers
⚙️
Deployment Tool
GitHub Actions
💰
Pricing
Free tier generous, zero egress fees, flat-rate pricing

☁️ About Cloudflare Pages & Workers

Edge-first platform with zero egress fees

✓ Best For
Static sites, edge computing, cost-effective CDN, global performance
💰 Pricing
Free tier generous, zero egress fees, flat-rate pricing

Available Services:

Pages - Static Site Hosting
Workers - Edge Computing
R2 - Object Storage (S3-compatible)
D1 - SQLite Database
KV - Key-Value Storage
Durable Objects - Stateful Edge
Stream - Video Streaming
Images - Image Optimization
CDN - Global Network
DNS - Managed DNS

✅ Prerequisites

Make sure you have these ready before starting:

Node.js 18+ installed
GitHub account with repository admin access
Cloudflare account (free tier available)
Git installed locally
Basic knowledge of React and TypeScript

🚀 Step-by-Step Implementation

Follow these steps to deploy your React application:

  1. 1
    Create React app: npm create vite@latest my-react-app -- --template react-ts
  2. 2
    Navigate to project: cd my-react-app
  3. 3
    Install dependencies: npm install
  4. 4
    Test locally: npm run dev
  5. 5
    Create GitHub repository and push code
  6. 6
    In Cloudflare Dashboard → Pages → Create project
  7. 7
    Get Account ID from Pages dashboard URL
  8. 8
    Create API Token: My Profile → API Tokens → Create Token → Cloudflare Pages (Edit)
  9. 9
    Add secrets to GitHub: Settings → Secrets → Actions → New repository secret
  10. 10
    Add CLOUDFLARE_API_TOKEN (your API token)
  11. 11
    Add CLOUDFLARE_ACCOUNT_ID (your account ID)
  12. 12
    Create .github/workflows/deploy.yml with the workflow above
  13. 13
    Update projectName to match your Cloudflare Pages project
  14. 14
    Commit and push to main branch
  15. 15
    Monitor deployment in GitHub Actions tab
  16. 16
    Access your site at https://my-react-app.pages.dev

💡 Additional Notes & Tips

📚 About This Stack

⚛️ React

Popular JavaScript library for building user interfaces

🟠 Cloudflare

Edge-first platform with zero egress fees

⚙️ GitHub Actions

CI/CD automation directly in GitHub

🏷️ Tags & Keywords

React Cloudflare Cloudflare Pages & Workers GitHub Actions CI/CD DevOps Infrastructure as Code React Deployment Cloudflare Hosting Production Ready 2026

Advertisement Space - Google AdSense