A strong default for React apps that must be fast and findable
Next.js adds routing, server rendering, caching and a build pipeline to React. For marketing sites with an app behind them, online shops, dashboards and SaaS products, that saves months of plumbing. As a Next.js development company we reach for it when pages need to load quickly, rank in search and still behave like an application once they have loaded.
It is also a framework that moves quickly. Next.js 16 reworked caching, renamed middleware to proxy.ts and made Turbopack the default bundler, and the project now ships security releases roughly once a month. Choosing it means committing to keep up. We build new apps on it, upgrade older ones, and, for clients who want it, keep production patched on an agreed schedule through managed services.
For small sites the framework matters less than people assume; for large apps it matters more. The tables below show when we would pick Next.js, plain React with Vite, or Astro.
Next.js development services
From a first build to rescuing an app that has outgrown its caching. Everything is written in TypeScript, with tests and a pipeline in your own repository.
New Next.js 16 applications
The problem
You are starting a product or replacing a slow single-page app, and you want server rendering, good Core Web Vitals and a codebase a new hire can follow.
How we build it
We start from the App Router with Server Components by default, add client components deliberately, agree budgets for LCP, INP and CLS, and choose the caching approach per route before writing pages. Data access lives in a server-only layer, so secrets never reach the browser.
What you get
- App Router structure and conventions
- Performance budgets checked in CI
- Server-only data layer
- Preview deployment for every pull request
Next.js migration & upgrades
The problem
Next.js 14 no longer gets security fixes, 15 is in maintenance until 31 January 2027, and the jump to 16 touches request APIs, middleware, caching and the bundler at once.
How we build it
We run the official codemods, then fix what they cannot: synchronous params and cookies access, middleware moved to proxy.ts, custom webpack settings Turbopack does not support, and caching that behaved differently before. Each step ships on its own, so a regression is easy to trace.
What you get
- Upgrade plan with risk per route
- Codemods plus manual fixes
- Visual and end-to-end regression tests
- Staged release with rollback
Core Web Vitals & performance rescue
The problem
Search Console flags poor INP or LCP, the JavaScript bundle keeps growing, and pages that should feel instant show spinners.
How we build it
We start from field data, then move work off the browser: Server Components for data, fewer client boundaries, correct image priority and font loading, third-party scripts deferred or removed, and caching for pages that never needed to be dynamic.
What you get
- Field-data baseline (CrUX or RUM)
- Bundle and hydration audit
- Fixes ranked by impact
- Before-and-after report
Hosting & self-hosting
The problem
The Vercel bill is rising faster than traffic, or your security team needs the app inside your own cloud account and network.
How we build it
We compare Vercel, other managed platforms and self-hosting on running cost and operational effort, then build the option you pick: containers on AWS, Azure or Google Cloud with a shared cache and a CDN, or a platform that supports the stable Adapter API.
What you get
- Hosting cost and effort comparison
- Container or adapter-based deployment
- Shared cache and CDN set-up
- Runbook for upgrades and incidents
Security patching & support
The problem
Critical framework flaws such as the 2025 middleware authorisation bypass and the React Server Components remote-code-execution bug needed patching within days. Without a routine, upgrades wait until something breaks.
How we build it
On a support plan we watch Next.js and React advisories, apply scheduled security releases inside an agreed window, apply emergency patches faster, and run your test suite before every deploy. Dependency updates get the same review as feature code.
What you get
- Advisory monitoring
- Patch windows agreed by severity
- Tested, logged deployments
- Monthly status note
The Next.js stack we use
A small, well-supported toolset. Versions as of October 2026, pinned per project and upgraded on a calendar you approve.
Next.js 16.4
Released in October 2026. New apps now get Cache Components by default, and the model becomes the default for all apps in Next.js 17. Next.js 15 gets security fixes until 31 January 2027; 14 is unsupported.
React 19.3
Server Components and Server Functions, stable View Transitions, and the React Compiler where it measurably reduces re-renders.
Turbopack
The default for development and production builds since Next.js 16. We keep webpack only where a plugin has no Turbopack equivalent yet.
TypeScript, Drizzle or Prisma
Strict TypeScript, a typed database layer and schema validation on every Server Function input.
Vitest, Playwright, Lighthouse CI
Unit tests for logic, Playwright for the journeys that matter, and Lighthouse checks in CI to catch performance regressions before release.
Node.js 24 or 26 LTS
Next.js 16 needs Node.js 20.9 or later, but Node 20 is end-of-life, so production runs on a supported LTS line.
Tools we use alongside Next.js
- Turbopack
- Tailwind CSS
- shadcn/ui
- Auth.js
- Drizzle
- Prisma
- Vitest
- Playwright
- Lighthouse CI
- Sentry
- OpenNext
- Vercel
- Docker
- GitHub Actions
Versions and vendor details checked October 2026. We pin versions per project and upgrade on a schedule you approve.
Next.js in 2026: what to know before you build or upgrade
This guide covers the decisions that shape cost and risk on a Next.js project: whether to use it at all, how Server Components and caching work, performance targets, hosting, upgrades and security. Everything here reflects the state of the framework in October 2026.
Next.js, plain React (Vite) or Astro?
If you are looking for a React.js development company in India or anywhere else, settle this question first, because it decides hosting, SEO and who you can hire.
| Next.js 16 | React + Vite 8 | Astro 7 | |
|---|---|---|---|
| Best for | Apps that need SEO and interactivity: SaaS, commerce, portals | Internal tools and apps behind a login | Content sites, documentation, marketing pages |
| Rendering | Server, static and streaming, chosen per route | In the browser | Static or server HTML, with interactive “islands” |
| JavaScript shipped | Moderate; depends on client-component discipline | All of the app | Minimal by default |
| Hosting | A Node.js server, Vercel or an adapter-based platform | Any static host or CDN | Static host, or a server for dynamic routes |
| Main risk | Framework churn and caching complexity | Weak SEO and slow first load if used for public pages | Awkward for highly interactive apps |
Server Components, in plain terms
A Server Component runs only on the server. It can read the database directly, and none of its code is sent to the browser. A Client Component, marked with "use client", ships JavaScript and handles clicks and state. Well-built apps keep most of the tree on the server and push client components to the leaves. Two mistakes cause most trouble: marking a high-level layout as a client component, which drags everything below it into the bundle, and forgetting that Server Functions (Server Actions) are public HTTP endpoints. Every one needs input validation and an authorisation check of its own.
Caching: the part most teams get wrong
Caching in the App Router has changed twice. Next.js 15 stopped caching fetch requests and GET route handlers by default. Next.js 16 introduced Cache Components: you opt in explicitly with the "use cache" directive and a cacheLife profile, revalidateTag() now takes a profile as its second argument, and updateTag() gives read-your-writes behaviour inside Server Functions. Since 16.4, new apps get Cache Components by default, and the Next.js team has said it becomes the default model in Next.js 17. Our rule is to decide per route what may be stale, and for how long, before writing it. If you self-host on more than one instance, the cache must be shared, or users will see different versions of the same page.
Core Web Vitals targets
Google measures three Core Web Vitals at the 75th percentile of real visits, per web.dev:
- Largest Contentful Paint (LCP): 2.5 seconds or less.
- Interaction to Next Paint (INP): 200 milliseconds or less. INP replaced First Input Delay as a Core Web Vital in March 2024.
- Cumulative Layout Shift (CLS): 0.1 or less.
In Next.js apps, poor INP usually comes from large client bundles and heavy hydration, poor LCP from hero images without priority or slow server responses, and poor CLS from fonts, banners and embeds without reserved space. Judge progress with field data from Search Console or real-user monitoring, not a single lab score.
Hosting: Vercel, other platforms or self-hosting
| Option | Good for | Watch out for |
|---|---|---|
| Vercel | The least operational work, on the platform built by the Next.js team | Usage-based billing that grows with traffic, function time and image optimisation; model it against your real traffic |
| Other managed platforms | Teams already on Netlify, Cloudflare, AWS Amplify or Google Cloud. Next.js 16.2 introduced a stable Adapter API and a shared test suite, designed with those providers and OpenNext | Check the adapter’s support for the features you use, such as streaming, revalidation and Cache Components |
| Self-hosting in containers | Data residency, private networks, steady high traffic | You own the shared cache, CDN, image optimisation, scaling and patching |
Upgrade checklist: Next.js 14 or 15 to 16
- Move to Node.js 24 or 26 first. Next.js 16 requires at least 20.9, and Node 20 itself is out of support.
- Upgrade React to 19 and fix warnings before touching Next.js.
- Run
npx @next/codemod@canary upgrade latest, then the async request API codemod if any synchronousparams,searchParams,cookies()orheaders()calls remain. - Rename
middleware.tstoproxy.ts. Proxy runs on the Node.js runtime; middleware remains only for edge use and is deprecated. - Check custom webpack configuration. Turbopack is now the default, and
--webpackis a temporary escape hatch, not a plan. - Add a
cacheLifeprofile to everyrevalidateTag()call, and replaceexperimental.pprwith Cache Components. - Replace
next lintwith ESLint or Biome run directly, and swapimages.domainsforremotePatterns. Note the new image defaults, including a four-hour minimum cache time. - Compare screenshots and end-to-end tests before and after, then release behind a staged rollout.
Security patching: what we commit to
Next.js has had serious vulnerabilities. CVE-2025-29927, published in March 2025 and rated critical (CVSS 9.1), let attackers bypass authorisation checks done in middleware by sending a crafted x-middleware-subrequest header; it was fixed in 12.3.5, 13.5.9, 14.2.25 and 15.2.3. In December 2025, CVE-2025-55182, a pre-authentication remote-code-execution flaw in React Server Components rated 10.0, was added to CISA’s Known Exploited Vulnerabilities catalogue within two days of disclosure. Since July 2026 Next.js has run a formal security release programme, announcing scheduled releases roughly once a month and still shipping urgent fixes out of band.
For clients on a support plan we agree patch windows by severity, apply scheduled releases inside them, apply critical fixes faster, test before every deploy and keep a log. We also never rely on proxy.ts alone for access control: authorisation is checked again where the data is read.
When not to use Next.js
- A brochure or blog site that a CMS or Astro would serve with less code and cheaper hosting.
- An internal dashboard with no SEO needs, where a Vite single-page app is simpler.
- A team with no capacity to upgrade at least twice a year.
- Heavy back-end processing, which belongs in a separate API rather than route handlers.
What drives the cost of a Next.js project
- Distinct page types and how much of each is personalised rather than cacheable.
- Integrations: headless CMS, commerce, search, authentication, payments.
- Performance targets and how far the current app is from them.
- Hosting model: self-hosting needs more infrastructure work up front.
- Upgrade debt: an app on 13 or 14 with custom webpack takes longer than one already on 15.
- Ongoing patching under a support plan.
We do not publish prices; a written proposal follows a short discovery.
How to choose a Next.js agency
- Ask what they would build your project in if not Next.js, and why.
- Ask how they decide caching per route and how they handle multi-instance self-hosting.
- Ask for their patching routine and how quickly they applied the 2025 fixes.
- Look for performance budgets in CI, not a one-off Lighthouse screenshot.
- If you plan to hire Next.js developers through them, talk to those developers before signing.
- Make sure the repository, hosting account and domain are yours.
Next.js in production at Radiatus
One of our own platforms runs on the stack described on this page, so its upgrades and patches are our problem too.
A typical first engagement: Next.js audit and upgrade plan
Two to four weeks, fixed scope, for a planned build or an app already in production.
Access & baseline
Repository and hosting access, field Core Web Vitals from Search Console or your monitoring tool, and current Next.js, React and Node.js versions.
Architecture review
Rendering and caching per route, client bundle size, Server Function security, dependency health and hosting cost.
Proof on one route
We upgrade or rebuild one representative route in a branch and measure the change in bundle size and vitals.
Roadmap & proposal
A ranked plan for the upgrade, performance fixes and a patching routine, with a written proposal if you want us to deliver it.
Guides and related pages
Guides
Questions about Next.js projects
Yes if you are on 14, which no longer receives security fixes. Next.js 15 is in maintenance and receives security releases until 31 January 2027, so plan the move to 16 before then. Most apps upgrade in stages: runtime and React first, then async request APIs and proxy.ts, then caching and Turbopack.
No. Next.js runs on any Node.js server with next start, in containers on AWS, Azure or Google Cloud, or on platforms that build on the stable Adapter API introduced in Next.js 16.2. Vercel needs the least operational work. Self-hosting gives more control and can cost less at steady traffic, but you take on caching, the CDN and patching.
It can be. Server rendering and static generation give search engines complete HTML, and the Metadata API handles titles, canonical tags and structured data. What usually hurts rankings is performance: heavy client bundles push INP above 200 milliseconds and slow hero images push LCP past 2.5 seconds. We set those budgets at the start of a project.
Next.js now announces scheduled security releases in advance, roughly once a month, and still ships urgent patches out of band. For clients on a support plan we agree patch windows by severity, apply and test releases within them, and log each deployment. We also never rely on proxy or middleware alone for authorisation, which is what made the 2025 bypass so damaging.
Yes. For internal tools behind a login, a plain React app built with Vite is often simpler and cheaper to host. For content-heavy sites with little interactivity, Astro ships less JavaScript. We recommend the lighter option when it fits.
The main drivers are the number of distinct page types, how much is personalised rather than cacheable, integrations such as CMS, commerce and authentication, performance targets, the hosting model and whether you want ongoing patching. We do not publish prices. A free consultation and a short discovery come first, then a written proposal that sets out scope, milestones and the price.
Building with Next.js, or stuck on version 14?
Share the repository or the URL. A senior engineer will come back with a plain assessment of upgrade effort, performance and hosting cost.






Compliance-first delivery