Verdicts
Every verdict names a pick, an alternative and when it wins, what to avoid, the traps at the version tested, and who verified it. Nothing here is served past its recheck date without a flag.
Resend 6.26.0. The free tier is 3,000 emails a month capped at 100 a day across 3 domains, the API is one POST, and React Email renders the templates. If deliverability matters more than developer experience, Postmark is the better sender and its free developer plan is only 100 emails a month with no tier between that and the 10,000 plan at 15 dollars.
recommend · verified 2026-09-08 · recheck 2027-01-06Vitest 5.0.0 for functions and components, Playwright 1.63.0 for the flows that make you money. Vitest reuses your Vite config so path aliases and TypeScript work without a second build, and Playwright drives real Chromium, Firefox, and WebKit with traces you can open after a CI failure. Skip a unit test for a server component that only awaits a query and reads props; test the query and the page instead.
recommend · verified 2026-09-08 · recheck 2027-01-06Start with server components and no client cache at all: fetch in the server component, mutate in a server action, and let the framework revalidate. Add TanStack Query 5.102.8 only for the screens that need polling, infinite scroll, optimistic updates, or offline retry, and keep the rest on the server.
recommend · verified 2026-09-08 · recheck 2027-01-06Start with Postgres full-text search. `tsvector` plus a GIN index answers prefix and boolean queries on a few hundred thousand rows with no extra service, and it stays consistent with your data because it is your data. Move to Meilisearch v1.53.2 when you actually need typo tolerance, faceting, and instant-search latency; it is one Rust binary and the defaults are sensible.
recommend · verified 2026-09-08 · recheck 2027-01-06shadcn/ui, CLI 4.21.0. The components are copied into your repo as source, so restyling a button is editing a file rather than fighting a theme API, and there is no runtime dependency to upgrade in lockstep. The cost is real: you now own that code, including its accessibility bugs, and there is no upgrade command beyond re-running `add` and reading the diff.
recommend · verified 2026-09-08 · recheck 2027-01-06Valkey 9.1.2 over Redis. Same protocol, same clients, BSD licensed by the Linux Foundation, and no question about what happens if you ever offer the thing you built as a service. Do the limiting in a Lua script so the read and the write are one round trip, because a GET followed by a SET is a race that lets a burst through.
recommend · verified 2026-09-08 · recheck 2027-01-06Check the country list before you design anything. Stripe is fully launched in 48 countries, India and Indonesia are in beta, and several African markets are served through Paystack rather than Stripe itself. Algeria, Morocco, Egypt, Pakistan, and Vietnam are on none of those lists, so a company incorporated there cannot open a Stripe account at all. Accepting a customer's card is not the problem; getting paid out is.
compare · verified 2026-09-08 · recheck 2027-01-06Paddle Billing if you need payouts outside the Stripe Connect countries (Paddle pays by wire or Payoneer) or the widest tax coverage; the 5% + $0.50 fee is all-in with no international surcharge. Usage pricing is done as flat tiers plus one-time credit products and reported through the subscription charge endpoint.
compare · verified 2026-09-08 · recheck 2027-01-06Drizzle ORM 0.45.2. SQLite is a first-class dialect, migrations are plain SQL files you can read in a pull request, and the driver list covers better-sqlite3, node:sqlite, Bun, and Turso, so the same schema moves from a local file to hosted SQLite. Kysely 0.29.5 is the better pick if you want a query builder and nothing else, with no migration tooling opinions attached.
recommend · verified 2026-09-08 · recheck 2027-01-06Drizzle. The schema is TypeScript you can read, queries look like the SQL they become, the runtime adds about 20 KB with no engine to warm up, and migrations are plain SQL files you can review in a PR.
compare · verified 2026-09-08 · recheck 2027-01-06Cloudflare R2. Egress is free, storage is $0.015 per GB-month, and the free tier is 10 GB plus 1 million Class A and 10 million Class B operations a month, so a photo-heavy side project can run at zero. It speaks the S3 API, so the AWS SDK and presigned uploads work unchanged and you can leave for S3 later.
recommend · verified 2026-09-08 · recheck 2027-01-06@modelcontextprotocol/sdk 1.x with Streamable HTTP in stateless mode (`sessionIdGenerator: undefined`), one McpServer per request. It is the line every client is tested against; v2.0.0 shipped in September 2026 and splits into @modelcontextprotocol/server, /node, /express with different imports, so wait for 2.1 before moving.
recommend · verified 2026-09-08 · recheck 2027-01-06The official SDK's `Client` over Streamable HTTP. On the 1.x line that is @modelcontextprotocol/sdk 1.30.0, the version every server in the wild is tested against. The 2.x line is published as a separate package, @modelcontextprotocol/client 2.0.0, implementing the 2026-07-28 spec; move when your servers do, not before, because the import paths change.
recommend · verified 2026-09-08 · recheck 2027-01-06next-intl 4.14.2. It is built for the App Router specifically, so the locale reaches server components, metadata, and route handlers without a client provider wrapping the tree, and ICU message syntax covers plurals and dates. Lingui 6.6.0 is the alternative worth knowing: macros extract to PO files, the runtime is around 2 kB, and it documents React Server Component support.
recommend · verified 2026-09-08 · recheck 2027-01-06Coolify v4.3.18 if you want a UI: Apache-2.0, 61k stars, and it drives Docker over SSH so the same install manages several servers. Plain Docker Swarm on Docker 29.8.0 if you would rather own the compose file: `docker stack deploy` plus a Caddy or Traefik service is roughly eighty lines and nothing sits between you and the daemon. Dokploy v0.30.5 is the same idea as Coolify on Swarm, with a smaller team behind it.
compare · verified 2026-09-08 · recheck 2027-01-06Next.js 16.3.4 if the app is mostly logged-in screens: server components, the largest hiring pool, and Turbopack on by default for both dev and build. Astro 7.3.1 if most pages are content and only a few islands are interactive, because it ships no JS for the rest. SvelteKit 2.70.3 is the smallest runtime of the three, but v3 is in prerelease and rewrites the adapter API, so custom adapters will need work.
compare · verified 2026-09-08 · recheck 2027-01-06react-hook-form 7.87.0 with zod 4.5.4 through @hookform/resolvers 5.9.1. The same zod schema validates the submitted body on the server, so a field can never be required in one place and optional in the other, and react-hook-form keeps inputs uncontrolled so typing does not re-render the form.
recommend · verified 2026-09-08 · recheck 2027-01-06Bugsink 2.5.1 or GlitchTip. Both take Sentry SDK events, so you change the DSN and nothing else, and both run in a few hundred megabytes: GlitchTip documents 512 MB RAM recommended and 256 MB for the all-in-one setup. Self-hosted Sentry is the same protocol at a different scale, asking for 4 CPU cores, 16 GB RAM plus 16 GB swap, and 20 GB of disk, with no guarantees and no dedicated support.
alternatives · verified 2026-09-08 · recheck 2027-01-06Fumadocs 16.15.8 if the docs live inside an existing Next.js app, because it is Next.js components rather than a separate site and you share the layout, the fonts, and the deploy. Starlight 0.42.0 if the docs are their own site: Astro ships almost no JS, and i18n, search, and the sidebar are configuration. Docusaurus 3.10.2 is the safe institutional choice with the deepest plugin and versioning story.
compare · verified 2026-09-08 · recheck 2027-01-06For plain API reference, Context7 still has the widest index (9,000+ libraries) but scores 16.8% overall on the DevDex benchmark (46.6% docs, 0.8% repos, 2.9% issue-to-fix) and cut its free tier to 1,000 calls a month in January 2026. Firecrawl's developer index (63.1%) and Mintlify's search index (54.6%) cover issues and repos too. Docfork shut down on 2026-06-14; remove it from any config.
alternatives · verified 2026-09-08 · recheck 2027-01-06Postgres 18.6. One process gives you JSONB, full-text search, `LISTEN/NOTIFY`, and a job queue on `SELECT ... FOR UPDATE SKIP LOCKED`, so a solo app can go a long way before it needs a second service. SQLite 3.53.4 in the same container is faster and simpler when exactly one machine writes; the moment you want two app replicas, you are building replication yourself or paying Turso for it.
compare · verified 2026-09-08 · recheck 2027-01-06pg-boss 12.30.0. Jobs live in the same database as your data, so enqueueing is part of the transaction that created the row and cannot disagree with it. It carries schedules, retries with backoff, dead letter queues, and job archiving, and 12.30 added autovacuum monitoring because a busy Postgres that stops vacuuming is the usual way a database-backed queue goes bad.
recommend · verified 2026-09-08 · recheck 2027-01-06Better Auth. You own the users table in your own Postgres, the organization and api-key plugins cover teams and keys without a second vendor, and there is no per-monthly-active-user bill when you grow.
recommend · verified 2026-09-08 · recheck 2027-01-06Umami v3.3.1 if you want to self-host: MIT, one Node process against Postgres 12.14 or newer, and the script is under 2 KB. Plausible Community Edition is AGPLv3 and the calmer product, but it ships as a long term release twice a year and holds funnels, user journeys, ecommerce revenue goals, SSO and the Sites API back for the paid cloud. PostHog gives you far more than page views and says self-hosted deployments are officially unsupported.
alternatives · verified 2026-09-08 · recheck 2027-01-06Use the provider SDK directly when you call one model: @anthropic-ai/sdk 0.124.0 is a thin client over the API, so every feature lands the day it ships and nothing is translated. Reach for the AI SDK 7.0.93 when you need one interface across providers, streaming into React, or structured output with a schema. Both are reasonable; the AI SDK costs you an abstraction that lags each provider's newest options.
compare · verified 2026-09-08 · recheck 2027-01-06