中文中文版本覆盖全站页面;博文与 CHANGELOG 归档以英文原文发布。
Open navigation

OpenElement — Web Standards Lab

THE WEB, composed.

The OpenElement dragon — it turns its head to watch your cursor.

A Web Components-native application framework — beautiful, static-first applications composed from real browser primitives.

Versionpublic registry — element v0.43.3 · create v0.43.3 · ui v0.43.3 · router v0.41.0-alpha.6no single stable version is published for all four packages
Graphfour packages
CI engines3 in CI
Framework depszero in element
Server outputDSD first-class

§1 — Element

One durablecontract.

Custom Elements are the application component contract — not a renderer integration, not a leaf-widget format. Write the element once; it renders on the server and upgrades in the browser.

NO FRAMEWORK RUNTIMEJSX + BASIC
import { element, OpenElement, property } from '@openelement/element'

@element('open-counter', { root: 'shadow-open' })
export class OpenCounter extends OpenElement {
  @property({ reflect: true, attribute: 'count', type: Number })
  count = 0

  render() {
    return (
      <button type="button">Count: {this.count}</button>
    )
  }
}

// SSR: <open-counter count="0"> + DSD shadow root.
// No JavaScript required for first paint.

§2 — Declarative Shadow DOM

The server writes HTML.The browser upgrades it.

DSD is a first-class server output — no client re-render, no double payload. The compiled default root is light DOM today; the markup is the application either way.

Server · text/html<open-counter count="0"> <template shadowrootmode="open"> <button>0</button> </template>
Browser · upgrades in place#shadow-root (open)└─ <button> → signal bound first paint = interactive

§3 — Islands

Upgradeselectively.

Interactive regions hydrate on your schedule. Non-interactive regions ship no JavaScript of their own.

load

Critical interactivity, hydrated immediately after parse.

nav · search · theme
idleDEFAULT

Upgrades when the browser is idle — never blocks paint.

counters · forms
visible

IntersectionObserver gates hydration until scroll-in.

comments · charts
only

Client-only, for what the server cannot know.

webgl · media

§4 — Output

Static first.Deployable anywhere.

BROWSERPure static HTML + DSD. CDN-ready, no runtime.
NODENitro server output. Static-first delivery with a generated request-time entry for dynamic routes.
WORKERSEdge deploys from the same page model. Proof gate per release.

§5 — Begin

Begin.

$deno run -A npm:@openelement/create@alpha my-app

The @alpha dist-tag resolves to 1.0.0-alpha.5 — the current baseline. --minimum-dependency-age 0 keeps same-day compatible patches installable despite Deno's default ~24h minimumDependencyAge.

Facts behind the feeling

Continue the composition.

Every number and claim on this page is sourced from the repository’s release and benchmark truth.