中文中文版本覆盖全站页面;博文与 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.

v1.0.0-alpha.14 · six packages · one versionprerelease line — no stable release yet; all packages share one version

3 browser engines in CI

element: 0 third-party runtime deps

DSD server output

§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.
// Markup paints and reads with no JavaScript.

§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> → markup available/readable upgrade → signals/handlers bound

§3 — Islands

Upgradeselectively.

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

load

First-screen controls: imported and upgraded as early as possible.

nav · search · theme
idleDEFAULT

Non-critical interaction, scheduled after load.

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.
NODEWinterCG server entry, with an optional Nitro mount for Node and Workers deploys.
WORKERSEdge deploys from the same page model. Proof gate per release.

§5 — Begin

Begin.

$npm create @openelement my-app

The versionless install resolves the current 1.0 prerelease from the npm latest dist-tag — verify the exact version with npm view @openelement/create dist-tags.

Facts behind the feeling

Continue the composition.

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