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

⎇ 168cd187519c0ad575d3ce63baee2f164c38d9d1 LEEME.md Markdown · 126 líneas · 8.8 KB Historia crudo

chore: refresco desde el monorepo — 128 miembros, los 76 widgets y los 11 módulos b3f12e136 · Sergio ·

1# llimphi
2
3> Framework de UI nativa: HAL · raster · layout · text · theme · ui — más widgets y módulos.
4
5![una UI densa compuesta sólo con primitivas del compositor: tema oscuro, top bar con tabs, sidebar, editor de código con resaltado sintáctico, texto rico, tarjetas de métricas con gradientes y sombras, un gráfico de barras de puros rects y un toast flotante](https://tawasuyu.net/02_ruway/llimphi/pantallazo.png)
6
7`llimphi` es el motor gráfico que comparten todas las apps del monorepo. Pipeline retained-mode declarativa sobre `vello` 0.9 + `wgpu` 29 + `taffy` 0.12, con shaping `parley` 0.6 (DejaVu Sans embebida como fallback de símbolos), theme `Dark/Light/Aurora/Sunset`, accesibilidad AccessKit, HAL multiplataforma (Wayland · X11 · Win32 · Android · Wawa).
8
9**Manual de uso:** [MANUAL.md](MANUAL.md) — referencia completa (bucle Elm, DSL `View<Msg>`, los 76 widgets y 11 módulos, GPU directo, gotchas) para humanos e IA. Diseño y roadmap: [SDD.md](SDD.md).
10
11Filosofía: **un widget no se diseña pensando en mockups; se diseña con lo que `vello` y `taffy` pueden hacer.**
12
13## Instalación
14
15```sh
16# usar como dep en otro crate:
17[dependencies]
18llimphi-ui = { workspace = true }
19llimphi-theme = { workspace = true }
20llimphi-widget-... = { workspace = true }
21```
22
23## Compatibilidad
24
25- **Linux/Wayland** — backend principal.
26- **Linux/X11** — via XWayland (mediante `winit`).
27- **macOS / Windows** — `winit` + `wgpu`.
28- **Android** — `clear-screen-android`, `vello-hello-android`, `vello-text-android` para validar el HAL móvil.
29- **Wawa bare-metal** — HAL alterno sobre framebuffer.
30
31## Crates: framework
32
33| Crate | Rol |
34|---|---|
35| [`llimphi-hal`](llimphi-hal/README.md) | Abstracción de superficie (winit / framebuffer / android). |
36| [`llimphi-raster`](llimphi-raster/README.md) | Rasterizer vello + cache de scenes (feature opt-in `hybrid`: renderer CPU+GPU sin compute shaders). |
37| [`llimphi-layout`](llimphi-layout/README.md) | Layout taffy + extensiones. |
38| [`llimphi-text`](llimphi-text/README.md) | Shaping + fonts (parley; DejaVu Sans embebida como fallback). |
39| [`llimphi-theme`](llimphi-theme/README.md) | Themes Dark/Light/Aurora/Sunset + paleta + tokens de motion/elevation. |
40| [`llimphi-ui`](llimphi-ui/README.md) | `View<Msg>` retained-mode + Elm-arch + puente AccessKit. |
41| `llimphi-compositor` | Núcleo declarativo sin winit: árbol `View<Msg>`, mount taffy, paint a scene, hit-test. |
42| `llimphi-image` | Decode PNG/JPEG → `peniko::Image`. |
43| `llimphi-svg` | Puente `vello_svg` → Llimphi (SVG real, íconos `.desktop`). |
44| `llimphi-icons` | Íconos vectoriales propios (grid 24×24). |
45| `llimphi-motion` | Tweens e interpolación (incl. transform afín). |
46| `llimphi-surface` | Texturas externas. |
47| `llimphi-workspace` | Chasis tipo tmux: splits resizables sobre `widget-panes`. |
48| `llimphi-gallery` | Demo único del kit de elegancia (todos los widgets juntos). |
49| `llimphi-gpu-bench` | Bench standalone del path GPU directo. |
50| `llimphi-layer` | Corre un `App` como superficie **wlr-layer-shell** (barra anclada a un borde) en vez de ventana: así se pintan `pata` y el daemon de notificaciones. |
51| `llimphi-test` | Arnés golden-image **headless y determinista** — la razón por la que un cambio de UI se puede certificar como texto en vez de mirando una captura. |
52| `llimphi-3d` · `llimphi-voxel` · `llimphi-voxel-app` · `llimphi-voxel-studio` | El motor 3D (ray-march de voxels + mallas en una pasada de profundidad), la capa de contenido (worldgen procedural, personajes articulados, director de escenas) y el creador de mundos. |
53| `llimphi-anim` | Máquina de estados de animación estilo Rive, **clip-agnóstica**. |
54| `llimphi-anim-studio` | Los documentos serializables que autora el editor de animación (el grafo de estados). |
55| `llimphi-lottie` | Puente fino a `velato` (reproductor Lottie de Linebender). |
56| `llimphi-mesh` | Render de mallas deformables (huesos y skinning) a una `vello::Scene`. |
57| `llimphi-video-plane` | Plano de video. |
58| `llimphi-term-graphics` | Decodificador agnóstico de protocolos de gráficos de terminal. |
59| `llimphi-wire-view` | IR serializable de un subset de `View<Msg>` — el cable entre guest y host. |
60| `llimphi-wasm-app-sdk` | Lado **guest** de las apps WASM Tier 3: una app implementa `WasmApp` con su propio modelo y pinta un `View<Msg>` normal. |
61| `llimphi-wasm-runner` | Lado **host** sobre `wasmi`: carga un `.wasm` que sigue ese ABI. |
62| `llimphi-wasm-core` · `-dist` · `-net` · `-registry` · `-open` | Distribución **por hash** de apps WASM: el núcleo puro, la cara con baterías, el transporte P2P sobre Brahman, el puente data-driven a registros públicos y la apertura. |
63| `llimphi-wasm-wasi` | Corre apps **WASI de consola** sobre wasmi — el catálogo no es trampa. |
64| `llimphi-wasm-demo-{counter,form}` | Las apps guest de ejemplo. |
65
66## Crates: widgets (visuales reactivos)
67
68| Widget | Función |
69|---|---|
70| [`button`](widgets/button/README.md) | Botón con variantes. |
71| [`text-input`](widgets/text-input/README.md) | Input single-line. |
72| [`text-area`](widgets/text-area/README.md) | Textarea multi-line. |
73| [`text-editor`](widgets/text-editor/README.md) | Editor (rope · cursor · undo · highlight · clipboard · find). |
74| [`text-editor-lsp`](widgets/text-editor-lsp/README.md) | Editor + LSP. |
75| [`tree`](widgets/tree/README.md) | Árbol jerárquico. |
76| [`list`](widgets/list/README.md) | Lista virtualizada. |
77| [`tabs`](widgets/tabs/README.md) | Tabs con cierre. |
78| [`splitter`](widgets/splitter/README.md) | Splitter horizontal/vertical. |
79| [`tiled`](widgets/tiled/README.md) | Tiled window manager dentro de la app. |
80| [`slider`](widgets/slider/README.md) | Slider con tick marks. |
81| [`gallery`](widgets/gallery/README.md) | Grid de cards. |
82| [`card`](widgets/card/README.md) | Card base. |
83| [`stat-card`](widgets/stat-card/README.md) | Card para métricas. |
84| [`banner`](widgets/banner/README.md) | Banner / alerts. |
85| [`app-header`](widgets/app-header/README.md) | Header común de app. |
86| [`context-menu`](widgets/context-menu/README.md) | Menú contextual (look distintivo). |
87| [`theme-switcher`](widgets/theme-switcher/README.md) | Selector de tema. |
88| [`nodegraph`](widgets/nodegraph/README.md) | Lienzo de nodos + cables Bezier. |
89
90Y además (catálogo completo con firmas en [MANUAL.md](MANUAL.md) §13): avatar · badge · breadcrumb · calendar · carousel · chip · clipboard · color-picker · dock-rail · edit-menu · empty · fab · field · fitted-box · gauge · grid · hero · menubar · modal · navigator · panel · panes · progress · range-slider · rating · scaffold · scroll · segmented · select · shortcuts-help · skeleton · spinner · splash · status-bar · switch · table · terminal · text-editor-core · timeline · toast · tooltip · transport · waveform · wawa-mark · wrap.
91
92## Crates: modules (feature funcional con estado)
93
94| Module | Función |
95|---|---|
96| [`command-palette`](modules/command-palette/README.md) | Paleta de comandos. |
97| [`diff-viewer`](modules/diff-viewer/README.md) | Diff side-by-side. |
98| [`fif`](modules/fif/README.md) | Find-in-files. |
99| [`file-picker`](modules/file-picker/README.md) | Picker de archivos. |
100| [`mini-map`](modules/mini-map/README.md) | Mini-mapa del editor. |
101| [`bookmarks`](modules/bookmarks/README.md) | Bookmarks por archivo. |
102| [`symbol-outline`](modules/symbol-outline/README.md) | Outline de símbolos LSP. |
103| [`plugin-host`](modules/plugin-host/README.md) | Host para plugins WASM. |
104| [`shuma-term`](modules/shuma-term/README.md) | Terminal embebida (shell shuma). |
105| `allichay` | Renderizador único de configuración declarativa (`allichay::Schema` → rail + controles). |
106| `selector` | Abstracción portátil abrir/guardar (`trait Selector`: host con PathBuf, Wawa content-addressed). |
107
108## Crates: android
109
110| Crate | Rol |
111|---|---|
112| [`clear-screen-android`](android/clear-screen-android/README.md) | Smoke test HAL Android. |
113| [`vello-hello-android`](android/vello-hello-android/README.md) | Vello hello-world Android. |
114| [`vello-text-android`](android/vello-text-android/README.md) | Text shaping Android. |
115
116## Demo
117
118En vivo: **<https://tawasuyu.net/02_ruway/llimphi/demo/>** — tour autocontenido tipo prezi: arquitectura, bucle Elm, kit de widgets y pantallazos headless de ~10 apps reales corriendo sobre llimphi (cosmos · pluma · nada · takiy · tullpu · supay · dominium · nahual · shuma…). Espacio / flechas / click para navegar; auto-advance cada 6 s — listo para grabar como video.
119
120Fuente en [`demo/`](demo/index.html) (HTML+CSS+JS plano, sin build). Local: `python3 -m http.server -d demo`.
121
122## Consideraciones
123
124- **Una sola API: `View<Msg>` declarativa**. Sin imperativo, sin DOM virtual ajeno.
125- **El mismo árbol corre en Wayland y Wawa**: HAL abstrae la superficie, el resto es idéntico.
126- Los widgets son **puramente visuales**; los módulos encapsulan estado + comportamiento.

LEEME.md

llimphi

Framework de UI nativa: HAL · raster · layout · text · theme · ui — más widgets y módulos.

una UI densa compuesta sólo con primitivas del compositor: tema oscuro, top bar con tabs, sidebar, editor de código con resaltado sintáctico, texto rico, tarjetas de métricas con gradientes y sombras, un gráfico de barras de puros rects y un toast flotante

llimphi es el motor gráfico que comparten todas las apps del monorepo. Pipeline retained-mode declarativa sobre vello 0.9 + wgpu 29 + taffy 0.12, con shaping parley 0.6 (DejaVu Sans embebida como fallback de símbolos), theme Dark/Light/Aurora/Sunset, accesibilidad AccessKit, HAL multiplataforma (Wayland · X11 · Win32 · Android · Wawa).

Manual de uso: MANUAL.md — referencia completa (bucle Elm, DSL View<Msg>, los 76 widgets y 11 módulos, GPU directo, gotchas) para humanos e IA. Diseño y roadmap: SDD.md.

Filosofía: un widget no se diseña pensando en mockups; se diseña con lo que vello y taffy pueden hacer.

Instalación

# usar como dep en otro crate:
[dependencies]
llimphi-ui = { workspace = true }
llimphi-theme = { workspace = true }
llimphi-widget-... = { workspace = true }

Compatibilidad

Crates: framework

CrateRol
llimphi-halAbstracción de superficie (winit / framebuffer / android).
llimphi-rasterRasterizer vello + cache de scenes (feature opt-in hybrid: renderer CPU+GPU sin compute shaders).
llimphi-layoutLayout taffy + extensiones.
llimphi-textShaping + fonts (parley; DejaVu Sans embebida como fallback).
llimphi-themeThemes Dark/Light/Aurora/Sunset + paleta + tokens de motion/elevation.
llimphi-uiView<Msg> retained-mode + Elm-arch + puente AccessKit.
llimphi-compositorNúcleo declarativo sin winit: árbol View<Msg>, mount taffy, paint a scene, hit-test.
llimphi-imageDecode PNG/JPEG → peniko::Image.
llimphi-svgPuente vello_svg → Llimphi (SVG real, íconos .desktop).
llimphi-iconsÍconos vectoriales propios (grid 24×24).
llimphi-motionTweens e interpolación (incl. transform afín).
llimphi-surfaceTexturas externas.
llimphi-workspaceChasis tipo tmux: splits resizables sobre widget-panes.
llimphi-galleryDemo único del kit de elegancia (todos los widgets juntos).
llimphi-gpu-benchBench standalone del path GPU directo.
llimphi-layerCorre un App como superficie wlr-layer-shell (barra anclada a un borde) en vez de ventana: así se pintan pata y el daemon de notificaciones.
llimphi-testArnés golden-image headless y determinista — la razón por la que un cambio de UI se puede certificar como texto en vez de mirando una captura.
llimphi-3d · llimphi-voxel · llimphi-voxel-app · llimphi-voxel-studioEl motor 3D (ray-march de voxels + mallas en una pasada de profundidad), la capa de contenido (worldgen procedural, personajes articulados, director de escenas) y el creador de mundos.
llimphi-animMáquina de estados de animación estilo Rive, clip-agnóstica.
llimphi-anim-studioLos documentos serializables que autora el editor de animación (el grafo de estados).
llimphi-lottiePuente fino a velato (reproductor Lottie de Linebender).
llimphi-meshRender de mallas deformables (huesos y skinning) a una vello::Scene.
llimphi-video-planePlano de video.
llimphi-term-graphicsDecodificador agnóstico de protocolos de gráficos de terminal.
llimphi-wire-viewIR serializable de un subset de View<Msg> — el cable entre guest y host.
llimphi-wasm-app-sdkLado guest de las apps WASM Tier 3: una app implementa WasmApp con su propio modelo y pinta un View<Msg> normal.
llimphi-wasm-runnerLado host sobre wasmi: carga un .wasm que sigue ese ABI.
llimphi-wasm-core · -dist · -net · -registry · -openDistribución por hash de apps WASM: el núcleo puro, la cara con baterías, el transporte P2P sobre Brahman, el puente data-driven a registros públicos y la apertura.
llimphi-wasm-wasiCorre apps WASI de consola sobre wasmi — el catálogo no es trampa.
llimphi-wasm-demo-{counter,form}Las apps guest de ejemplo.

Crates: widgets (visuales reactivos)

WidgetFunción
buttonBotón con variantes.
text-inputInput single-line.
text-areaTextarea multi-line.
text-editorEditor (rope · cursor · undo · highlight · clipboard · find).
text-editor-lspEditor + LSP.
treeÁrbol jerárquico.
listLista virtualizada.
tabsTabs con cierre.
splitterSplitter horizontal/vertical.
tiledTiled window manager dentro de la app.
sliderSlider con tick marks.
galleryGrid de cards.
cardCard base.
stat-cardCard para métricas.
bannerBanner / alerts.
app-headerHeader común de app.
context-menuMenú contextual (look distintivo).
theme-switcherSelector de tema.
nodegraphLienzo de nodos + cables Bezier.

Y además (catálogo completo con firmas en MANUAL.md §13): avatar · badge · breadcrumb · calendar · carousel · chip · clipboard · color-picker · dock-rail · edit-menu · empty · fab · field · fitted-box · gauge · grid · hero · menubar · modal · navigator · panel · panes · progress · range-slider · rating · scaffold · scroll · segmented · select · shortcuts-help · skeleton · spinner · splash · status-bar · switch · table · terminal · text-editor-core · timeline · toast · tooltip · transport · waveform · wawa-mark · wrap.

Crates: modules (feature funcional con estado)

ModuleFunción
command-palettePaleta de comandos.
diff-viewerDiff side-by-side.
fifFind-in-files.
file-pickerPicker de archivos.
mini-mapMini-mapa del editor.
bookmarksBookmarks por archivo.
symbol-outlineOutline de símbolos LSP.
plugin-hostHost para plugins WASM.
shuma-termTerminal embebida (shell shuma).
allichayRenderizador único de configuración declarativa (allichay::Schema → rail + controles).
selectorAbstracción portátil abrir/guardar (trait Selector: host con PathBuf, Wawa content-addressed).

Crates: android

CrateRol
clear-screen-androidSmoke test HAL Android.
vello-hello-androidVello hello-world Android.
vello-text-androidText shaping Android.

Demo

En vivo: https://tawasuyu.net/02_ruway/llimphi/demo/ — tour autocontenido tipo prezi: arquitectura, bucle Elm, kit de widgets y pantallazos headless de ~10 apps reales corriendo sobre llimphi (cosmos · pluma · nada · takiy · tullpu · supay · dominium · nahual · shuma…). Espacio / flechas / click para navegar; auto-advance cada 6 s — listo para grabar como video.

Fuente en demo/ (HTML+CSS+JS plano, sin build). Local: python3 -m http.server -d demo.

Consideraciones