How aemgh/spatialmarkdown works
Spatial Markdown is a DOM-less streaming text layout engine. A user supplies markup directly or through an LLM stream adapter; the app or pipeline incrementally tokenizes and builds an AST, transforms it, measures content, solves constraints, calculates geometry, and emits renderer-independent draw commands. Those commands feed Canvas or the Android QuickJS/Compose runtime; static rendering and theme extraction are additional capabilities. The pipeline excerpt documents its orchestration, while the README documents public workflows and cross-platform behavior; some adapter and Android internals were not sampled.
Main entry points: pipeline.ts Layout pipeline · create-app.ts App coordinator · mount.ts Mount API · SpatialEngine.kt Android runtime
Components 18
Application APIs
- Mount API
src/app/mount.ts - App coordinator
src/app/create-app.ts - Layout pipeline
src/pipeline.ts
Parsing and Layout
- FSM tokenizer
src/parser/tokenizer/state-machine.ts - AST builder
src/parser/ast/builder.ts - AST transforms
src/parser/transforms/auto-paragraph.ts - Text measurement
src/engine/measurement/measurement-context.ts - Constraint solver
src/engine/constraints/solver.ts - Geometry calculator
src/engine/geometry/calculator.ts
Rendering Runtimes
- Command builder
src/renderer/command-builder.ts - Canvas renderer
src/renderer/canvas/canvas-renderer.ts - Android runtime
android/spatial-engine/src/main/java/com/spatialmarkdown/engine/core/SpatialEngine.kt - Compose view
android/spatial-engine/src/main/java/com/spatialmarkdown/engine/core/SpatialEngineView.kt - Server rendering
src/ssr/index.ts
Streams and Themes
- LLM stream adapters
src/streams/from-openai.ts - Theme extraction
src/theme/extract-theme.ts
Other components
- Markup author
- LLM provider
Connections 18
- Markup author → Mount API: provides markup
- Mount API → App coordinator: creates app
src/app/index.ts - App coordinator → Layout pipeline: coordinates
src/app/create-app.ts - LLM provider → LLM stream adapters: streams response
- LLM stream adapters → App coordinator: feeds stream
- Markup author → Layout pipeline: feeds markup
- Layout pipeline → FSM tokenizer: tokenizes
src/pipeline.ts - Layout pipeline → AST builder: builds AST
src/pipeline.ts - Layout pipeline → AST transforms: transforms AST
src/pipeline.ts - Layout pipeline → Text measurement: measures text
src/pipeline.ts - Layout pipeline → Constraint solver: solves constraints
src/pipeline.ts - Layout pipeline → Geometry calculator: calculates geometry
src/pipeline.ts - Layout pipeline → Command builder: builds commands
src/pipeline.ts - Layout pipeline → Canvas renderer: renders commands
- Layout pipeline → Android runtime: runs in QuickJS
- Android runtime → Compose view: supplies runtime
android/spatial-engine/src/main/java/com/spatialmarkdown/engine/core/SpatialEngineView.kt - Markup author → Server rendering: requests static render
- Markup author → Theme extraction: extracts theme