Documentation Index
Fetch the complete documentation index at: https://mintlify.com/cloudflare/vinext/llms.txt
Use this file to discover all available pages before exploring further.
Current Limitations
These are known limitations in the current version of vinext. Most are related to build-time optimizations that don’t affect runtime behavior.Image Optimization
Image optimization doesn’t happen at build time.- Remote images: Work via @unpic/react, which auto-detects 28 CDN providers including Cloudinary, Imgix, and Cloudflare Images
- Local images: Routed through a
/_vinext/imageendpoint that can resize and transcode on Cloudflare Workers (via the Images binding) in production - Missing: Build-time optimization, static image resizing, automatic format conversion during build
Font Loading
Google Fonts are loaded from the CDN, not self-hosted.- Fonts are loaded at runtime via CDN links
- No
size-adjustfallback font metrics - No build-time subsetting or optimization
- Local fonts work but
@font-faceCSS is injected at runtime, not extracted at build time
Layout Segment Hooks
useSelectedLayoutSegment(s) derives segments from the pathname rather than being truly layout-aware.
- Works correctly for most use cases
- May differ from Next.js in edge cases with parallel routes
- The hook infers segments from URL structure instead of React component tree position
Route Segment Config
runtime and preferredRegion segment config options are ignored.
vinext runs in a single environment (Cloudflare Workers), so these configuration options have no effect:
Node.js Production Server
The Node.js production server (vinext start) works for testing but is less complete than Workers deployment.
- Cloudflare Workers is the primary deployment target
- The Node.js server is intended for local testing only
- Some features may behave differently on Node.js vs Workers
- For production, use
vinext deployto deploy to Cloudflare Workers
Native Node Modules in Dev Mode
Native Node modules (sharp, resvg, satori, lightningcss, @napi-rs/canvas) crash Vite’s RSC dev environment.- Dynamic OG image/icon routes using these modules work in production builds
- They don’t work in dev mode due to Vite’s RSC environment limitations
- These are auto-stubbed during
vinext deploy - Workaround: Test OG images in production build (
vinext build && vinext start)
Intentionally Not Supported
These features are intentionally excluded from vinext:Vercel-Specific Features
@vercel/ogedge runtime — Use the standard version instead- Vercel Analytics integration — Use Cloudflare Analytics or Web Analytics
- Vercel KV/Blob/Postgres bindings — Use Cloudflare equivalents (Workers KV, R2, D1)
Deprecated Features
- AMP — Deprecated since Next.js 13.
useAmp()returnsfalse next export(legacy) — Useoutput: 'export'in config instead- Old image component — Use the modern
next/imageAPI
Build Tool Configuration
- Turbopack/webpack configuration — vinext runs on Vite. Use Vite plugins instead
- webpack loaders — Use equivalent Vite plugins
- Turbopack config — Use Vite config instead
Testing
next/jest— Use Vitest instead, which has better Vite integration
Scaffolding
create-next-appscaffolding — Not a goal. Use manual installation or migrate an existing Next.js app
Bug-for-Bug Parity
If it’s not in the Next.js docs, we probably don’t replicate it. vinext aims for pragmatic compatibility with documented Next.js behavior, not bug-for-bug parity with undocumented edge cases or Vercel-specific implementation details.RSC Module Caching (Dev Mode)
In development, RSC modules may be cached across requests. This can affect patterns that expect fresh data on each render:Workarounds
For most limitations, there are practical workarounds:Image Optimization
Use a CDN that supports automatic optimization:Font Optimization
Self-host fonts if you need build-time optimization:Native Modules in Dev
Test OG images in production builds:Reporting Issues
If you encounter a limitation not listed here:- Check the GitHub issues
- Search the test tracking document
- File a new issue with:
- What you’re trying to do
- The error message or unexpected behavior
- A minimal reproduction if possible