Features · Multi-OS & Spatial XR

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.

Android minSdk 28 + AAR iOS Arm64 + Sim Windows JVM Linux JVM macOS JVM Web WasmJs & JS Android XR & 3D SceneView · RealityKit
Features

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.

×7

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.

/p

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.

Example · 3D catalog

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-compose on Android, its RealityKit bridge on iOS and sceneview-web on Web. Desktop shows a labelled placeholder for now.
  • An agent moves the camera with model3d_setCamera, model3d_resetCamera and model3d_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.
a2ui · updateComponents
{ "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 }
illustration · drag to orbit
azimuth 0° · elevation 15°
Theming

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 with setTheme or setThemeMode.
  • Your app stays in charge: a theme policy decides whether an agent's theme is merged, ignored or wins.
  • anysdui-theme-import converts 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.
a2ui v1.0 · createSurface

        
fediim components · same message, new catalog
3 overdue

Invoice #1042 is unpaid

Due 30 Sep 2026 · €1,280
Integration · Translatio Available

Translate 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 updateDataModel message 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.
workbench · invoice.remind

        
illustration · live preview
3 overdue

Invoice #1042

Agent capabilities

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, @SduiUsage and @SduiPreferred travel inside the catalog.
ClaudeGeminiOpenAI ResponsesLocal models via OllamaBring your own key
Build a reminder form for overdue invoices.
Picked Card, TextField and Button from urn:fediim:fds:0.1.0. Validated in strict mode.
rendered natively

Send a reminder

10 of 10measured: screens valid on the first attempt (Basic catalog, one call to Claude Haiku)
~2.4 smeasured: typical time to the first checked screen (Basic catalog, Claude Haiku)
~15kmeasured: prompt tokens for the Basic catalog, examples included
Enterprise Security, Performance & Proof

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.

0ms

Zero runtime reflection

KSP2 generates direct Kotlin when dispatch over native @Composable calls. Render at 60/120Hz with leaf-level RFC 6901 @path recomposition.

Architecture spec →
🔒

Fail-closed STRICT security

Declarative JSON only—never executable code. @SduiUserGesture blocks passive URL/action triggers, and unallowlisted media origins are rejected before composition.

Security bounds →
AAR

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 →
52

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.

Read the case study →