A PRACTICAL GUIDE

Your framework. Your choice..

Vanilla JavaScript, React and Blazor integration.

Native web first

The libraries provide JavaScript APIs and, where applicable, custom elements or imperative controls. A framework adapter should attach the real model after its DOM host mounts and release owned resources when that host unmounts.

React

Use a ref to create imperative controls once per host. Assign complex objects as properties, not serialized HTML attributes. RichTextWeb and ReactiveWeb also expose optional React adapters; consult their current guides for supported React versions and ownership.

React lifecycle pattern
useEffect(() => {
  const engine = new DiagramEngine(createDocument('Project'));
  const control = new DrawingControl(hostRef.current, { engine });
  return () => { control.dispose(); engine.dispose(); };
}, []);

Blazor

The upstream projects provide separate NuGet wrappers. NuGet and npm versions are independent. Follow the relevant repository’s Blazor guide for target frameworks, static assets and interactive Server/WebAssembly hosting. This site’s playgrounds run JavaScript packages, not .NET WebAssembly.

Server rendering

Do not import browser-only registrations during server rendering unless the package documents SSR safety. Keep headless models separate from browser controls. Import the visual layer in the client lifecycle and provide meaningful static content around it.


Component APIs and compatibility boundaries are documented in their upstream repositories. Each component page links to its own source and guide.

Put it into practice
↑ ↓ to explore · Enter to openEsc to close