JSX gives you components with props, composition, and type checking. But server rendering with JSX usually means running Node.js on the server.
BarefootJS compiles JSX at build time into your backend's native template format. Go renders .tmpl with html/template; Perl renders .html.ep with Mojolicious; Hono renders the generated .tsx. For non-Node backends, no Node.js runs at serving time. The compiler produces a backend-agnostic IR, then an adapter converts it:
JSX → IR (backend-agnostic) → Adapter → Template| Language | Adapter | Notes |
|---|---|---|
| TypeScript | HonoAdapter | Hono / JSX-based TS servers |
| TypeScript | TestAdapter | IR-based component testing |
| Go | GoTemplateAdapter | html/template |
| Perl | MojoliciousAdapter | Mojolicious EP templates |
#Planned
| Language | Adapter |
|---|---|
| Rust | (TBD) |
| Python | Jinja2Adapter |
| Ruby | ERBAdapter |
The IR contract is stable. You can write a custom adapter for any backend.