The foundation layer
A minimal, unopinionated component library. CSS-first, framework-agnostic, progressively enhanced. The building blocks for your design system.
Three layers, each building on the last. Use what you need.
The component library. 50+ CSS-first components that work anywhere. No opinions, no branding, just functional building blocks.
The design system layer. Brand tokens, themed components, design guidelines. Your company's visual identity, built on OmniUI.
Coming SoonThe application shell. Layouts, navigation patterns, responsive scaffolding. The structure for your web applications.
OmniUI is in active development. npm package coming soon. For now, clone the repo or grab the CSS directly.
Clone and build:
git clone https://github.com/TarkinLarson/OmniUI.git
cd OmniUI && npm install && npm run build
Then include the CSS and start using components:
<link rel="stylesheet" href="dist/omniui.css">
<button class="omni-button" data-variant="primary">Click me</button>
<div class="omni-card">
<h3>Card Title</h3>
<p>Works without JavaScript.</p>
</div>
Core components work without JavaScript. Use them in emails, static sites, server-rendered pages. Progressive enhancement when you need interactivity.
React, Vue, Svelte, vanilla JS, or plain HTML. Data attributes for variants, not framework-specific props. Use it anywhere.
No brand colors, no design opinions. Semantic tokens you can override. A foundation to build your design system on, not someone else's.
ARIA patterns, keyboard navigation, reduced motion support. Accessibility isn't an add-on, it's built into every component.
50+ components across three tiers:
Zero JavaScript required. Works everywhere.
CSS components with optional JavaScript enhancements.
JavaScript-powered components for complex interactions.
Clean, consistent, framework-agnostic:
<!-- Variants -->
<button class="omni-button" data-variant="primary">Primary</button>
<button class="omni-button" data-variant="danger">Danger</button>
<!-- Sizes -->
<button class="omni-button" data-size="sm">Small</button>
<button class="omni-button" data-size="lg">Large</button>
<!-- Styles -->
<button class="omni-button" data-variant="primary" data-variant-style="outline">
Outline
</button>
Built-in light, dark, and high-contrast modes:
<html> <!-- Light (default) -->
<html data-color-mode="dark"> <!-- Dark mode -->
<html data-color-mode="high-contrast"> <!-- High contrast -->
30 semantic color tokens. Override what you need, keep the rest.