Skip to main content

Gelium UI

Build UI that works without JavaScript.

Open-code components, semantic HTML, token themes, and server-first flows for HTML-first applications.

Why Gelium

Built for server-rendered apps

Native HTML first

Real buttons, dialogs, selects, and tables. ARIA only when the platform has no equivalent.

Tokens, not forks

Themes map aesthetics onto --ui-* variables. Markup stays stable when you switch Material or Basecoat.

Server contracts

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 helper

How it fits

Start with the package. Copy the open code.

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

A real app, running on Gelium

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

Full flows composed from the catalog

Admin Resource

Table, filters, create/edit forms, and delete confirm — server-driven end to end.

Ops Queue

FIFO work queue with advance/dequeue actions and refresh without a SPA.

Public Feed

Social-style feed composition with reactions and progressive enhancement.

FAQ

Frequently asked questions

Is Gelium UI a framework?

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.

Does it work with my existing stack?

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.

How does it differ from a React component library?

No component JavaScript and no framework runtime for consumers — Gelium ships server contracts instead of props, and the server renders the HTML.

Can I switch themes?

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

Ship UI that works without JavaScript