English | 简体中文
The DSD-first Web Components framework. Build static sites with real Shadow DOM, zero JS overhead, and progressive islands.
deno run -A jsr:@lessjs/create my-app
cd my-app && deno task devLessJS renders Web Components on the server via Declarative Shadow DOM. The browser parses DSD natively — no hydration, no JS for static content. Interactive pieces are islands: small, strategy-gated components that load on demand.
// routes/index/index.tsx
import { DsdElement } from '@lessjs/runtime';
export default class HomePage extends DsdElement {
render() {
return <h1>Hello LessJS</h1>;
}
}The App Shell (<less-layout>) is applied automatically by the Builder — pages only declare their content.
- DSD-first — Server-rendered Shadow DOM. Zero JS overhead for static content.
- JSX + Signals — React-like DX with fine-grained reactivity via
alien-signals. - File-based routing —
app/routes/maps 1:1 to URL paths. - SSG built-in — Build-time rendering, sitemaps, PWA manifest. Deno-native.
- Progressive islands —
client:load | idle | visible | onlyhydration strategies. - Hono API routes — Drop API handlers into the route tree.
- Zero-bundler dev —
deno task dev:fastcold starts in ~100ms. - Framework-agnostic — Lit, React, and Vanilla adapters for islands.
| Section | Link |
|---|---|
| Guide | lessjs.com/guide/getting-started |
| API Reference | lessjs.com/apilist |
| Architecture | lessjs.com/architecture/architecture |
| Package | Version | Description |
|---|---|---|
@lessjs/core |
v0.28.0 | DSD renderer, DsdElement, JSX runtime, islands, navigation |
@lessjs/adapter-vite |
v0.28.0 | Vite plugin: route scanning, SSG pipeline, island entries |
@lessjs/ui |
v0.28.0 | DSD-native UI components (button, card, input, dialog...) |
@lessjs/signals |
v0.28.0 | Signal primitives (signal, computed, effect) |
@lessjs/content |
v0.28.0 | Blog, nav, sitemap build plugins |
@lessjs/i18n |
v0.28.0 | Locales, route expansion |
@lessjs/create |
v0.28.0 | Project scaffold CLI |
@lessjs/runtime |
v0.28.0 | Unified component authoring facade (core + signals + style) |
- Architecture contracts stabilized —
createAdapterRegistry()factory,LessRendererinterface expansion,onRenderErrorhook, try/catch around_renderOrHydrate. - Full Open Props migration — 7 color scales (indigo/green/red/orange/blue/teal/cyan) with dark mode inversions; 0 custom semantic tokens, 0 hardcoded colors in www/.
- CI composite action — reusable workflow exported, 5-step matrix reduced from 14 to 9 jobs.
- Documentation site theme gates — 80+ test cases covering SSR/CSR theme parity, search/sidebar/TOC color isolation.
- Signal-driven registry — registry index rewritten to zero manual DOM via
data-signal+data-signal-attr. - Full changelog →
See CONTRIBUTING.md. Architecture decisions in docs/adr/. Target: v1.0 stable engine freeze.
MIT