Skip to content

react-ui-os

A real desktop OS,
in one React component.

macOS, Windows, and Ubuntu, cloned down to the chrome. Fill it with your apps and ship it to the browser.

Full-screen ↗

This is the library running live, not a video. Drag a window, press Cmd-K, switch the OS.

Highlights

Have a look around.

Everything below is rendered by the library. The desktop above is the same code, running live.

A macOS-style desktop with two windows snapped side by side over the dock and menu bar
A window manager, for real. Drag at 60 fps, resize from any edge, snap to halves and quarters, minimize with the genie. Window state lives in React; your routes can watch it.
The Spotlight palette listing apps and system windows
Spotlight, on Cmd-K. Apps, system windows, settings, and any source you register, searchable from one palette. The Windows theme presents it as Start, Ubuntu as the app grid.
The Settings window with wallpaper, accent, and window radius controls
Settings, on Cmd-,. A theme declares which tokens end users may tweak; the panel renders itself and preferences persist through the storage adapter. No code on your side.
A notification toast stack in the top-right corner of the desktop
One notify() call, four surfaces. A toast stack, per-app dock badges, a menu-bar dot, and the Notification Center, wired from a single imperative call in core.

The contract

You register apps. The library composes the system.

An app is one object. Register it and it appears in the dock, the menu bar, Spotlight, and the keyboard shortcuts at once, with nothing else to wire.

import { Desktop } from "@react-ui-os/desktop";
import { macosTheme } from "@react-ui-os/theme-macos";
const apps = [{ id: "notes", name: "Notes", content: () => <h1>Hello, desktop.</h1> }];
<Desktop apps={apps} theme={macosTheme} />;

Five minutes to a desktop →

Themes

Each one is its platform, not a coat of paint.

The same apps and window manager run under every theme. Motion timings, corner radii, and chrome dimensions come from the real platforms, cited in the code, not tuned by feel.

The macOS theme: a window with traffic-light controls and a floating dock over the Tahoe wallpaper
macOS. Traffic lights, the floating dock with the fisheye, a translucent menu bar, Tahoe's Liquid Glass. Open full-screen ↗
The Windows theme: caption-button windows and a bottom taskbar with a Start launcher and a clock
Windows. Caption buttons, the flush taskbar, the Start menu, Fluent motion. No fisheye, because Windows has none. Open full-screen ↗
The Ubuntu theme: a top bar with a centered clock, a left dock, and the Quick Settings popover
Ubuntu. Yaru, a left dock flush to the edge, the centered clock, round symbolic window controls, Quick Settings. Open full-screen ↗

Make it yours

The clones are reference themes, not the ceiling.

A theme is one plain-data object: palette, shape, motion, blur, wallpaper, chrome. Put the dock on the left, drop the menu bar, round the windows, pick your accent. Start from a shipped theme and change what you disagree with, or click one together on a live desktop and copy the file out.

Open the theme editor Writing a theme →

App Store

Install an app, own the files.

Apps are not bundled into the library. The CLI copies an app's source into your codebase, so you can edit everything after install. Notes, Calculator, Clock, Calendar, Reminders, Sketch, and Terminal are in the registry today; host your own registry to publish more.

Terminal window
npx @react-ui-os/cli add notes

Browse the App Store Publish your own →

Also in the box

The rest of an OS.

A desktop is more than windows. These ship wired together and reachable from the same App registry.

Ready when you are.

One install, one tag, a working desktop.

npm install @react-ui-os/desktop @react-ui-os/theme-macos