Skip to main content

Examples

Each example is available as a starter template via Create Foldkit App. Pick one that matches what you’re building, or start with Counter and work your way up. See Getting Started to get up and running.

ExampleDescription
CounterThe classic counter example. Increment, decrement, and reset a number.
CountersA dynamic list of Counter Submodels. Add and remove rows; each row is an independent Submodel embedded via h.submodel, with per-instance routing via a wrapper Message.
TodoA todo list with local storage persistence. Add, complete, and delete tasks.
StopwatchA stopwatch with start, stop, and reset. Demonstrates time-based subscriptions.
Crash ViewCustom crash fallback UI. Demonstrates crash.view and crash.report with a crash button and reload.
Slow WarningsInteractive lab for triggering slow update, view, patch, and Subscription dependency warnings with default thresholds and a visible warning log.
FormForm handling with field validation, error states, and async submission.
WeatherLook up weather by zip code. Demonstrates HTTP requests and loading states.
API CacheQuery caching without a query client. Demonstrates stale-while-revalidate, request deduplication, invalidation, and interval refetching.
ChartingLive dashboard for public Foldkit telemetry from GitHub and npm. Demonstrates HTTP Commands, async state, an ECharts Mount adapter, and a Subscription that turns chart clicks back into Messages.
RoutingClient-side routing with URL parameters, nested routes, rest segments, and navigation.
Route TransitionsLive log of every navigation, narrated by the Transition helpers. Entering the gallery loads the catalog once, flipping paintings refetches only when the id changes via stayed, and leaving the studio saves a draft with exitedRoute.
Interrupting CommandsSimulated file uploads driven by interruptible Commands. Cancel a single upload, cancel every upload in flight, or restart a cancelled one; each cancellation resolves through a keyed interrupt registry and an outcome-carrying result Message.
Query SyncFilterable dinosaur table where every control syncs to URL query parameters. Schema transforms enforce valid states. Invalid params gracefully fall back.
SnakeThe classic snake game. Keyboard input, game loop, and collision detection.
AuthAuthentication flow with Submodels, OutMessage, protected routes, and session management.
Shopping CartE-commerce app with product listing, cart management, and checkout flow.
Checkout MachineCheckout workflow powered by the experimental state machine module. Guards skip Shipping for digital orders, gate Place order behind a complete review, and parse promo codes into applied discounts.
Pixel ArtPixel art editor showcasing undo/redo with immutable snapshots, time-travel history, UI components (RadioGroup, Switch, Listbox, Dialog, Button), createLazy view optimization, Subscriptions, Commands with error handling, and localStorage persistence via Flags.
Job ApplicationMulti-step form with async email validation, cross-field date constraints, file uploads, and per-step error indicators.
WebSocket ChatManaged resources with WebSocket integration. Connection lifecycle, reconnection, and message streaming.
Managed Resource LayerLayer-backed ManagedResource that starts a ComputeEngine service from an Effect Layer, exposes it to Commands, and runs Layer finalizers when the Model turns it off.
KanbanDrag-and-drop kanban board with cross-column reordering, keyboard navigation, fractional indexing, and screen reader announcements.
MapInteractive MapLibre GL map with locations, search, and "find my location". Demonstrates OnMount integration with a third-party DOM library, plus a Subscription bridging map move and marker click events back to the Model.
Canvas ArtClick the canvas to spawn bouncing balls. Demonstrates declarative 2D rendering with Canvas.view, animation-frame Subscriptions, and pointer events translated to canvas-local coordinates.
Generative ArtMove the mouse to stir a Perlin-noise flow field, click to bloom prismatic particle bursts. Demonstrates Canvas.view with hundreds of evolving Path strokes per frame, Effect Random for spawning, and tunable simulation knobs wired through Messages.
Web ComponentsQR code designer wiring two real third-party web components into Foldkit with CustomElement.define. A hex color picker from vanilla-colorful emits color-changed CustomEvents that flow back as Messages, and the sl-qr-code element from Shoelace accepts typed properties. The picker and the QR never touch each other directly; they share state through the Model.
EmbeddingA Foldkit widget embedded in a plain TypeScript host page through Runtime.embed. The host seeds initial state with Flags, pushes a step value in through an inbound Port, mirrors the count the widget emits through an outbound Port, and mounts and unmounts the widget with dispose. All communication crosses one Schema-typed handle; the host never touches the Model.
UI ShowcaseInteractive showcase of every Foldkit UI component with styled examples, routing, and component state management.
Personal BlogBlog whose prose lives in markdown files. The @foldkit/markdown Vite plugin compiles each file into a typed document at build time, the app restyles the fold with per-node view overrides, and directive islands place a live Counter Submodel and a Note callout between paragraphs.
Typing Terminal
A production real-time multiplayer typing speed game. Full stack Effect app with RPC backend and Foldkit frontend.
Race your friends →