Skip to content
About Syne UI

The story behind
Syne UI

A frontend framework born from a simple question: why can't one component library serve both the web and the desktop?

Our mission

Modern applications often need to run in two worlds: the browser for accessibility and reach, and the desktop for performance and native OS integration. Maintaining two separate codebases for the same product is expensive, error-prone, and slow.

Syne UI exists to eliminate that split. Every component ships with two entry points — a index for React DOM (web) and a synegui for NodeGui (desktop) — so your team writes the logic once and deploys to both targets.

The stack

React 18

Component model

The declarative UI engine for web targets. Concurrent features, hooks, and the full React ecosystem.

Tailwind CSS

Styling (web)

Utility-first CSS with a scoped tw- prefix. No stylesheet conflicts, no global side effects.

NodeGui

Desktop runtime

A Qt-based native desktop runtime for Node.js. Real OS widgets, real performance, no Chromium overhead.

TypeScript

Type safety

Every prop, variant, and event is typed. Catch mismatches at compile time across both targets.

Vite

Build tooling

Sub-second HMR for development, tree-shaken ESM bundles for production.

Bun

Runtime and package management

A workspace monorepo where every component is an independent package — import only what ships.

Design philosophy

Platform-aware, not platform-agnostic

Syne UI doesn't pretend both targets are the same. The web entry uses React DOM semantics; the desktop entry uses NodeGui's imperative widget API. We meet each platform on its own terms.

Per-package isolation

Each component lives in its own Bun workspace package with its own version, build, and test cycle. You can adopt a single component without pulling in the whole library.

Zero surprise defaults

Styles are scoped, props are explicit, and nothing reaches into global state. Syne UI should be easy to drop into an existing project without breaking anything.

Developer experience first

Live previews, generated code snippets, a props explorer, and a component search are built into the docs so you spend less time reading and more time building.

Want to explore the components?