Works in any stack
A Wompo component is still a real custom element, so it can be dropped into existing pages and mixed with other frameworks.
Build reactive custom elements with a React-like API, native browser primitives, SSR, islands hydration, and styles that stay out of the way.
npm i wompoWhat it does
Define a component once, render it as a real custom element, and reuse it in static HTML, Wompo apps, SSR pages, or alongside React, Vue, Angular, and plain JavaScript.
Developer workflow
State, events, children, refs, context, CSS modules, lazy components, portals, and SSR all use a compact API designed for productive front-end work.
import { defineWompo, html, useState } from 'wompo';
function LikeButton({ initial = 0 }) {
const [likes, setLikes] = useState(initial);
return html`
<button @click=${() => setLikes(likes + 1)}>
Likes: ${likes}
</button>
`;
}
defineWompo(LikeButton);<like-button initial="12"></like-button>
<!-- Works as a native custom element. -->Why use it
Wompo keeps the native element model, but gives developers the ergonomics they expect from component libraries.
A Wompo component is still a real custom element, so it can be dropped into existing pages and mixed with other frameworks.
Use familiar hooks such as useState, useEffect, useMemo, and context to keep UI state explicit and local.
Class names can be scoped automatically, so components remain predictable without forcing Shadow DOM by default.
Render the same components on the server, then hydrate only the islands that need client-side behavior.
Install from npm, use an import map, load from a CDN, or ship a single component where it is needed.
The core is written with TypeScript and exposes component, props, element, and render helper types.
From install to production
The docs include quick examples, API references, SSR guidance, hooks, and practical patterns for building with Wompo.