Skip to content
Frameworks Article

Primate Owns the Stack Without Owning You

A universal framework that mixes React, Svelte, Go, and Bun under one model. Real idea, early ecosystem.

Ji-ho Choi
Ji-ho Choi
Security & Cloud Editor · Jul 15, 2026 · 7 min read
Primate Owns the Stack Without Owning You

Most JavaScript full-stack work today is assembly. You pick a server, a router, a validator, a session store, a frontend, a bundler, then spend real time making the seams hold. Meta-frameworks fixed the pain by choosing for you. Next.js is a coherent React system. Remix is a coherent React system with different trade-offs. SvelteKit, Nuxt, SolidStart each rebuild roughly the same backend story around a blessed view layer.

Primate rejects that bargain. Its claim is simple: a framework should own routing, rendering, data, validation, sessions, and runtime targets as one system, while still letting you swap frontends, backend languages, and runtimes without rewriting the app. That is a real diagnosis of a real problem. Whether it is production-ready for most teams is a different question.

Composition worked until the seams failed

The creator of Primate grew up in PHP frameworks like Yii and Laravel, where the framework website told you what was officially supported: databases, templates, validation, MVC patterns. You could swap pieces inside one coherent map. JavaScript moved the other way. Composition won. Each library does one thing well. Nobody owns request shapes, validation boundaries, session cookies, serialization, or deploy targets as a single contract.

Meta-frameworks restored cohesion by narrowing the world. Switch from React to Solid and you do not swap a view plugin. You change conventions, routing details, and often backend assumptions. Runtime support is often "compatible enough to run Node code," not a first-class design for Deno or Bun APIs. Frontend, backend language, and runtime get glued together by accident.

Primate's thesis is that those three axes should vary independently, under one application model, with the framework responsible for the seams when you stay inside the official stack.

What the model actually looks like

You configure modules once, then write routes that return data and pages that consume typed props. A minimal multi-frontend setup installs primate plus frontend packages and wires them in config:

// config/app.ts
import react from "@primate/react";
import svelte from "@primate/svelte";
import config from "primate/config";

export default config({
  modules: [react(), svelte()],
});

Routes live as TypeScript handlers. Collocated view files pick the frontend per route: routes/index.ts plus routes/index.tsx for React, routes/svelte.ts plus a Svelte page for Svelte. The same route / response.page (or response.view) API feeds both. Query params, typed page props, and shared routing stay in one model.

Official docs also show backends beyond TypeScript. The same route surface exists in Go, Python, and Ruby examples that return a view with the same payload shape. Runtimes are Node, Deno, and Bun with the same app APIs and native execution paths rather than a Node-compatibility shim. Ecosystem modules cover stores (schema via Pema), sessions, auth, i18n, and databases including PostgreSQL, MySQL, SQLite, MongoDB, and Oracle.

That is the product, not the slogan: one routing and response model, frontends and languages chosen per route, runtimes treated as targets rather than frameworks.

Against Next, Remix, and the meta-framework defaults

Compare the bet to what most teams actually ship.

Next and Remix win on depth of React tooling, hosting defaults, hiring, and battle scars. If your app is React end to end and you want App Router conventions, streaming, and a huge body of production patterns, Primate is not a free upgrade. SvelteKit and Nuxt own their ecosystems the same way. Primate's multi-frontend story is most valuable when you are mid-migration, experimenting with a second view layer, or deliberately avoiding a single blessed UI stack.

The multi-language backend pitch is more aggressive. Writing some routes in Go or Python while keeping React pages is useful when a library or performance profile really lives outside JavaScript. It also multiplies ops surface: build pipelines, type sharing, error semantics, and local tooling across languages. Primate can paper over the request/response boundary. It cannot make polyglot deploys free.

Runtime portability is cleaner. Being able to run the same app with npx primate, deno run -A npm:primate, or bun --bun x primate without rewrite is a concrete advantage if you care about Deno permissions or Bun performance. Mature frameworks increasingly claim multi-runtime support; few design the core APIs that way from the start.

Developer reality check

Adoption path is straightforward for a spike. Scaffold with npx primate init, add the frontend modules you need, put handlers under routes/, and keep stores and validation inside the official modules when possible. The store example is familiar if you have used typed ORMs: declare a table, schema, and call find from a route that returns a view.

Trade-offs you should price in:

  • Community and proof. The GitHub project sits around a few hundred stars with a modest contributor base. That is early for a framework that wants to own data, auth, i18n, and multi-language backends.
  • Depth of each integration. Supporting React, Vue, Svelte, Angular, Solid, Marko, HTMX, and more is a maintenance tax. Expect uneven maturity across official modules.
  • Hiring and continuity. A Next codebase is a known quantity. A Primate app that mixes Svelte pages with Go routes is powerful and harder to staff.
  • Escape hatches. The design says you can leave the official stack when needed. Plan for that. The value of "owned seams" disappears if half your app is custom glue.

Who should care now: teams tired of rewriting backend assumptions every time they change frontends; shops evaluating Deno or Bun without forking the app; greenfield projects that want one coherent map more than the largest ecosystem. Who should wait: anyone whose main constraint is React hiring, Vercel/Netlify defaults, or a large existing App Router codebase.

The right ambition, still unproven at scale

Primate is not "the last great web framework" in any objective sense. That line is marketing with a wink. The useful claim is narrower: cohesion without frontend or runtime lock-in is a legitimate design goal, and the JS ecosystem under-serves it. The architecture on primate.run and the primate-run/primate repo matches that claim with real multi-frontend, multi-runtime, and multi-backend examples rather than vapor.

Treat it as a serious experiment, not a default. Spike a multi-frontend vertical slice, try a non-TypeScript route if that is part of the pitch, and run the same app on two runtimes. If the seams hold and the official modules cover your data and session needs, you have something Next and Remix do not offer. If the seams become your full-time job, stick with a mature meta-framework and accept the lock-in you already know how to manage.

The industry will keep shipping React-shaped full stacks because they work. Primate is a bet that some teams want the map without the straitjacket. That bet is worth watching. It is not yet worth rewriting production for.

Sources & further reading

  1. Primate Is the Last Great Web Framework — superarch.org
  2. GitHub - primate-run/primate: The universal web framework — github.com
  3. Primate — The Universal Web Framework — primate.run
  4. Primate Alternatives - JavaScript MVC Frameworks and Libraries | LibHunt — js.libhunt.com
Ji-ho Choi
Written by
Ji-ho Choi · Security & Cloud Editor

Ji-ho covers the increasingly tangled overlap between cloud architecture and security, drawing on a background as a penetration tester to keep his reporting grounded in real-world attack paths. He never lets a vendor claim go unquestioned and insists that every buzzword come with a proof of concept.

Discussion 2

Join the discussion

Sign in or create an account to comment and vote.

Marco Bianchi @shipfast_marco · 1 week ago

early but the swap-everything-independently angle is interesting. most people won't need it, but the few cases where you do need flexibility... yeah

Zhilakai @zhilakai · 1 week ago

i love how primate is trying to break the mold by letting you mix and match different frontends and backend languages, the idea of using react, svelte, and go all in one project is really intriguing 🤔

Related Reading