tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 660Markdown 302TOML 157RON 312382 Definiciones

⎇ main llimphi-wasm-app-sdk/LEEME.md Markdown · 27 líneas · 1.2 KB Historia crudo

chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes 93253cc22 · Sergio ·

1# llimphi-wasm-app-sdk
2
3*Read this in English: [README.md](README.md).*
4
5Lado guest de las apps WASM Tier 3.
6
7Una app implementa `WasmApp`: un `Model` propio, una transición
8`update(&mut self, Msg)` y una vista `view(&self, &mut Ui) -> WireNode`. La
9UI se arma con los constructores libres de `llimphi_wire_view`
10(`col`/`row`/`text`) para lo no-interactivo y con el `Ui` para lo
11interactivo (`button`/`text_input`/`checkbox`).
12
13**Eventos con payload.** El `Ui` asigna un `EventId` a cada control y guarda
14su handler. El nodo lleva sólo el id; el host, al disparar, manda
15`dispatch(event_id, payload)`. El guest mira su tabla y reconstruye el `Msg`:
16un botón rinde su `Msg` fijo, un input rinde `f(texto_tecleado)`, un checkbox
17`f(nuevo_estado)`. Por eso **`Msg` ya no cruza la frontera** — sólo el id y el
18`EventPayload` —, así que `Msg` se libera de (de)serializar: basta `Clone`.
19
20`export_wasm_app!` genera el ABI: `wasm_init`, `wasm_view() -> u64`
21(ptr<<32|len del `WireNode` postcard), `wasm_dispatch(event_id, ptr, len)`,
22`wasm_alloc`, `wasm_free`. El `Model` y la tabla de handlers viven en un
23global y persisten entre frames porque el host mantiene viva la instancia.
24
25---
26
27Parte de **llimphi** — ver [llimphi](../LEEME.md).

LEEME.md

llimphi-wasm-app-sdk

Read this in English: README.md.

Lado guest de las apps WASM Tier 3.

Una app implementa WasmApp: un Model propio, una transición update(&mut self, Msg) y una vista view(&self, &mut Ui) -> WireNode. La UI se arma con los constructores libres de llimphi_wire_view (col/row/text) para lo no-interactivo y con el Ui para lo interactivo (button/text_input/checkbox).

Eventos con payload. El Ui asigna un EventId a cada control y guarda su handler. El nodo lleva sólo el id; el host, al disparar, manda dispatch(event_id, payload). El guest mira su tabla y reconstruye el Msg: un botón rinde su Msg fijo, un input rinde f(texto_tecleado), un checkbox f(nuevo_estado). Por eso Msg ya no cruza la frontera — sólo el id y el EventPayload —, así que Msg se libera de (de)serializar: basta Clone.

export_wasm_app! genera el ABI: wasm_init, wasm_view() -> u64 (ptr<<32|len del WireNode postcard), wasm_dispatch(event_id, ptr, len), wasm_alloc, wasm_free. El Model y la tabla de handlers viven en un global y persisten entre frames porque el host mantiene viva la instancia.


Parte de llimphi — ver llimphi.