Skip to content

Theater 0.1.0

Latest

Choose a tag to compare

@LuisHsu LuisHsu released this 27 Aug 23:44

A browser engine that runs WebAssembly instead of JavaScript. Write your
interface in HTML and CSS, write your logic in C compiled to wasm, and ship it
as an app.

This is a first release of a young engine: the scope it implements is
deliberate and narrow. Read Known limitations below before reaching for a
CSS property — anything outside the implemented set is ignored silently.

Which download

theater-0.1.0-… the runtime alone — for opening an app someone else made. About a quarter of the size.
theater-sdk-0.1.0-… the runtime plus the thsdk tools, a bundled C-to-wasm compiler and its sysroot, the guest headers and working examples. No other compiler or SDK is required.

Both install to the same prefix, so an SDK can be unpacked over a runtime later.
macOS is Apple Silicon only; Linux is x86_64.

The macOS .pkg is signed with a Developer ID and notarised, so it opens
normally — no "unidentified developer" prompt.

Verify a download against SHA256SUMS:

shasum -a 256 -c SHA256SUMS      # macOS
sha256sum -c SHA256SUMS          # Linux

The runtime — theater

  • HTML and CSS subsets, block, inline and flex layout, and a Skia CPU
    rasteriser.
  • WebAssembly guests on a worker thread, with a mem[2] bridge, a generational
    handle table and capture/bubble event dispatch — clicking a button runs guest
    C that mutates the DOM.
  • Four capabilities, granted by an app's manifest: "dom", "console",
    "storage" (a sandboxed path space) and "net" (asynchronous, event
    delivered).
  • http(s):// documents and their subresources behind a resource cache; an app
    is a directory of loose files described by a theater.json.
  • Host-managed <input> editing, including IME composition on macOS.
  • No developer features, by design. Everything a developer touches is in
    the SDK.

The SDK — thsdk

  • A git-style multi-tool: thsdk compile, dump, pack, render and watch,
    each individually runnable.
  • thsdk compile builds a guest from one or more .c files with a bundled
    wvmcc, so an app author never types a compiler flag.
  • thsdk pack turns an app directory into one portable .thdom carrying the
    document, the manifest, the guest and every asset — and no native code, so
    the same bytes open on every platform Theater runs on.
  • A CMake package — find_package(Theater) and theater_add_wasm() — for
    building a guest from a project's own build system.

Known limitations

These are the deliberate edges of an MVP, not defects:

  • Layout is block, inline and flex only. Not implemented: float, CSS grid,
    tables, position: fixed/sticky, transforms and animations, z-index, and
    bidi or complex scripts. A property outside the implemented set is ignored
    silently
    .
  • Scrolling is viewport-only: no overflow scrolling and no scrollbars.
  • One guest module per document.
  • Apple Silicon only on macOS; no Intel build.

Licence

Theater is Apache-2.0. Every third-party component is permissive — Skia,
WasmVM and wvmcc are BSD-3-Clause, GLFW is zlib/libpng — so nothing here carries
a copyleft obligation. LICENSE, NOTICE and THIRD-PARTY-NOTICES travel
inside every package at share/theater/.


This repository holds releases only; Theater's source is private. The
"Source code (zip/tar.gz)" links GitHub attaches below contain the README and
licence files, not Theater's source.