Dualo
Backend Architectures Deep Dive

Full-stack vs API-only vs full-stack JS

Django/Rails (batteries included), Express/FastAPI (minimal), Next.js/Remix (full-stack JS). Each shape optimizes for a different product reality.

1 min read

Full-stack framework (Django, Rails, Laravel, Phoenix): everything in one box — routing, ORM, templates, auth, admin UI, migrations, email, caching. Huge velocity for conventional CRUD apps, but you buy into strong opinions and a large surface area.

Minimal / API-only (Express, Flask, FastAPI, Gin, Axum, Hono): just HTTP routing + middleware. You pick the ORM, auth, template engine, validation layer. More freedom, more assembly. Dominant for JSON APIs serving SPAs or mobile clients.

Full-stack JavaScript (Next.js, Remix, SvelteKit, Nuxt): the newer category. One codebase contains React/Vue/Svelte UI AND server code (API routes, server components, server actions). One deployment, shared types. Optimized for web-first products where UI is the star.

The rule of thumb: full-stack frameworks win for apps that ARE the admin UI + CRUD + auth. API-only wins when several clients (web, iOS, Android, partner integrations) need the same backend. Full-stack JS wins when the product IS a rich web UI and server logic is mostly glue.

A common mistake: picking full-stack JS (Next.js) for a product that also has native mobile apps. You end up building a Next.js app + separate API for mobile — now you have two backends where one would have been enough. API-only + SPA would have served both clients.

Grounded on https://www.djangoproject.com/start/overview/

Next up

Request lifecycle — the shape they all share

Every framework does the same dance: parse → route → middleware → handler → serialize → respond. Learn the shape once, read any framework faster.