Layer 6 · stacks

Every web app answers the same six questions.

A "stack" is just a memorable name for one set of answers. T3, MERN, MEAN, LAMP: acronyms for filled-in grids. Once you see the grid, the names stop being intimidating and start being boring, which is the goal.

T3 is filled in. Press another stack and watch the same six slots take different answers.

the grid

1 · language

what you write in

2 · UI

what draws the page

3 · server + routing

who answers the URL

4 · client ↔ server

how the tab calls the server

5 · data access + database

where rows live, and the ORM

6 · auth

who is this user
The one you asked about

T3 is Next.js plus three opinions about type safety.

Theo Browne's create-t3-app is a Next.js starter with a specific set of answers pre-filled. The pitch is "typesafe from database to browser": Prisma types the rows, tRPC carries those types across the network, TypeScript checks the whole chain. Change a column and the error shows up in the React component that uses it.

The "3 Ts": TypeScript, tRPC, Tailwind. Everything else is optional in the installer. In 2026 the DB layer is often Drizzle instead of Prisma; the shape is the same.

pieceanswersruns
TypeScriptlanguagebuild time only
Next.js (with React)UI, server, routingserver + browser
tRPCclient ↔ server, typedboth ends
Prisma / Drizzle + Postgresdata access + databaseserver
NextAuth (Auth.js)authserver
Tailwindstyling (question 7, if you like)build time only

With server components and server actions, many T3 apps now use tRPC less: a server component can just call Prisma. tRPC still earns its place when a client component needs typed data.

Same questions, older answers

MERN is what T3 looked like before Next.js existed.

MongoDB, Express, React, Node. Express is a small routing library for Node; you write the server by hand. React is plain client-side React (CSR only). Mongo stores JSON documents instead of tables. There's no built-in answer for auth or type safety; you bolt on JWTs and hope.

Nothing about MERN is wrong. It's just more assembly required, and the pieces don't know about each other. Next.js's whole value is collapsing "Express + React + routing + SSR" into one thing that agrees with itself.

questionMERNT3
languageJavaScriptTypeScript
UIReact (browser only)React (server + browser)
server + routingExpress, hand-writtenNext.js, from the filesystem
client ↔ serverREST + fetch, untypedtRPC / server actions, typed
dataMongoose + MongoDBPrisma + Postgres
authroll your ownNextAuth
Full circle

Put the T3 pieces in the rooms from the first deck.

Two rooms and a workshop: the browser tab, Node, and build time. Pick a piece, then click the room it runs in. Some need two rooms. If you can do this without thinking, you have the whole picture.

where it runs

browser tab

Node (server)

build time

Postgres is its own process, usually on its own machine. It goes in the Node room here because only the server talks to it.

Last stop

Now draw yours.

Pick what your app actually has and the diagram assembles itself from everything you've walked through. Then open your repo and find each piece in it.