Native HTML first
Real buttons, dialogs, selects, and tables. ARIA only when the platform has no equivalent.
Gelium UI
Open-code components, semantic HTML, token themes, and server-first flows for HTML-first applications.
Why Gelium
Real buttons, dialogs, selects, and tables. ARIA only when the platform has no equivalent.
Themes map aesthetics onto --ui-* variables. Markup stays stable when you switch Material or Basecoat.
GET with stable query params, POST + 303, 422 validation, and gelium:toast for transient feedback — no parallel APIs.
npm install gelium-ui
/* CSS */
@import "gelium-ui/dist/gelium.css";
/* Theme on <html> */
<html class="theme-material">
/* First component */
<button class="ui-button">Save changes</button>
/* Rendered output */
Rendered output
/* Optional */
// gelium.js — toast + 422 helperHow it fits
Install gelium-ui for CSS, themes, templates, optional JS helpers, agent guidance, and portable references. The server renders the HTML; progressive enhancement stays optional.
See it live
The WhatsApp manager demo — chat list, search, send, and templates — is a complete server-rendered app built from the same public components and tokens you install.
Screen recipes
Table, filters, create/edit forms, and delete confirm — server-driven end to end.
FAQ
No — the UI package is npm gelium-ui (HTML/CSS/tokens). This documentation site is a Go dogfood app; there is no SPA runtime to install and no service to run for components.
Yes — components are HTML partials and CSS, so any server-rendered stack can use them. HTMX stays optional: the core contract is plain forms, links, and progressive enhancement.
No component JavaScript and no framework runtime for consumers — Gelium ships server contracts instead of props, and the server renders the HTML.
Yes — Material is the default and Basecoat ships in the same bundle. Switch with ?theme=basecoat on any URL or a class on the html element; no rebuild required.
Ready when you are