Skip to content
Oxide
Esc
navigateopen⌘Jpreview
On this page

Overview

One plugin, one build - a server bundle, and a client only if you have a page to ship.

Use the bundler you already have. oxidejs turns it into a server, and a client if you have a page. Server actions ride on tacho.

Choosing a stack

Choose oxidejs when you want a deployable tree from Vite or Rsbuild. Stay on a full framework if you need routing, server-rendered pages, or a component model. Use tacho alone if you only need RPC.

  • Choose oxidejs if you want one plugin that builds the server and the client.
  • Choose tacho if you want typed RPC without a bundler plugin.
  • Stay on a framework if you need more than a server entry and actions.

What you get

  • One output tree - a server bundle, plus a client when you have a page.
  • Server actions - write a function on the server and call it from the browser. Types stay in sync. The function never ships to the client. Call useRequest() for the inbound Request, useCtx() for tacho ctx, useEnv() / useFetchCtx() on celld.
  • Two presets - fetch serves static files from Node. celld writes a config for celld, a self-hosted alternative to Cloudflare Workers.
  • Vite and Rsbuild - same plugin, same output.

You can call actions from the browser, or skip the client and ship a server-only worker.

What it does not do

  • No local Worker emulation
  • No automatic celld deploy
  • No Node-builtin polyfills - a stray Node import fails the build

Next steps

Was this page helpful?