Everything between your server and every screen
Compile-time catalogs, runtime theming, 3D & Android XR, live translation, and tooling for AI agents—across Android, iOS, Windows, Linux, macOS, and Web.
Everything between your server and the screen
Checked at compile time
The catalog and the drawing code are generated from the same function signatures, so they cannot drift apart. Every incoming message is validated STRICT before anything is drawn.
Every OS + Android XR
The same screens render natively on Android (plus closed binary AAR wrappers), iOS, Windows, Linux, macOS, Web (Wasm & JS), and spatial Android XR / 3D.
Multi-screen flows & navigation
Rooms hold full multi-screen flows. Presenters lead live while viewers navigate prototype transitions independently in Explore mode using standard anysdui.navigate actions.
Signed share links & web viewer
Generate HMAC-signed, expiring links to share live flows with stakeholders. Anyone can view and interact in a web browser without installing an app or tool.
Subtree theming & motion
Theme entire surfaces or specific subtrees with WithTheme. W3C design tokens and DTCG motion animate state transitions while honoring system reduced-motion settings.
Figma push & visual editor
Push frames and prototype links directly from Figma (RFC-0012). The server expands uncoded composites and renders live on paired devices and in the web editor.
Server-driven, in three dimensions
The opt-in anysdui-compose-3d catalog adds one component, Model3D. A message names a model and a camera, and the device draws it with its own 3D engine. Mix it into any surface next to your own components.
- A thin adapter over SceneView does the rendering:
sceneview-composeon Android, its RealityKit bridge on iOS andsceneview-webon Web. Desktop shows a labelled placeholder for now. - An agent moves the camera with
model3d_setCamera,model3d_resetCameraandmodel3d_frameContent, without recomposing the surface. - Orbit gestures write the camera pose back to the data model.
- Models load only from origins you allow, under a size limit.
{ "id": "chair", "component": "Model3D",
"catalogId": "urn:anysdui:compose-3d:1.0.0",
"src": "https://example.com/models/chair.glb",
"alt": "Lounge chair",
"autoRotate": true,
"cameraDistance": 6,
"cameraElevation": 15 }
Restyle a screen without a release
Components refer to colours and type styles by name, not by value. The names are resolved from a theme at run time, so one message can recolour a whole screen or switch it between light and dark.
- A theme holds colours with light and dark values, typography, shapes, spacing, elevation, and motion tokens (durations, easings, springs, transitions), plus per-component states and variants.
- Subtree theming: Containers can theme their own children independently using
RenderScope.WithTheme, merging token overrides and modes without altering the outer surface. - State changes and list child enter/exit animate automatically, with built-in respect for the system's reduced-motion setting.
- The first theme travels inside
createSurface. An agent changes it later withsetThemeorsetThemeMode. - Your app stays in charge: a theme policy decides whether an agent's theme is merged, ignored or wins.
anysdui-theme-importconverts W3C design tokens from Figma, Tokens Studio or Style Dictionary into themes and motion specifications.- A design system can also ship whole looks as catalogs. fediim publishes one catalog id per palette, in its own, Material 3 and iOS style. Below, each palette is a new
createSurface; the components stay the same.
Invoice #1042 is unpaid
Due 30 Sep 2026 · €1,280Translate on the real screen
Translatio is fediim's translation management system. Its workbench has an AnySDUI canvas, so a translator sees each string inside the actual screen, drawn with your design system's components, and watches it change while typing.
- Every edit is one
updateDataModelmessage to/strings/<key>. Components bound to that path redraw at once, with no rebuild and no reconnect. - Text that is too long, wraps badly or gets cut off shows up before release, not after.
- Bring your own design system: import its
catalog.json, and optionally an alias map and a theme. - The preview is inert. Taps and clicks send nothing, so they never get in the way of annotating.
Invoice #1042
The label is cut off at this width.Built for agents that draw UI
A catalog is a contract an AI model can read. AnySDUI keeps that contract small, documented and checkable, so a model can get the screen right, and anything it gets wrong is caught before a user sees it.
- Generated agent skills for every catalog teach Claude Code, Gemini CLI or ADK to write layouts for it.
- An integration skill lets a coding agent add AnySDUI to your project for you.
- A Kotlin agent SDK,
dev.fediim:anysdui-agent, for your own agent: a prompt snippet for supported catalogs, streaming parser, and validators. Runs on Android, JVM, iOS and Web without Compose or Ktor. - OpenAI Responses API & reasoning presets: Server writer supports OpenAI Responses API with configurable reasoning effort, Claude, Gemini and local Ollama models.
- An A2A 1.0 agent built into the server, so any A2A client can request screens.
- An AI helper pipeline that checks every generated screen and repairs mistakes before it reaches a device.
- Design system chatbot architecture: Complete sample and tutorial for interactive design-system chatbots with third-party theme tokens.
- Examples and usage notes from
@SduiExample,@SduiUsageand@SduiPreferredtravel inside the catalog.
urn:fediim:fds:0.1.0. Validated in strict mode.Send a reminder
Built so Staff Engineers and InfoSec say yes
Server-driven and agent-generated UIs only belong in production when they are deterministic, fast, and impossible for an LLM or untrusted payload to exploit.
Zero runtime reflection
KSP2 generates direct Kotlin when dispatch over native @Composable calls. Render at 60/120Hz with leaf-level RFC 6901 @path recomposition.
Fail-closed STRICT security
Declarative JSON only—never executable code. @SduiUserGesture blocks passive URL/action triggers, and unallowlisted media origins are rejected before composition.
Brownfield & air-gapped ready
Wrap closed binary Android Jetpack Compose AARs without modifying source. Zero external telemetry in the Apache 2.0 runtime, with VPC self-hosting for Enterprise.
See AAR wrapper →Proven on 52 components
The fediim production design system exposed 52 components across Desktop, Android, and Web Wasm via 1 thin bridge module with zero edits to its core library.