JORVEL
v0.2.0 — public beta

The micro-frontend framework production teams reach for.

JORVEL gives you Next.js-level DX on top of Rspack Module Federation. Zero-config workspaces, typed federation contracts, file-based routing, SSR and static export, edge adapters, and a CLI that just works.
✔ Workspace ready: ./my-app
↪ apps/, libs/, .github/, jorvel.config.ts
↪ Initialized git repository (main).
$ cd my-app && pnpm dev:proxy
18 packages, MIT-licensed Linux · macOS · Windows · Node 20+ CI: 95%+ unit coverage
apps/shell/src/main.tsx
tsx
// apps/shell/src/main.tsx
import { createRouter, RemoteOutlet } from '@jorvel/runtime';
import { remotes } from './jorvel.routes.host';

const router = createRouter({
  remotes,
  guards: [requireAuth],
});

export default function App() {
  return <RemoteOutlet router={router} />;
}

Instant dev server

One command. Host + remotes. Same origin.

Secure by default

CSP, SRI, allowlist. Edge-runtime safe.

Built on the modern web stack

RspackReact 19TypeScriptVitestPlaywrightCloudflareVercelWeb VitalsOpenTelemetrySentrypnpmChangesets
RspackReact 19TypeScriptVitestPlaywrightCloudflareVercelWeb VitalsOpenTelemetrySentrypnpmChangesets
RspackReact 19TypeScriptVitestPlaywrightCloudflareVercelWeb VitalsOpenTelemetrySentrypnpmChangesets
RspackReact 19TypeScriptVitestPlaywrightCloudflareVercelWeb VitalsOpenTelemetrySentrypnpmChangesets
Why JORVEL

Everything a production MFE stack needs

Drop the YAML graveyard. JORVEL gives you the small, opinionated runtime that's already shipped to thousands of users — without locking you out of the bundler.

File-based routing
Drop a file in src/pages — it becomes a route. Dynamic params, catch-alls, and (group) folders supported.
Zero-config federation
Auto-detects exposes, shared deps, and remote URLs from jorvel.app.json. No webpack wrestling.
Typed federation contracts
InferExposed / InferEmits / InferListens turn federation boundaries into compile-time types.
SSR + streaming + SSG
renderRouteToString, renderRouteToStream, and a worker-pool staticExport with content-hash manifests.
Security-first
Strict-dynamic CSP builder, SRI for remoteEntry, origin allowlist, base64url-validated nonces.
Observability hooks
onError / onMetric / onRemoteLoad. Web Vitals + Sentry adapter. Render-time crashes captured.
CSS isolation
ShadowRemote mounts third-party remotes inside a Shadow DOM so styles never leak into the shell.
Deploy anywhere
Adapters for Vercel Edge, Cloudflare Workers/Pages, Node.js, and Docker. One jorvel deploy.
Plugin model
configResolved / federationConfig / devPlan hooks let you customize the build without forking.
UI frameworks

Bring any framework. Federate anything.

Module Federation is a bundler concept — JORVEL is framework-agnostic at the seam. Use React in the host and Vue in a remote, or ship plain Web Components.

  • React 18 / 19

    First-class. Hooks, Suspense, Server Components, transitions.

  • Vue 3

    Mount Vue remotes via the runtime; share state through @jorvel/event-bus.

  • Web Components

    Drop any custom-element remote — Shadow DOM isolation built in.

  • Solid / Svelte

    Federation works at the bundler level, agnostic to UI library.

Federation guide
Deploy targets

One CLI. Every runtime.

jorvel deploy dynamically loads the right adapter package — Vercel Edge, Cloudflare, or Node — and scaffolds a working config in seconds.

  • Vercel

    Edge Functions + immutable static asset cache.

  • Cloudflare

    Workers + Pages Functions, ReadableStream responses.

  • Node.js / Docker

    Slow-loris hardened HTTP server, structured logs, MIME table.

  • Self-host

    Static export with parallel renders + content hashes.

Deployment guide
Developer experience

APIs you already know.

File-based routes, typed config, hooks for data and params. Nothing new to learn — just the federation primitives you wished React Router shipped with.

jorvel.config.json
json
{
  "$schema": "./node_modules/@jorvel/types/schemas/jorvel.config.json",
  "name": "shop",
  "appsDir": "apps",
  "features": { "tailwind": true },
  "federation": {
    "shared": ["react", "react-dom", "@jorvel/event-bus"],
    "allowlist": ["*.acme.dev", "**.cdn.cloudflare.net"],
    "sri": true
  }
}
apps/dashboard/src/pages/users/[id].tsx
tsx
// apps/dashboard/src/pages/users/[id].tsx
import { useParams } from '@jorvel/runtime';
import { useRemoteData } from '@jorvel/runtime';

export default function UserPage() {
  const { id } = useParams<{ id: string }>();
  const { data, error } = useRemoteData(['user', id], () =>
    fetch(`/api/users/${id}`).then((r) => r.json()),
  );

  if (error) throw error;
  if (!data) return <Skeleton />;
  return <UserCard user={data} />;
}
Modular by design

12+ packages. Use what you need.

Every package ships independently with proper exports, sideEffects: false, and changeset versioning. Pull in only the runtime you actually deploy.

jorvel

Project scaffolding, dev orchestration, deploy.

@jorvel/runtime

Router, remote loader, hooks, telemetry, guards.

@jorvel/ssr

Render to string/stream, static export, edge adapter.

@jorvel/security

CSP, SRI, allowlist, safe JSON hydration.

@jorvel/observability

onError / onMetric / onRemoteLoad + Web Vitals.

@jorvel/state

Singleton store registry + React adapter + persistence.

@jorvel/event-bus

Typed pub/sub. onAny + replay + per-bus errors.

@jorvel/types

Federation contracts. JSON schemas for config files.

@jorvel/ui

Headless primitives — Button, ThemeProvider.

@jorvel/adapter-vercel

Vercel Edge functions + immutable assets.

@jorvel/adapter-cloudflare

Cloudflare Workers + Pages Functions.

@jorvel/adapter-node

Hardened Node HTTP server + Docker template.

Loved by teams

Quietly running production in a few teams already.

  • We had a Rspack + Module Federation monorepo we were terrified to touch. Migrated to JORVEL in a weekend; the CLI did 90% of the wiring.
    Brandon CranstonCo-founder / CTO, fictional
  • Typed federation contracts caught two breakage classes the day we adopted them. The SSR streaming + ETag-before-render combo cut p95 by 40%.
    Alice XavierStaff engineer, fictional
  • The CSP/SRI plumbing alone saved us a quarter of platform work. It's the first MFE framework that doesn't feel like a side project.
    James ClearDevOps engineer, fictional

Ship your first federated app in under an hour.

Scaffold a workspace, generate a host + remote, and deploy to the edge. No YAML required.