A Vite-based React framework with native multi-app support — one repo, several independently-deployed apps sharing a core.
3
stars
25
commits
TypeScript
primary language
Sep 13, 2026
updated
A Vite-based React framework built around one idea : a project is more than one app.
Devora.js lets you define several apps in one repo — a marketing site, a product app, an admin panel — that share a core and a backend, but build and deploy independently. Each app gets its own render mode, its own auth mode, and its own deploy target, without duplicating the plumbing between them.
Most React frameworks assume one app per project. The moment a real product needs a marketing site, a product app, and an admin panel — a pretty normal shape — you're either cramming them into one app with route groups, or maintaining separate repos that share nothing. Devora.js treats "one repo, several independently-deployed apps sharing a core" as the default, not a workaround bolted on later.
The other design choice: no implicit caching. Every render mode (ssr/ssg/csr/isr) is an
explicit, route-level opt-in — no hidden revalidation windows to reverse-engineer, no undocumented
build format standing between you and a plain reverse proxy if you ever need one.
The same shared header/theme (<PageShell>) across all three apps — one design, not three ad
hoc ones.
Marketing (auth: "none" — no login anywhere on this app)

Dashboard (auth: "shared" — an island counter and a clientOnly() widget)

Admin (auth: "isolated" — its own session cookie, separate from the other two)

git clone https://github.com/hassanalsa3aka/devora.js.git
cd devora.js
pnpm install
pnpm exec devora dev --app=dashboard
Or start a brand-new standalone project, outside this repo:
npm create devora@latest
npm and Yarn work too, not just pnpm — see VERIFICATION.md for what's actually been tested
under each.
devora.config.ts declares each app; devora build/devora deploy
handle each one independently.streaming is planned, see below.)island(() => import("./Widget")) hydrates just that component; the rest of the
page stays static HTML.shared, isolated, or none (skip
the whole cookie/session carrier for apps that don't need login, like a marketing site).sitemap.xml, opt-in per app.routes/users/[id].tsx matches /users/123, with the value available as
ctx.params.id. A static route at the same depth always wins over a dynamic one.DEPLOYING.md.Stated plainly, not buried:
ssg/isr yet. ssr and csr both work on a [id].tsx
route; pre-rendering one at build time needs a static-params API this doesn't have yet, and
fails the build with a clear error rather than silently mis-building.renderMode: "streaming" is typed but not implemented — it needs a
Suspense-boundary-based rewrite of how islands hydrate, planned for v2.isr is weaker on Vercel/Netlify than on a self-hosted adapter-node server. A serverless
function's filesystem isn't guaranteed to persist between requests, so ongoing background
regeneration there hasn't been verified (the initial build's output still serves correctly).packages/backend/DATABASE.md for a verified pattern that avoids a real crash this framework's
own dev server can otherwise cause.Automated tests exist for @devorajs/core (sessions, CSRF, security headers, config, ISR
caching, route rendering) and one CLI build-time check. Everything else — the adapters, most CLI
commands, Docker, the proxy generator — has been manually verified during development but isn't
covered by a repeatable test yet. Full breakdown, including exactly what "manually verified"
means here, is in VERIFICATION.md. If something's broken, that gap is the most likely place —
please open an issue.
@devorajs/core — SSR request handling,
sessions/CSRF, security headers, islands, config loading.@devorajs/cli — the devora command.@devorajs/adapter-vercel@devorajs/adapter-netlifycreate-devora — scaffolds a new standalone
project (npm create devora@latest).Devora.js is early — pre-1.0, built by one person so far, actively developed. The core framework works and is live in production on the demos above, but it hasn't been used outside this repo yet. If you try it, I'd genuinely like to hear what breaks or what's missing — issues and PRs welcome.
MIT
25 commits
TypeScript
95.5%
JavaScript
3.3%
Dockerfile
1.2%
A Vite-based React framework with native multi-app support — one repo, several independently-deployed apps sharing a core.
3
stars
25
commits
TypeScript
primary language
Sep 13, 2026
updated
A Vite-based React framework built around one idea : a project is more than one app.
Devora.js lets you define several apps in one repo — a marketing site, a product app, an admin panel — that share a core and a backend, but build and deploy independently. Each app gets its own render mode, its own auth mode, and its own deploy target, without duplicating the plumbing between them.
Most React frameworks assume one app per project. The moment a real product needs a marketing site, a product app, and an admin panel — a pretty normal shape — you're either cramming them into one app with route groups, or maintaining separate repos that share nothing. Devora.js treats "one repo, several independently-deployed apps sharing a core" as the default, not a workaround bolted on later.
The other design choice: no implicit caching. Every render mode (ssr/ssg/csr/isr) is an
explicit, route-level opt-in — no hidden revalidation windows to reverse-engineer, no undocumented
build format standing between you and a plain reverse proxy if you ever need one.
The same shared header/theme (<PageShell>) across all three apps — one design, not three ad
hoc ones.
Marketing (auth: "none" — no login anywhere on this app)

Dashboard (auth: "shared" — an island counter and a clientOnly() widget)

Admin (auth: "isolated" — its own session cookie, separate from the other two)

git clone https://github.com/hassanalsa3aka/devora.js.git
cd devora.js
pnpm install
pnpm exec devora dev --app=dashboard
Or start a brand-new standalone project, outside this repo:
npm create devora@latest
npm and Yarn work too, not just pnpm — see VERIFICATION.md for what's actually been tested
under each.
devora.config.ts declares each app; devora build/devora deploy
handle each one independently.streaming is planned, see below.)island(() => import("./Widget")) hydrates just that component; the rest of the
page stays static HTML.shared, isolated, or none (skip
the whole cookie/session carrier for apps that don't need login, like a marketing site).sitemap.xml, opt-in per app.routes/users/[id].tsx matches /users/123, with the value available as
ctx.params.id. A static route at the same depth always wins over a dynamic one.DEPLOYING.md.Stated plainly, not buried:
ssg/isr yet. ssr and csr both work on a [id].tsx
route; pre-rendering one at build time needs a static-params API this doesn't have yet, and
fails the build with a clear error rather than silently mis-building.renderMode: "streaming" is typed but not implemented — it needs a
Suspense-boundary-based rewrite of how islands hydrate, planned for v2.isr is weaker on Vercel/Netlify than on a self-hosted adapter-node server. A serverless
function's filesystem isn't guaranteed to persist between requests, so ongoing background
regeneration there hasn't been verified (the initial build's output still serves correctly).packages/backend/DATABASE.md for a verified pattern that avoids a real crash this framework's
own dev server can otherwise cause.Automated tests exist for @devorajs/core (sessions, CSRF, security headers, config, ISR
caching, route rendering) and one CLI build-time check. Everything else — the adapters, most CLI
commands, Docker, the proxy generator — has been manually verified during development but isn't
covered by a repeatable test yet. Full breakdown, including exactly what "manually verified"
means here, is in VERIFICATION.md. If something's broken, that gap is the most likely place —
please open an issue.
@devorajs/core — SSR request handling,
sessions/CSRF, security headers, islands, config loading.@devorajs/cli — the devora command.@devorajs/adapter-vercel@devorajs/adapter-netlifycreate-devora — scaffolds a new standalone
project (npm create devora@latest).Devora.js is early — pre-1.0, built by one person so far, actively developed. The core framework works and is live in production on the demos above, but it hasn't been used outside this repo yet. If you try it, I'd genuinely like to hear what breaks or what's missing — issues and PRs welcome.
MIT
25 commits
TypeScript
95.5%
JavaScript
3.3%
Dockerfile
1.2%