# mbasso/asm-dom

A minimal WebAssembly virtual DOM to build C++ SPA (Single page applications)

Repository: https://github.com/mbasso/asm-dom
Canonical: https://ross.abutalabs.com/products/asm-dom
Homepage: https://mbasso.github.io/asm-dom
Language: C++
License: NOASSERTION
License Family: other
Topics: virtual-dom, dom, rendering, virtual-dom-library, webassembly, wasm, asmjs, diffing, asm-dom, vdom
Last push: 2023-03-03T18:16:02+00:00

## Health v2 (maintenance only)
Score: 23/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 0, release rhythm 8, longevity 100
- inputs: {"age_days": 3476, "days_push": 1279, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: no_license
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 2823, forks 89 (observed 2026-08-28T04:07:24.067355+00:00)

## What it is
asm-dom is a minimal WebAssembly virtual DOM library that lets developers build single-page applications entirely in C++ compiled with Emscripten. It handles DOM API calls on behalf of the C++ code, supports a JSX-like syntax via gccx, and offers server-side rendering on Node.js.

## Use cases
- build a single-page application in C++ compiled to WebAssembly
- reuse existing C/C++ code in a web app without writing JS bindings
- share one C++ codebase between desktop, mobile, and web apps
- render virtual DOM diffs at near-native speed in the browser
- do server-side rendering of a C++ SPA on Node.js
- write frontend views with a JSX-like syntax in C++

## When to choose
- you have substantial C/C++ code you want to run in the browser without a binding layer
- you want an unopinionated, low-level virtual DOM you can structure yourself
- you want to share application logic across web and native platforms in C++
- you're experimenting with WebAssembly for DOM-heavy apps

## When to avoid
- you want a batteries-included, opinionated frontend framework with routing and state management
- your team works primarily in JavaScript or TypeScript
- you need a mature, actively maintained library with a large ecosystem
- you can't tolerate the JS-WASM binding overhead for DOM interactions

## Facets
- artifact type: library
- maturity: experimental
- function: frontend-framework, ui-components, wasm, ssr
- domain: web-development, frontend, cross-platform
- platform: cpp, browser
- tags: virtual-dom, webassembly, emscripten, single-page-applications, jsx-like-syntax, diffing, web-server, nodejs

## Member repositories
- mbasso/asm-dom (main) score 23

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:07:24.067355+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T07:38:17.289902+00:00, confidence not recorded.
  - readme: https://github.com/mbasso/asm-dom (fetched 2026-08-28T04:07:24.067355+00:00, sha 63196140e440)
  - homepage: https://mbasso.github.io/asm-dom (fetched 2026-08-29T09:53:34.104195+00:00, sha d5c60adcf61b)
- Data as of 2026-08-30T08:39:29.467469+00:00.
