Back to Blog
AWS

Using Next.js 16 Cache Components with Amplify Data Without Caching Sessions

Cache public Amplify records without letting a request cookie or owner-scoped response leak into a shared Next.js cache entry.

Terry Hunt
August 24, 2026
3 min read

Cache Components can remove repeated public Amplify Data reads, but the first cache directive is also where a session can cross the wrong boundary. I start with one published record and keep identity outside the cached function. Two test accounts alternate requests against the same route while I inspect the response and invalidation behavior. The experiment stops if a cookie, owner ID, or private field reaches shared output.

Draw the public and private data line

I list each Amplify query and mark it public, signed-in shared, group-scoped, or owner-scoped. Public articles and service records can be cache candidates. A profile, draft, cart, or admin queue stays request-bound unless the cache key and storage model can preserve its authorization boundary.

The Next.js use cache reference says cookies and headers should be read outside a cached scope and passed in as safe values. AWS currently documents managed Amplify SSR support through Next.js 15, so this Cache Components design remains a project-level compatibility test on Next.js 16.

Cache a small data function

I enable cacheComponents on a branch, then apply 'use cache' to one function that accepts a normalized public slug. The function selects only the fields the page renders. A narrow query gives me a small cache entry and a clear invalidation target.

I keep the Amplify server client setup separate from request identity. Public access uses the intended public auth mode; authenticated access follows a different function with no shared cache directive.

Keep identity out of shared keys

A user ID in a cache key can reduce accidental reuse, but it still creates stored personalized output and operational questions about eviction. I avoid that design for owner records. The Server Component reads the current user and fetches private data at request time.

I test with two accounts and a signed-out browser. Each session requests the same route in alternating order. Any cross-user field is a release blocker, even if the backend authorization remains correct.

Invalidate by record and collection

I tag an article query with its record identifier and tag the index query with the collection. An editor update refreshes the record and any list that displays its title. I do not flush unrelated pages because one post changed.

The mutation must finish before invalidation runs. If the data write fails, I return the error and leave the cache alone. If invalidation fails after a successful write, I log a retryable event instead of hiding stale output.

Check the hosting assumption

Next.js documents Cache Components as a Node-runtime feature whose request-time boundaries use partial prerendering and streaming. Amplify Hosting documents managed SSR through Next.js 15 and lists Next.js streaming and on-demand ISR as unsupported. I keep Cache Components off production until AWS documents the required behavior.

A canary can expose failure, but a successful canary cannot establish vendor support. The default runtime cache may also be process-local and may not persist across serverless requests or instances.

Add one cache boundary at a time

I ship the first public cached function before expanding the pattern. Build output, runtime logs, invalidation, and signed-in tests must stay understandable. A broad file-level directive can cache more exports than the reviewer intended.

Cache behavior also depends on the host. My Amplify and Vercel comparison covers that platform-level tradeoff.

Need a cache-boundary review?

I can trace public and owner-scoped Amplify reads through a Next.js cache plan and test for cross-session output. Send a sanitized route and data-flow summary through the contact page, or review my Next.js development services.

Related Articles

More articles in AWS

Enjoyed This Article?

Get more tutorials and insights delivered to your inbox. No spam, just valuable content for web developers.