One pot.
Whole app.
Xoong is a small web framework that cooks with what the browser already gives you. Declare a screen, point it at your OpenAPI document, write plain CSS. That is the whole job.
- 0 runtime deps
- 0 shadow DOM
- 0 inline scripts
<xo-view get="listPeople">
<xo-table columns="name,email,role"
sortable></xo-table>
</xo-view>
<!-- loading, errors, cache and types
come from your OpenAPI document -->Few things, chosen well.
Mainstream frameworks make you chase them. Xoong keeps its surface tiny and lets the platform do the heavy lifting.
- 01
Standards first
Custom elements, the DOM, ES modules, the History API, native
<dialog>andIntl. No virtual DOM, no JSX, no hooks. - 02
Light DOM only
Your CSS and your tests see the real DOM. No Shadow DOM and no scoped-style magic between you and the page.
- 03
OpenAPI is the contract
xoong syncreads your spec and writes typed operations. Forms and tables are drawn from the schemas. - 04
Zero runtime deps
Upgrading Node never breaks the runtime, because the runtime runs in the browser and brings nothing along.
- 05
Strict CSP ready
xoong buildoutputs static files that run underscript-src 'self'. No inline code, ever. - 06
Made for AI and people
One way to do each thing, a short
llms.txt, an MCP server, andxoong checkwith messages that contain the fix.
This table is the real thing.
Sort a column, search, tick rows and delete them. There is no server: a function in the page plays the API, and everything else is xoong.
<xo-view get="listPeople">
<xo-table columns="name,email:E-mail,role" sortable filters="name:Search by name" selectable page-size="5" empty="Nobody here">
<span slot="role" class="badge">{role}</span>
<button class="danger" xo-click="deletePerson" xo-confirm="Delete {name}?" xo-notice="Deleted">Delete</button>
<button slot="bulk" class="danger" xo-click="deletePerson" xo-selected>Delete ticked</button>
</xo-table>
</xo-view>Three steps from spec to screen.
Sync your API
Generate typed operations from the OpenAPI document you already have.
npx xoong sync openapi.jsonWrite the screen
HTML with a few
xo-*elements. Style it with plain CSS and custom properties.<xo-view get="listPeople"><xo-table sortable></xo-table></xo-view>Serve it hot
Run the dev server, then build static output for strict-CSP hosting.
npx xoong dev npx xoong build --out dist
Hungry for less framework?
Xoong is a 0.0.x prototype and the syntax is still Draft. Come cook with us early.