Daniel Howells

My Stack in 2026

2026-01-12

Every year or so I snapshot what I'm actually using across all my projects. Not what's trendy — what's survived contact with real codebases. Here's January 2026.

The core

Next.js 16 with React 19 and TypeScript 5.9. This hasn't changed in years and probably won't. The App Router is mature now. Server Components are how I think about data fetching. I don't miss the pages directory.

Tailwind v4 is a big upgrade. Config-free, no tailwind.config.js, just CSS with @theme tokens. I maintain a shared shared-styles.css across all projects in a monorepo and point @source at the right directories. It's cleaner than v3 by a wide margin.

Data

Drizzle ORM with Neon PostgreSQL. I tried Prisma for a long time and Drizzle is better in every way that matters to me. Schema-first, push-only migrations in development, type inference that actually works. The DX of writing a schema in TypeScript and having it flow through to tRPC and React Query with zero runtime type errors is hard to overstate.

tRPC 11 for APIs. Combined with TanStack Query on the client, this gives me end-to-end type safety from database schema to UI component. I don't write API types manually anymore. Change a column in Drizzle and TypeScript tells me everywhere that breaks, all the way to the button text.

Auth

Clerk for personal projects. WorkOS for Materia (enterprise SSO requirements). Both are good. I stopped rolling my own auth years ago and the amount of time saved is enormous.

AI

This is where the stack has changed most since last year. OpenRouter for LLM access — I use it for everything because I can switch models without changing code. Gemini 2.5 Flash for most text tasks. Voyage AI for embeddings: voyage-3-large for text, voyage-multimodal-3 for images. fal.ai for image generation, though I've also used GPT-image-1 when I need more control.

Vector search with pgvector in Neon. No separate vector database. Postgres does it all — relational data, full-text search, and vector similarity in one place. For projects that need traditional search, Typesense.

The boring parts

Biome replaced ESLint and Prettier. One tool instead of two, faster, less configuration. I use it with Ultracite for even stricter defaults. Combined with Husky and lint-staged, every commit gets checked automatically.

pnpm for package management. Turborepo for monorepo tasks. Vitest for unit tests, Playwright for E2E. These aren't exciting choices but they're reliable and I never think about them, which is the point.

What I'm watching

Zod 4 just landed and I'm migrating to it. The performance improvements are significant. Convex is interesting — I used it for Scenes & Chapters and the real-time DX is remarkable, though I'm not ready to give up Postgres for most things. And Claude Code keeps getting better as a development environment, which changes how I think about tooling more broadly.