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/image endpoint 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-adjust fallback font metrics
- No build-time subsetting or optimization
- Local fonts work but
@font-face CSS 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 deploy to 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/og edge 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() returns false
next export (legacy) — Use output: 'export' in config instead
- Old image component — Use the modern
next/image API
- 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-app scaffolding — 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:
This is a known issue being investigated. Use time-based revalidation or force-dynamic for pages that need fresh data on every request.
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
Many issues can be diagnosed by AI agents. Try using Claude Code, Cursor, or OpenCode to trace through the vinext source before filing an issue.