Overview
Cloudflare Pages provides a fast, secure platform for deploying static sites and full-stack applications. For Fumadocs, you have two deployment options:- Static Export - Build and deploy as static HTML/CSS/JS files
- Full-Stack with OpenNext - Deploy Next.js with server-side features
Static Export (Recommended)
The simplest approach for most documentation sites.import { createMDX } from 'fumadocs-mdx/next';
const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {
output: 'export',
reactStrictMode: true,
images: {
unoptimized: true,
},
};
export default withMDX(config);
See Static Export for complete configuration details.
import { SearchDialog } from 'fumadocs-ui/components/dialog/search';
export function Search() {
return (
<SearchDialog
search={{
type: 'static',
index: '/static.json',
}}
/>
);
}
out/ directoryFull-Stack with OpenNext
For Next.js applications requiring server-side features (API routes, SSR, ISR).Fumadocs does not work on Cloudflare’s Edge runtime. Use OpenNext for Cloudflare to deploy with server-side features.
module.exports = {
platform: 'cloudflare',
cloudflare: {
routes: [
{
pattern: '/api/*',
custom_handler: true,
},
],
},
};
{
"scripts": {
"build": "next build && opennext build",
"deploy": "wrangler pages deploy .open-next/worker"
}
}
Configuration
wrangler.toml
Configure Cloudflare Workers/Pages settings:wrangler.toml
Environment Variables
Set environment variables in Cloudflare Dashboard:- Workers & Pages → Your Project → Settings
- Environment Variables → Add Variable
- Add for Production and Preview environments
.dev.vars
.dev.vars is gitignored by default. Use it for local secrets.Custom Domain
Add a custom domain:docs.example.com)Build Configuration
Build Settings
Configure in Cloudflare Dashboard orwrangler.toml:
wrangler.toml
Node.js Version
Specify Node.js version:.nvmrc
Image Optimization
Cloudflare Images integration:Option 1: Unoptimized Images
For static exports:next.config.mjs
Option 2: Cloudflare Images
Use Cloudflare’s image optimization:next.config.mjs
cloudflare-image-loader.js
Option 3: Cloudflare Images Service
For remote images:next.config.mjs
Search Integration
Static Search (Orama)
For static exports, use client-side search:app/static.json/route.ts
Algolia Search
Algolia works seamlessly with Cloudflare Pages:components/search.tsx
Redirects and Headers
Redirects
wrangler.toml
_redirects file:
public/_redirects
Headers
Custom headers configuration:wrangler.toml
_headers file:
public/_headers
Performance Optimization
Caching Strategy
Cloudflare automatically caches static assets. Configure cache TTL:wrangler.toml
Minification
Enable automatic minification:- Cloudflare Dashboard → Speed → Optimization
- Enable:
- Auto Minify (HTML, CSS, JS)
- Brotli compression
HTTP/3 and QUIC
Enable for faster connections:- Cloudflare Dashboard → Network
- Enable HTTP/3 (with QUIC)
Preview Deployments
Cloudflare automatically creates preview deployments:- Production: Deploys from your default branch
- Preview: Deploys from pull requests and branches
CI/CD Integration
GitHub Actions
.github/workflows/deploy.yml
GitLab CI
.gitlab-ci.yml
Troubleshooting
Build Failures
Issue: Build times out or fails Solution:- Check build logs in Cloudflare Dashboard
- Verify Node.js version compatibility
- Ensure all dependencies are in
package.json - Check memory limits (increase if needed)
404 Errors
Issue: Pages return 404 after refresh Solution: Add SPA fallback to_redirects:
Function Size Limits
Issue: “Worker exceeds size limit” Solution:- Use static export instead of OpenNext
- Reduce bundle size:
- Split large pages or features
Environment Variables Not Working
Issue: Environment variables undefined Solution:- Verify variables are set in Cloudflare Dashboard
- Use
NEXT_PUBLIC_prefix for client-side variables - Rebuild and redeploy after adding variables
- For local development, use
.dev.vars
Monitoring
Analytics
Enable Web Analytics:- Cloudflare Dashboard → Analytics → Web Analytics
- Add site
- Install beacon (automatic for Pages)
Real User Monitoring
View performance metrics:- Page load times
- Core Web Vitals
- Geographic distribution
Security
Access Policies
Restrict access to preview deployments:- Workers & Pages → Your Project → Settings
- Access Policies → Add policy
- Configure authentication (email, GitHub, etc.)
Security Headers
Add recommended security headers:public/_headers