Your Stack — Node + Next.js + Postgres
A read on the Node + Next.js + React + TypeScript + Postgres + pg-boss stack as of May 2026.
This is the closest thing to a "default" full-stack JavaScript stack in 2026. It's not exciting, and that's a feature.
The components
| Layer | Choice | Notes |
|---|---|---|
| Runtime | Node 24 LTS (or Bun) | LTS Node is still the safe default; Bun is production-ready for many workloads. |
| Framework | Next.js 16 (App Router) | Server Components stable; Turbopack default in dev; partial prerendering generally available. |
| UI | React 19 | use, server actions, async transitions, document metadata APIs. |
| Language | modern TypeScript | --isolatedDeclarations, using / disposable resources, regex types. |
| DB | Postgres 17/18 | Self-hosted, Neon, Supabase, RDS, or Railway. |
| Job queue | pg-boss | Postgres-backed queue, no Redis required. |
| Common adds | Drizzle / Prisma, Tailwind, shadcn/ui, NextAuth or Better Auth, Resend, Stripe, Sentry, Vercel/Cloudflare/Fly. |
Why it's the default
- Talent + AI — every model, every Stack Overflow answer, every starter assumes some version of this. New hires are productive on day 1.
- Library coverage — the React ecosystem still has more high-quality components, patterns, and integrations than any other.
- Hosting — Vercel, Netlify, Cloudflare, Fly, Render, Railway, AWS Amplify all support Next.js as a first-class target.
- Postgres — boring, durable, well-understood, scales further than most apps will need.
- pg-boss — using your existing DB as the queue removes Redis from the stack. You trade some throughput for one fewer service to operate.
Where it strains
- Cold starts on serverless for big apps — partly addressed by partial prerendering, but still a tax on Lambda-style deploys.
- Bundle size — easy to bloat the client with ill-considered dependencies; Server Components help but aren't a silver bullet.
- App Router complexity — server vs client components, request memoization, cache directives, route handlers, server actions — there is a real learning curve.
- pg-boss limits — fine up to a few thousand jobs/minute; beyond that consider BullMQ + Redis, Inngest, or Trigger.dev.
What's worth adding
Likely-good additions to this exact stack:
- Drizzle ORM — closer to SQL than Prisma, very small runtime, edge-compatible.
- Better Auth — flexible, plugin-based auth that pairs well with your own DB.
- shadcn/ui + Tailwind v4 — copy-paste components on top of Radix primitives.
- Zod or Valibot — runtime validation for inputs, env vars, and API boundaries.
- TanStack Query — even with Server Components you'll want this on client-heavy screens.
- Sentry or Highlight — error tracking; do this before you launch.
- PostHog or Plausible — product analytics or simple privacy-respecting analytics.
- Resend + React Email — transactional email with components.
- UploadThing or direct R2/S3 presigned URLs — file uploads.
What you can probably remove
If you're honest about your scale:
- A separate Redis instance (use pg-boss + LISTEN/NOTIFY + a Postgres-backed cache like
pg_kvstoreorlru-cachefor hot paths). - Most "BaaS" services if you're already running Postgres.
- Cloudinary or similar — direct R2 + a small image transform Worker is usually enough.
Worth dabbling with
If your goal is to broaden, not switch:
- Hono on Cloudflare Workers — see Edge Cloudflare.
- TanStack Start — see TanStack Start.
- Svelte 5 / SvelteKit — see Svelte & Vue.
- Convex or Encore — see Full-stack Platforms.