Universal UI Framework, Rust-Compiled

Hozo — Write React Native.Ship Semantic Web & Native UI.

React Native and Hozo's own components compile to semantic HTML and CSS on the Web, and to native primitives on iOS and Android.

Native semantics on every platform. First-class accessibility. Diagnostics and guardrails for humans and AI alike.

Install Hozo
pnpm add @hozo/corepnpm add -D @hozo/vite @hozo/compiler
Set it up for Vite, Next.js, Astro, Metro & more →
Side-by-Side Lowering

One Source, Two True Primitives

From a single universal component, Hozo lowers directly to genuine Semantic HTML and CSS on the Web, and native React Native primitives and StyleSheet on Mobile.

Universal Source: NotificationCard.tsx
React Native / @hozo/core
Universal Source: NotificationCard.tsx
import { View, Heading, Paragraph, Button } from '@hozo/core'export function NotificationCard({ title, message, onDismiss }) {  return (    <View role="alert" className="p-6 rounded-2xl bg-yakisugi-800 border border-hinoki/20">      <Heading level={2} className="text-xl font-bold text-shikkui mb-2">{title}</Heading>      <Paragraph className="text-stone-400 text-sm mb-4">{message}</Paragraph>      <Button onPress={onDismiss} className="bg-bengara px-4 py-2 rounded-lg text-shikkui font-medium">        Dismiss      </Button>    </View>  )}
Web Lowering (DOM + CSS + W3C ARIA)
No RNW Wrapper
Web Lowering (DOM + CSS + W3C ARIA)
// Compiled JSX; CSS and imports are emitted separately.<div className="hozo-view hozo-0" role="alert">  <h2 className="hozo-1">{title}</h2>  <p className="hozo-2">{message}</p>  <button    className="hozo-3"    type="button"    onClick={onDismiss}    data-hozo-pressable=""  >    Dismiss  </button></div>
Native Lowering (Fabric / StyleSheet)
React Native / Fabric
Native Lowering (Fabric / StyleSheet)
// Compiled JSX; StyleSheet and imports are emitted separately.<View style={hozoStyles.hozo0} role="alert">  <Text style={hozoStyles.hozo1} accessibilityRole="header">{title}</Text>  <Text style={hozoStyles.hozo2}>{message}</Text>  <Pressable    style={hozoStyles.hozo3}    accessibilityRole="button"    onPress={onDismiss}  >    <Text style={hozoStyles.hozo3_text}>Dismiss</Text>  </Pressable></View>
Why Hozo

Keep the source. Lose the runtime.

React Native on the Web usually means React Native for Web: a runtime that turns components and styles into DOM in the browser, on every render. Hozo does that work at build time wherever the source says enough, and leaves a runtime only where it does not.

01

Existing Source First

Write standard components imported from react-native or @hozo/core. No proprietary DSL, no framework rewrites. Adopt it file by file, and run the migration audit first to see what changes before anything does.

React Native imports
import { View, Text } from 'react-native'
Add it to your bundler →
02

First-Class Accessibility

ARIA is not an afterthought or runtime patch. Hozo checks roles and their required attributes against the WAI-ARIA data in aria-query on every build, and names the file and line of each problem it finds.

Build-time ARIA checks + semantic elements from semantic primitives
How accessibility is checked →
03

Zero-Runtime Static Paths

Class names the build can read compile to CSS classes on the Web and precomputed StyleSheets on Native, with no style work left at runtime. A conditional class compiles each branch, so only the condition is left to run.

Static (0 JS) → Structural (Boolean fold) → Dynamic fallback
How styles compile →
@hozo/ui

Components to Start From

A styled component library written in the same primitives as your code, shipped as source and compiled with it, for the Web and Native.

Weekly report

Where the report goes.

This panel is plain HTML and CSS, rendered by Hozo at build time. Each component has a page in the docs with a live preview to press and type into, and the source beside it.

All components and how to install them
Showcase

Try Hozo

Explore the components, SVG effects and 3D scenes in the browser or the native showcase.

Web

Open the component catalogue. No install needed.

Open Web Storybook

Android

Standalone APK for an Android phone. No Metro server or Expo Go needed.

Download Android APK

iOS Simulator

For a Mac with Xcode. Simulator app only—not an iPhone app or TestFlight build.

Download Simulator app
@hozo/three · WebGL

Interactive 3D, from the same React

Kumimono — a Japanese roof-bracket set, 56 parts

A 3D study of Japanese timber roof brackets. Use the button or assembly slider to separate and rejoin its 56 parts.

Kumimono · 3D assembly study

100%