Et'al Software Solutions
Back to blog
EngineeringJanuary 5, 2026·6 min read

Migrating to Next.js 16: Lessons Learned

Our experience upgrading to Next.js 16, including the new proxy pattern and Turbopack improvements.

Mike Williams

Lead Developer

Why Upgrade to Next.js 16

Next.js 16 represents a significant step forward for the framework. Turbopack is now the default bundler, delivering dramatically faster build times. The new proxy pattern simplifies middleware configuration. And numerous DX improvements make daily development more pleasant.

For WebApp, the upgrade was essential. Our users deserve the best possible performance, and our developers deserve the best possible tools.

The New Proxy Pattern

One of the biggest changes in Next.js 16 is the deprecation of `middleware.ts` in favor of `proxy.ts`. The new proxy pattern offers:

- **Clearer mental model** for request interception - **Better performance** with optimized execution - **Simplified configuration** for common patterns like auth redirects

Our proxy handles Supabase session refresh and protected route redirects with minimal code. The migration was straightforward—mostly renaming and adjusting the export.

Turbopack in Production

Turbopack being production-ready in Next.js 16 is transformative. Our development server now starts in under a second. Hot module replacement is nearly instantaneous. And production builds complete 3-4x faster than with webpack.

We did encounter a few edge cases with certain npm packages, but the Turbopack team has been responsive, and most issues have workarounds or fixes in progress.

Migration Tips

If you're planning a Next.js 16 migration, here's what we learned:

1. **Start with a fresh branch** and migrate incrementally 2. **Update dependencies first**, especially React 19 compatibility 3. **Test your middleware/proxy** thoroughly—this is where most breaking changes occur 4. **Monitor bundle sizes** during the transition 5. **Run your test suite frequently** to catch regressions early

The official migration guide is excellent, but every codebase has unique considerations. Plan for a few unexpected issues and allocate time accordingly.