Runic Toolkit

Named application concepts cross one validated boundary.

The Application Bridge is the official frontend boundary for Runic Toolkit. It replaces generic ViewModel projection with explicit commands, receipts, snapshots, events, and public errors.

Contract pipeline

Effect Schema is the authority

Effect Schema
encoded wire values
JSON Schema + manifest
committed and fingerprinted
C# generator
reflection-free dispatch

Contract generation is deterministic and CI rejects stale artifacts. C# compilation reads only committed artifacts; it never starts Node or infers the public contract from ViewModels or CLR reflection.

Frontend runtime

One Effect owner

One ManagedRuntime owns the Application Bridge service, transport, scope, and event stream. UI components call a controller instead of scattering Effect execution through the render tree.

Layers

Same application interface

CsWebUiApplicationBridgeLive, MockApplicationBridge, and fault-injection Layers expose the same semantics. Renderer code remains independent of the active transport.

Host runtime

NativeAOT by construction

Generated DTOs, strict codecs, exhaustive dispatch, and typed event publishers avoid reflection. Sessions own bounded admission, revisions, sequence numbers, duplicate rejection, operations, and deterministic teardown.

Security

Privileged choices remain native

The frontend can request destination selection but cannot send a privileged path. The host returns an opaque selection ID plus display-safe metadata and validates that handle when work begins.

Official frontend path

Svelte 5, SvelteKit, Vite 8, and Vite DevTools

@runic-artifex/svelte projects one Application Bridge controller into Svelte 5 runes and context. @runic-artifex/sveltekit owns the static SPA adapter and native-host page options. @runic-artifex/vite-plugin-runic-toolkit owns Toolkit development metadata, bounded inspection, and HMR resources. The official @vitejs/devtools plugin remains the DevTools host and is excluded from production output.

These integrations intentionally support Svelte 5 only. Framework adapters do not duplicate transport, reconnect, or protocol state.

Wire vocabulary

Describe the application, not its implementation

InitializeApplicationSelectDestinationNavigateStartInstallationOperationProgressOperationCompletedOperationFailedCancelOperation

There is no generic setProperty, numeric member identifier, or ViewModel execute operation. Long-running work returns an operation ID promptly; progress and terminal outcomes arrive through the validated Effect Stream.

Install

Wait for the refreshed public candidates

Publication pending

Toolkit, Svelte, and Vite candidates are being rebuilt from their final source commits. Exact install commands will return here after the matching NuGet and npm artifacts pass clean downstream consumption and trusted-publisher setup.

Reference proof

The package-only Setup applications close the loop

The neutral and SvelteKit reference applications cover initialization, backend-authoritative navigation, opaque destination selection, installation receipts, progress, completion, failure, cancellation, recovery, development DevTools, deterministic production frontend output, NativeAOT, and real native-browser roundtrips.