Skip to content

Playground

Runs the D17 wasm engine in the tab — no eelden 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.eelden.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/eelden_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 six part primitives — list, count, action, form, text, detail. No domain-named widgets. Row configuration is what makes an orders list look different from a skills list.

Surfaces:

  • Start — three templates (order board, tiny adventure, start empty)
  • App — the live app; Edit overlays handles and insert slots
  • Sheets — add part, part settings, data, workspaces, under the hood (.eel)

Workspaces map to Eelden 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.tsDefaultlocalEngine / eelden_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.