Each page leads with the verdict, shows a compact comparison table, then gives “pick X when” rules. Versions and prices are checked as of 2026-10-01.
JavaScript tooling
- Vite vs Webpack: Vite 8 for new projects; Webpack only for loader-bound apps, or move them to Rspack.
- SWC vs Babel: use the framework’s built-in transform; Babel for the React Compiler and macros.
- Jest vs Vitest: Vitest for web and library projects; Jest for React Native and large existing suites.
- ESLint vs Biome: Biome for one-tool lint and format; ESLint plus Prettier for plugin depth.
- Bun vs Node.js: Node LTS for production compatibility; Bun for an all-in-one toolchain.
- Yarn vs pnpm: pnpm by default; Yarn 4 only for Plug’n’Play or constraints.
- Turborepo vs Nx: Turborepo for task caching; Nx for graph, generators, and distributed CI.
- Monorepo vs Polyrepo: monorepo for code that changes together; polyrepo for separate release cycles.
- Lodash vs Native JS: native first; a utility library only for merge, debounce, and throttle.
Languages
- TypeScript vs JavaScript: TypeScript for shared or long-lived code; JavaScript for scripts and prototypes.
- TypeScript vs Flow: TypeScript for all new work; keep Flow only in existing Flow codebases.
- Python vs TypeScript: Python for data and ML; TypeScript for web products with shared types.
- Rust vs Go: Rust for safety and latency-critical cores; Go for services and tooling.
Frontend
- React vs Vue: React for ecosystem and hiring; Vue for ramp-up and official tooling.
- Next.js vs Astro: Next.js for app-shaped sites; Astro for content-shaped sites.
- SvelteKit vs Next.js: SvelteKit for a compiler-first small stack; Next.js for the React ecosystem.
- Astro vs Hugo: Astro for islands and MDX; Hugo for build speed and one binary.
- htmx vs React: htmx for server-owned state; React for rich client state.
- Server vs Client Components: Server by default;
"use client"only at the interactive leaf. - Tailwind vs CSS Modules: Tailwind for team consistency; CSS Modules for bespoke styling.
- CSS Modules vs styled-components: CSS Modules; styled-components is in maintenance mode.
- Zustand vs Redux: Zustand for most apps; Redux Toolkit for RTK Query or existing Redux.
- Zustand vs Jotai: Zustand for stores; Jotai for atom graphs and derived state.
- TanStack Query vs SWR: TanStack Query for mutations; SWR for small read-mostly apps.
- Zod vs Valibot: Zod for ecosystem; Valibot or Zod Mini for bundle size.
Testing and API tools
- Playwright vs Cypress: Playwright for new cross-browser suites; Cypress for existing suites.
- Cypress vs Puppeteer: Cypress for tests; Puppeteer for scripted automation and PDFs.
- Postman vs Bruno: Bruno for repo-based collections; Postman for shared workspaces and governance.
Data and APIs
- Postgres vs MySQL: Postgres by default; MySQL for existing fleets or Vitess.
- MongoDB vs Postgres: Postgres with JSONB for most; MongoDB for document-native data and native sharding.
- SQLite vs Postgres: SQLite for single-writer apps; Postgres when many processes write.
- DynamoDB vs Postgres: Postgres by default; DynamoDB for known key access at scale on AWS.
- Aurora vs RDS Postgres: RDS for cost; Aurora for fast failover, readers, and serverless.
- Redis vs Memcached: Redis or Valkey for new caches; Memcached for plain key-value caching.
- Pinecone vs pgvector: pgvector beside relational data; Pinecone for managed vector-only search.
- Prisma vs Drizzle: Prisma for schema-first workflow; Drizzle for SQL-shaped TypeScript.
- FastAPI vs Django: FastAPI for typed async APIs; Django for admin, ORM, and auth.
- REST vs GraphQL: REST by default; GraphQL for client-driven aggregation; tRPC inside one TypeScript repo.
- JWT vs Session Cookies: opaque server-side sessions for browsers; JWTs for short-lived service claims.
- OAuth vs JWT: a protocol and a token format; OAuth with PKCE for delegation.
Cloud and infrastructure
- AWS vs Cloudflare: Cloudflare in front; AWS for databases, VPCs, and compliance breadth.
- Cloudflare Workers vs AWS Lambda: Workers for edge request logic; Lambda for heavy or VPC-bound work.
- Vercel vs Cloudflare: Vercel for Next.js workflow; Cloudflare for cost and edge primitives.
- Docker vs Podman: Docker as the default; Podman for rootless, daemonless hosts.
- nginx vs Caddy: Caddy for automatic HTTPS; nginx for modules and tuning.
- Grafana vs Datadog: Datadog for managed simplicity; Grafana for open standards and cost control.
- SST vs CDK: SST for app-centric stacks; CDK for platform and CloudFormation governance.
AI
- Claude vs GPT: models and platforms compared; choose by task, cloud, and eval results.
- Gemini vs Claude: Gemini for multimodal, voice, and cheap Flash tiers; Claude for agents and multi-cloud access.
- OpenAI SDK vs LangChain: provider SDKs for control; LangChain or LangGraph for portability and durable workflows.
- Ollama vs llama.cpp: Ollama for easy local models; llama.cpp for control and embedding.