Lightweight User Interface

Build calm, capable interfaces.

A small TypeScript component library for JSX and TemplateResult values — no framework runtime required.

TypeScript-first

Typed props make each component predictable to use and easy to maintain.

JSX-first

Compose views with familiar JSX while keeping output explicit.

Lightweight runtime

Use only the small rendering boundary your interface needs.

No virtual DOM

Components return TemplateResult values without a virtual DOM layer.

Safe output

Template values keep dynamic content escaped by default.

Theme-ready

Semantic tokens carry the interface from light to dark mode.

CSS tokens

Build consistently with a small, adaptable token foundation.

Server-friendly

Render strings at the boundary for servers, tools, and browsers.

Quick start

Start with your first component.

  1. 1
    Clone the repositorygit clone https://github.com/zoxon/lui.git
  2. 2
    Install dependenciespnpm install
  3. 3
    Run docs locallypnpm dev
  4. 4
    Import stylesimport '@zoxon/lui/index.css'
  5. 5
    Render your first component
    import { render } from '@zoxon/mater'
    import { Button } from '@zoxon/lui/components/index.js'
    
    const view = <Button label="Save" />
    const htmlString = render(view)
Read the full documentation