PocketJS for user interfaces

Write the interface once. Render it native everywhere.

Components, signals and Tailwind classes in Solid, Vue Vapor or Octane become one native tree that runs on every machine in the registry, from a 2004 PSP to a transparent macOS widget.

Three frameworks, one tree

Solid signals, Vue refs and Octane hooks drive the same host components. Pick per project, or mix apps on the same deck; the runtime renders one tree either way. How the three coexist →

Layout and style, compiled

taffy runs flexbox in the Rust core, so a familiar flex-col gap-4 lands on identical pixels on every target. Class literals compile to compact numeric records; no CSS parser ships to the device.

Input that feels right

D-pad focus, real touch with gesture physics, kinetic scroll and tap-to-press, a virtual cursor for pointerless machines, and a system keyboard any app summons with one call.

Motion, baked

animate-* classes compile to keyframe timelines the core plays back on the device’s own budget, 3D transforms and arcs included.

Pocket Talk, the IM demo, showing a message thread on a PSP-shaped screen.

Pocket Talk, the IM demo: a VirtualList thread, the system keyboard and kinetic scroll on a PSP.