Skip to content

Playground

Runs the D17 wasm engine in the tab. No eelgrass serve. Durable OPFS when available; otherwise session memory. Pick a template, get a working app, edit it in place. Everything you build compiles to real .eel.

Hosted: play.eelgrass.dev

Local

bash
cd clients/studio && npm install && npm run build:wasm && npm run dev:playground
# open http://127.0.0.1:5173/?local=1

build:wasm is required for the real engine. Without public/eelgrass_wasm.wasm, the UI falls back to an in-memory mock (also forced with ?mock=1).

Mobile e2e (360×640):

bash
PLAYGROUND_URL='http://127.0.0.1:5173/?local=1' npm run test:playground
# Or one-shot (builds wasm + preview):
npm run test:playground:ci

What it is

A phone-first app builder on part primitives: list, count, action, form, text, detail, log. No domain-named widgets. Row configuration is what makes an orders list look different from a skills list. A log part plus action missEffects is how apps show finds, misses, and history.

Surfaces:

  • Start: your apps (stored in this browser) plus templates to start a new one
  • App: the live app; Edit overlays handles and insert slots
  • Sheets: add part, part settings, data, workspaces, under the hood (.eel)

Apps coexist locally (many can live in this browser). Workspaces live inside an app and map to Eelgrass tenants in the product model. The wasm playground ABI is still single-tenant today (create / fork tenant stay serve-only); the adapter keeps a workspace ledger and reseeds through the real engine when you switch or copy. Snapshots and asof use the real wasm ops.

Engine

UI talks only through EngineAdapter (src/playground/engine/):

AdapterRole
wasm.tsDefault: localEngine / eelgrass_wasm.wasm
mock.tsTests + missing-artifact / ?mock=1 fallback

Design

Deploy

Maintainers: see Deploy docs + playground.

  • Studio: serve-backed console (same package)
  • Status: capability contract

Pre-alpha. Local-first. Stdlib-only Rust engine. Tenant concerns shifted left into the database.