Extropian Webview

Type:Modular repository
Category:Engineering UI
Status:in-development

The modern UI/UX of the web with desktop GPU power — offscreen HTML/CSS/JS panels composited into ECS scenes, lightweight and performant.

Extropian Webview brings the modern UI/UX of the web to the desktop GPU stack, in a lightweight, performant package. A webview is an ordinary spatial entity: an offscreen HTML/CSS/JS surface rendered to a GPU texture by a swappable browser engine, then drawn as a textured UI quad in the same ecs::Registry and ecs::SceneGraph as 3D geometry and spatial-UI widgets.

Panels are authored with a WebViewComponent descriptor — inline HTML, a local file:// page, or a remote URL — and built with build_webview_panel. They dock as camera-fixed overlay HUDs or float in the world as 2.5D scene quads. Mouse, keyboard, and focus events route into the page, and a small JS library (window.exd) talks back to the ECS and the broader app over a JSON message protocol — so a model tree, dashboard, or configuration UI can be written in HTML/CSS/JS and still drive engine state directly.

Conventional embedded webviews (WebView2, WKWebView, WebKitGTK, Tauri/wry) render into a native child window and cannot be composited into a 2.5D scene. Extropian Webview’s contract is offscreen rendering → BGRA framebuffer → GL texture: one GPU path for both overlay docking and scene placement. The core module depends only on extropian-core and compiles to WASM with zero changes; browser engines plug in behind the IWebViewEngine contract — Chromium via CEF offscreen rendering in the sibling extropian-webview-cef repo, or the headless MockEngine for tests and demos.

Core capabilities

  • Offscreen HTML/CSS/JS surfaces rendered to GPU textures and drawn as textured quads in the same ECS scene graph as 3D geometry — no native child windows, one GPU path
  • Dock webviews as camera-fixed overlay HUD panels or place them in the world as 2.5D scene quads with perspective
  • Mouse, keyboard, and focus input routed into webviews; a small JS library (window.exd) links page JavaScript to the ECS over a JSON message protocol
  • Engine-agnostic IWebViewEngine contract with swappable backends — Chromium via CEF offscreen rendering, headless MockEngine for tests and demos, factory injection for apps
  • Lightweight by design: engine-agnostic core depends only on extropian-core and compiles to WASM; GPU, window, and input wiring stay isolated in the scene module

Technical foundation

  • Two-tier design mirrored on extropian-spatial-ui: WASM-safe exd::webview core (descriptor, builder, engine contract, message protocol) plus exd::webview_scene ECS wiring built on extropian-core, extropian-render, and extropian-app
  • Webview quads drawn through render::UiPipeline::Texture — the textured-quad UI pipeline variant in extropian-render
  • The concrete browser engine (Chromium via CEF offscreen rendering) lives in the sibling extropian-webview-cef repo, implementing IWebViewEngine

Ecosystem connections

Licensing & customization

Source Available (PolyForm Shield)Binary Distribution (Proprietary)Internal Use (Proprietary)

Licensing is negotiated around the software, deployment model, scope, and ownership requirements of each project — whether Extropian Webview is used as-is, customized for your workflows, or embedded in a larger system you are building. I prefer perpetual licenses per major version: one fee licenses the version you chose for as long as you use it, with maintenance updates included within that major version.

Source Available (PolyForm Shield): view and build from the source under terms that prevent offering it as a competing product or service — no license fees or royalties.

Binary Distribution (Proprietary): one-time license to use and distribute the software in binary form, including inside products you sell.

Internal Use (Proprietary): one-time license for ongoing internal use of the software as delivered — no distribution, no recurring fees.

Start a conversation

Tell me about your workflow and deployment — I respond within 24 hours.