DevStacked
Jun 23, 202613 min read

Best Hosting Platforms for Next.js in 2026: Who Actually Handles ISR & PPR Correctly?

Every "best hosting for Next.js" post you'll find says roughly the same thing: Vercel is great, Netlify is a solid alternative, Cloudflare is fast, AWS is for enterprises. None of them tell you what actually happens when you deploy a page using Incremental Static Regeneration (ISR) or Partial Prerendering (PPR) to platforms that aren't Vercel.

That's the gap this post fills. Instead of comparing dashboards and pricing pages, we're going to look at what each platform's adapter actually does with ISR and PPR — because "supported" doesn't mean the same thing everywhere. This article focuses on architecture and feature behavior rather than benchmark results, since latency varies significantly by region, workload, cache hit ratio, and deployment configuration.


The Distinction Nobody Explains: Functional vs. Performance Fidelity

This is the single most useful framing in this whole post, and it comes straight from Next.js's own platform documentation.

💡 Tip: Next.js draws a line between two levels of platform support:

  • Functional fidelity — the feature works correctly. Your ISR page revalidates, your PPR shell renders.
  • Performance fidelity — the feature works optimally. The static shell is served from the CDN edge in milliseconds, not from a server function in another region.

A platform can have full functional fidelity for PPR (it renders correctly) while having much lower performance fidelity than Vercel (it's served from a function instead of true edge-cached HTML). Both are "PPR support" — but they perform very differently in production. Keep this distinction in mind for every platform below.


Why ISR and PPR Are Hard for Non-Vercel Platforms

Quick recap if you need it: ISR lets a static page revalidate itself in the background after a set time, without a full rebuild. PPR (the rendering mode behind Cache Components, Next.js's "use cache" model) splits a single page into a static shell plus dynamic "holes" that stream in separately.

Both features assume something most CDNs weren't built for: that cached HTML can be mutated after deployment — purged, regenerated, and partially streamed — rather than treated as an immutable file tied to one deploy. Traditional CDN deploy models (Netlify, Cloudflare Pages, AWS Amplify, and others all once worked this way) assume deployed assets never change until the next deploy. ISR and PPR break that assumption on purpose.

This is exactly why Next.js, Netlify, Cloudflare, AWS Amplify, and Google Cloud spent over a year building a shared Deployment Adapter API, which went stable in Next.js 16.2 (March 2026). Before this, most non-Vercel platforms were reverse-engineering Vercel's undocumented internal build output to support ISR at all. Now there's a public, versioned contract every platform builds against — including Vercel itself.

That context matters because it means platform support for these features is improving rapidly and consistently right now, not stagnant.


Platform-by-Platform Breakdown

Vercel

Vercel built Next.js, so unsurprisingly it has both full functional and the highest performance fidelity for ISR and PPR.

  • ISR: Native. Stale content serves instantly while regeneration happens in the background, with sub-second revalidation propagation across their edge network.
  • PPR / Cache Components: This is where the gap is biggest. PPR's design intentionally splits a response into a CDN-cacheable static shell plus a dynamically-stitched stream appended at request time. As of this writing, Vercel is the only platform that stitches that static shell and the dynamic stream together at the CDN edge itself — every other platform currently resolves PPR through a server/function layer instead of true edge stitching.
// app/products/[id]/page.tsx — works identically everywhere,
// but only Vercel currently serves the static part from true edge cache
async function getProduct(id: string) {
  "use cache";
  const res = await fetch(`https://api.example.com/products/${id}`);
  return res.json();
}

Best for: teams who want zero deployment-config overhead and the fastest possible PPR/ISR performance out of the box, and don't mind paying for that convenience.

⚠️ Common Mistake: Assuming Vercel's free Hobby tier scales like its paid tier. Function execution time, image optimization, and bandwidth all meter separately — a project that feels free in development can post a real bill in production.


Netlify

Netlify's Next.js Runtime is an officially maintained adapter, tested against every new stable Next.js release.

  • ISR: Fully supported, including both time-based and on-demand revalidation, via Netlify's fine-grained caching primitives for the Full Route Cache and Data Cache.
  • PPR: Supported — Netlify provisions a serverless Function specifically to handle SSR, ISR, and PPR. This gives full functional fidelity, but the static shell isn't served straight from CDN edge cache the way Vercel's is — it still runs through that Function layer, which is the performance-fidelity gap described above.
// next.config.ts — no Netlify-specific config needed for PPR itself,
// the adapter detects and provisions the right Functions automatically
const nextConfig = {
  cacheComponents: true,
};

Best for: teams who want Vercel-like functional completeness with a different pricing model or existing Netlify infrastructure (Forms, Identity, etc.).

⚠️ Common Mistake: Pointing Next.js rewrites at static files inside public/ — Netlify's adapter doesn't support that pattern, so routes that worked locally can silently 404 in production.


Cloudflare Workers (via OpenNext)

Cloudflare doesn't have a native Next.js runtime — you deploy through the community-maintained @opennextjs/cloudflare adapter, which transforms Next.js's build output into something Workers can run.

  • ISR: Supported through the adapter's caching layer.
  • PPR: Documented as supported for the App Router, but it's newer and still maturing — Cloudflare's own docs list PPR alongside features like Node Middleware as areas with ongoing compatibility work. A dedicated, verified Cloudflare adapter built on Next.js's new stable Adapter API is in active development, which should close most remaining gaps.
  • The catch: image optimization needs to be delegated to Cloudflare Images or configured separately — next/image doesn't work out of the box the way it does on Vercel.
# Cloudflare-specific deploy flow
npm install @opennextjs/cloudflare
npx @opennextjs/cloudflare
npx wrangler deploy

Best for: teams already invested in Cloudflare's edge network (Workers, D1, KV, R2) who want Next.js to live in the same ecosystem, and who can tolerate being slightly behind the bleeding edge on newer caching features.

⚠️ Common Mistake: Forgetting the nodejs_compat compatibility flag in wrangler.toml / wrangler.jsonc. Without it, plenty of Next.js server dependencies simply fail at runtime with confusing errors.


AWS Amplify

Amplify has supported Next.js SSR for a while, but it's noticeably behind on the newer caching model.

  • ISR: Time-based revalidation works. On-demand ISR (revalidatePath / revalidateTag triggered manually) is explicitly not supported — if your app relies on on-demand revalidation, it silently won't behave as expected on Amplify.
  • PPR / Cache Components: Not clearly documented as supported at the time of writing. Amplify's adapter has had open compatibility issues tracking Next.js 16 support, which suggests PPR support is still catching up rather than production-proven.
  • Build output is also capped at 220 MB for SSR apps — easy to hit with image-heavy or dependency-heavy projects.

Best for: teams already deep in AWS infrastructure (IAM, CloudFront, existing AWS billing) who need simple SSR + scheduled ISR, and who can verify PPR behavior thoroughly before relying on it in production.

⚠️ Common Mistake: Deploying with output: "export" and expecting ISR or SSR to work. Static export disables the Next.js server runtime entirely — no SSR, no ISR, no API routes, full stop.


Railway & Render (Container/Docker Platforms)

These two get grouped together because they take the same fundamental approach: you give them a Dockerfile or a Node process, and they run it. Functionally, this means ISR and PPR work exactly as well as they do in self-hosting — because that's effectively what's happening.

  • Railway: Has an official Next.js + Postgres deployment guide using output: "standalone" in a Dockerfile. SSR, SSG, and ISR all work as expected since it's a real persistent Node process. PPR isn't explicitly documented but should work for the same reason — it's just next start. The bigger concern reported in 2026 production usage isn't feature support, some users have reported reliability concerns around persistent storage and deployments, so production testing is important.
  • Render: Supports SSR, ISR, and API routes through its Web Service deployment type, also via Docker or Git-based builds. Same story as Railway — because it's a real Node process, feature support isn't the limiting factor. Zero-downtime rolling deploys need deliberate configuration; they're not automatic the way they are on Vercel.

Best for: teams who want container-based pricing predictability without writing their own Dockerfile-to-production pipeline from scratch, and who are comfortable being early on platform maturity.

⚠️ Common Mistake: Treating Railway or Render as "set and forget" the way Vercel is. Both still require you to think about zero-downtime deploys, shared cache for multiple instances, and monitoring — that operational layer doesn't disappear just because there's no explicit Next.js adapter to configure.


Self-Hosting (Docker, VPS, Fly.io, Cloud Run)

This is the one with the cleanest answer of all of them, straight from Next.js's own documentation:

A single next start process handles every Next.js feature correctly: Server Components, ISR, PPR, Cache Components, Server Actions, Proxy, and after().

Full functional fidelity, no adapter, no caveats — because there's no translation layer between your app and the framework. The tradeoffs aren't about features; they're about who's doing the operational work.

# Minimal self-hosting Dockerfile
FROM node:22-alpine AS base
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM node:22-alpine AS runner
WORKDIR /app
COPY --from=base /app/.next/standalone ./
COPY --from=base /app/.next/static ./.next/static
EXPOSE 3000
CMD ["node", "server.js"]

What you give up is everything Vercel/Netlify automate for you:

  • Multi-instance cache coordination — if you scale beyond one server, revalidateTag() only invalidates the instance that handled the request by default. You need a shared cache handler (commonly Redis) so other instances learn about invalidations.
  • Streaming infrastructure — PPR's time-to-first-byte advantage depends on your reverse proxy actually supporting streaming responses. Without it, the static shell and dynamic content get buffered and sent together, which still works but quietly loses PPR's main benefit.
  • All the DevOps, full stop: TLS, zero-downtime deploys, observability, scaling rules.

Best for: teams with existing DevOps capacity, strict data residency or compliance requirements, or sustained traffic where Vercel's usage-based pricing starts to outpace flat compute costs.

⚠️ Common Mistake: Self-hosting without output: "standalone" in next.config.ts. Without it, your Docker image drags in the entire node_modules tree instead of a trimmed production bundle.


Quick Comparison

PlatformISR (time-based)ISR (on-demand)PPR / Cache ComponentsPerformance Fidelity
Vercel✅ Native✅ Native✅ True edge-stitched shellHighest
Netlify✅ Via adapter✅ Via adapter✅ Via Function layerHigh
Cloudflare Workers✅ Via OpenNext🟡 Maturing🟡 Documented, still maturingMedium
AWS Amplify✅ Time-based only❌ Not supported🟡 Unclear / catching upMedium-Low
Railway / Render✅ (it's just Node)✅ (it's just Node)✅ (it's just Node)Depends on your setup
Self-hosted✅ Full fidelity✅ Full fidelity✅ Full fidelityYou configure it

So, Which One Should You Actually Use?

  • Default choice for most SaaS/MVP work: Vercel. The performance-fidelity gap on PPR is real, and for most projects, not having to think about adapters or streaming infrastructure is worth the premium.
  • Want Vercel-level functional support on a different platform or pricing model: Netlify is the most production-proven non-Vercel option for ISR and PPR today.
  • Already living in Cloudflare's ecosystem: Workers via OpenNext is viable, just confirm PPR behavior for your specific routes before launch — it's improving fast but newer than Netlify's support.
  • On AWS for compliance or org reasons: Amplify works for SSR + scheduled ISR; don't build a feature around on-demand revalidation or PPR there yet without testing thoroughly.
  • Want container simplicity without managing your own VPS: Railway or Render — but budget time for reliability testing, especially anything stateful.
  • Have DevOps capacity, compliance needs, or are past the point where usage-based pricing makes sense: self-host. Every feature works correctly by default; you're trading platform fees for engineering time.

Frequently Asked Questions

Does "supports ISR" mean it works exactly like Vercel?

Not necessarily. Use the functional vs. performance fidelity distinction from earlier in this post — most platforms now have functional support, but the experience (latency, edge caching, revalidation propagation speed) still varies.

Is PPR available everywhere yet?

Functionally, on most major platforms — yes. With the same performance characteristics as Vercel — no, not yet. Vercel currently has unique edge-stitching infrastructure that other platforms haven't replicated.

Will the new Adapter API make all platforms equal eventually?

It makes them correct against the same shared contract, which is a big deal for portability. It doesn't automatically make them equally fast — that still depends on each platform's own CDN and edge infrastructure investment.

Is self-hosting actually cheaper?

Compute usually is. Total cost isn't always — factor in the engineering hours for setup and ongoing maintenance, not just server bills, before assuming self-hosting wins on price.

Can I switch platforms later if I start with Vercel?

Yes, especially now that the Adapter API is stable and shared across platforms. It's not zero-effort, but it's far less risky than it was before this API existed.

Platform Migration Difficulty

Move FromDifficulty
Vercel → NetlifyLow
Vercel → OpenNextMedium
Vercel → Self-hostedMedium
Amplify → VercelLow

Wrapping Up

"Best Next.js hosting" isn't really a single ranking — it's a tradeoff between performance fidelity, pricing model, and how much operational work you want to own. Vercel still leads on PPR/ISR performance specifically because it built the rendering model the rest of the ecosystem is now catching up to. Everyone else is closing that gap at different speeds, and the new shared Adapter API is exactly why that gap is closing faster in 2026 than it ever has before.

If you're deploying something today: pick based on where your team already lives, then verify ISR/PPR behavior yourself in a staging deploy rather than trusting a docs page's checkmark — the distinction between "works" and "works well" is exactly what most comparison posts skip.


Useful Resources

Continue Learning

Next.jsHostingISRPPRCache ComponentsDeploymentVercelNetlifyCloudflare
Share On