One Rust core. Every framework.
Install Β· Features Β· Architecture Β· Adapters Β· CLI Β· Docs Β· Status
Note
A demo GIF lands here on tag day. Until then:
cargo build --release -p oxide-fw-cli && ./target/release/oxide doctor.
Oxide is a full-stack meta-framework with a Rust core. React, Vue, Svelte and Solid are first-class adapters over one shared engine that owns routing, data, caching, bundling, serving and deployment β so anything framework-neutral behaves identically on all four. It compiles to a single static binary and ships to twelve deploy targets.
Prerequisites: Rust stable (edition 2024) and Node β₯ 24.
cargo install oxide-fw-cli # the CLI β one static binary
oxide doctor # env check: node, cargo, config, cache, secrets
pnpm create oxide my-app --framework react --template blog
cd my-app
oxide dev # dev server with HMR
oxide build # production build
oxide start --port 3000 # production serverNote
v0.1.0 is not yet published. Until cargo install oxide-fw-cli resolves on crates.io, build from source β see Building from source. Every command above works the same against ./target/release/oxide.
create-oxide is the separate npm scaffolder (npmjs.com/package/create-oxide).
| One engine, four frameworks | One versioned adapter contract (contract: 1). Real streaming SSR is the default; framework libraries are optional peers. |
| Fast paths skip JS | Redirects, rewrites, headers, auth and rate limits evaluate natively in Rust. oxide.config.ts is statically extracted β the config path never runs JavaScript. |
| One wire format | ODF is a devalue-compatible binary format encoded in Rust, decoded by a zero-dependency TS module. Date, Map, Set, BigInt survive a cache round trip. |
| Three-tier cache | L0 in-process, L1 data cache, L2 pluggable remote (Redis, S3, HTTP). Tags, stale-while-revalidate, single-flight, MAC-sealed remote payloads. |
| One static binary | hyper 1.x + rustls: HTTP/1.1, HTTP/2, HTTP/3 over QUIC. Precompressed static serving (zstd β brotli β gzip), range requests, zero-downtime reload via SO_REUSEPORT. |
| Twelve deploy targets | Binary, Node, Static, Docker, Cloudflare (Workers + Pages), Lambda, Vercel (+ Functions), Netlify, Deno, Bun β behind a capability matrix that refuses at build time what the target cannot honour. |
request β hyper β limits β static β native rules β route match
β L0 cache β middleware β loaders β dispatch β streaming SSR
Cached, redirected, rewritten and static answers never enter a JavaScript runtime. Four traits sit between the pipeline and every external engine:
| Trait | Purpose |
|---|---|
PageRenderer |
page module + data β HTML, buffered or streamed |
LoaderRunner |
run page.server.ts loaders in the layout chain |
MiddlewareDispatcher |
outerβinner; short-circuit, rewrite, or contribute locals |
ActionDispatcher |
form POST routed to a named action |
Eighteen Rust crates: server (hyper, static, compression, TLS), render (streaming SSR, HTML injection), router (tree, matcher, typegen), cache (three tiers), odf (wire format), compiler (Oxc passes), bundler (rolldown), jshost (V8 + Node), graph (incremental), plugin (Wasm), adapters (deploy), cli, plus assets, config, dev, diagnostics, schema, core-wasm.
| Adapter | Package | Extensions | Peer deps |
|---|---|---|---|
| React | @oxide-fw/react |
.tsx |
react@^19, react-dom@^19 |
| Vue | @oxide-fw/vue |
.vue |
vue@^3.6, @vue/server-renderer@^3.6 |
| Svelte | @oxide-fw/svelte |
.svelte |
svelte@^5 |
| Solid | @oxide-fw/solid |
.tsx |
solid-js@^2, @solidjs/web@^2 |
The loader is framework-neutral. It lives in page.server.ts and returns a plain object; only the component dialect differs:
// src/routes/blog/[slug]/page.server.ts β same for all four adapters
export async function load({ params }) {
return { post: await getPost(params.slug) }
}// src/routes/blog/[slug]/page.tsx β React
export default function Post({ data }) {
return <article><h1>{data.post.title}</h1></article>
}See examples/smoke-app-{react,vue,svelte,solid} for the four-way comparison.
One binary. Grouped by intent:
- Dev loop β
oxide devoxide buildoxide startoxide preview - Inspect β
oxide routesoxide analyzeoxide whyoxide doctoroxide checkoxide configoxide render - Author β
oxide generateoxide addoxide migrateoxide schema - Operate β
oxide secretsoxide cacheoxide auditoxide testoxide mcp
oxide doctor # 7 env checks: node, cargo, config, routes, cache, secrets, cookie keys
oxide build # bundles, prerender, typegen, manifests, deploy artifacts
oxide routes # scan routes, infer render modes, emit typegen, print table
oxide mcp # expose routes, config, audit, graph as MCP tools for agents
git clone https://github.com/elcoosp/oxide
cd oxide
cargo build --release -p oxide-fw-cli
./target/release/oxide doctorFour end-to-end fixtures ship under examples/:
oxide build --root examples/smoke-app-react
oxide start --root examples/smoke-app-react --port 3100Pre-alpha. Built against a published specification and audited against it.
| Spec compliance | 95 / 100 on a 21-section scorecard β every finding public |
| CI | 22 jobs on Linux, macOS, Windows β 21 per push, plus nightly Miri |
| Rust | 1,239 test functions; clippy-clean at -D warnings with zero #[allow(clippy::*)] |
| Security | cargo audit exits 0; one advisory suppressed with a reachability analysis |
v0.1.0 is not yet tagged. Releases follow a 48-hour / 5-consecutive-green-CI soak rule β see PUBLISHING.md.
docs/spec-v0.1.mdβ the specification this release implementsdocs/spec-v0.2-draft.mdβ the working draft for the next releasedocs/architecture.mdβ how the crates fit togetherdocs/deviations.mdβ every known gap between spec and codedocs/plugin-compat.mdβ plugin API surface and Vite/Rollup compatibilitybenchmarks/report.mdβ the perf table with the deterministic-vs-informational split
Read CONTRIBUTING.md β workflow, local gate list (identical to CI), pnpm config model, soak rule.
MIT OR Apache-2.0 β see LICENSE.