Vercel
Vercel logoVercel · Feature trail

Next.js Framework Evolution

19 posts · Oct 2016 – Sep 2026

What this trail covers

Vercel's platform continues to evolve its support for modern JavaScript frameworks like Next.js, integrating advanced caching, streaming SSR, and per-route runtime selection across Node.js and Edge runtimes. This evolution includes optimizations for SEO best practices such as Incremental Static Regeneration (ISR), image optimization, code splitting, and font optimization, all contributing to improved user experience and search engine ranking. React 18 introduces Server Components, Client Components. The platform also actively engages in securing the ecosystem by identifying and mitigating vulnerabilities in dependencies like libheif, ensuring the safety of image optimization features.

All Vercel trails
  1. Migrating Grep from Create React App to Next.jsThis post details the migration of Grep.app from Create React App (CRA) to Next.js, focusing on leveraging React Server Components (RSC) for performance improvements. Key technical contributions include: - **State Synchronization:** Implementing conditional rendering of a `SearchBar` component between the homepage (client-rendered, centered) and the header (server-rendered, in navbar) to maintain search input state across page navigations without layout shifts. This involves synchronizing state to the URL via search params and using React Context for local input state. - **Server-First Data Fetching:** Utilizing TanStack Query with `HydrationBoundary` to prefetch data on the server without blocking HTML streaming. Client-side fetching with `useSuspenseQuery` and `useDeferredValue` is used for subsequent searches to avoid unnecessary server round trips and prevent stale or out-of-order results. - **Preventing Stale Results:** Combining React's `useOptimistic` hook with `useTransition` and TanStack Query's unique cache keys to ensure the UI always reflects the latest user input and discards stale responses. - **Prefetching Dynamic Routes:** Explicitly prefetching the `/search` route layout using `router.prefetch` in a client component to ensure instant page transitions. - **Mobile-Specific Challenges:** Introducing a `usePreventScroll` hook to stabilize the search input on mobile Safari by preventing unpredictable scroll and zoom behaviors.