Skip to content
This repository was archived by the owner on Feb 21, 2026. It is now read-only.

v0.10.0

Choose a tag to compare

@briannadoubt briannadoubt released this 07 Feb 03:17
· 156 commits to main since this release
1b4892f

Highlights

Massive release: 55 commits, 445 files changed, +89K/-36K lines. Raven now has a native Swift CLI, fiber-based incremental reconciliation, fully reactive ObservableObject support, and a working WASM runtime with hot reload.

Raven CLI

New native Swift CLI replacing the Python tooling:

  • raven build - Production WASM builds with optimization, stripping, and Brotli compression
  • raven dev - Hot reload dev server with SSE-based live reload on file changes (localhost:3000)
  • raven create - Project scaffolding
  • Automatic SwiftWasm toolchain detection (Swift SDK, carton, or SwiftWasm)
  • Bundle size analysis with detailed breakdown
  • Enhanced compiler error reporting

Fiber Reconciliation

React Fiber-inspired incremental rendering engine:

  • O(dirty) reconciliation - only re-renders changed subtrees, skips clean branches
  • State batching via requestAnimationFrame - multiple state changes coalesce into one render
  • PlatformRenderer abstraction decouples reconciliation from DOM operations
  • Stable path-based node IDs survive re-renders for handler persistence
  • Dual-tree architecture (current + work-in-progress)

Mirror-Free Rendering

Eliminated all Mirror reflection from the rendering pipeline (Mirror crashes in Swift WASM):

  • New _CoordinatorRenderable protocol - views render themselves using a _RenderContext
  • _ModifierRenderable convenience protocol for modifier views
  • All container views (VStack, HStack, ZStack, List, ScrollView) and interactive views (Button, TextField, Toggle, Slider, Picker) converted

ObservableObject Reactivity Fix

Fixed @StateObject and @ObservedObject not triggering re-renders:

  • objectWillChange subscriptions now call _RenderScheduler.current?.scheduleRender() directly
  • Bypasses the defunct Mirror-based setupStateCallbacks mechanism
  • @Published property changes properly propagate through the entire render pipeline

SwiftUI App Protocol

Full @main support with App/Scene protocol hierarchy:

  • Scene lifecycle tracking (active/inactive/background) via browser visibility/focus events
  • Automatic framework CSS injection on launch
  • JavaScriptEventLoop.installGlobalExecutor() wired automatically

WASM Runtime

  • WASI reactor ABI support (-mexec-model=reactor, --export-if-defined=main)
  • HTML bootstrap calls main() / __main_argc_argv(0,0) after _initialize()
  • Counter-based UUID generation (WASI random_get polyfill is broken)
  • Fixed event handler registration, lifecycle, and stale handler cleanup
  • Input focus preservation during re-renders

Dark Mode

  • 17 semantic CSS custom properties (--system-primary, --system-background, --system-accent, etc.)
  • @media (prefers-color-scheme: dark) overrides
  • Runtime matchMedia listener triggers re-render on OS theme change

New Components

  • AsyncImage - Async loading with placeholder/error states
  • Menu - Context menus with nested actions
  • DisclosureGroup - Expandable content with CSS animations
  • Grid - Flexible 2D grid layout
  • GroupBox - Labeled content container
  • ControlGroup - Grouped control styling
  • ScrollView - Horizontal/vertical/bidirectional scrolling
  • LazyVStack - Lazy loading with pinned headers/footers
  • Canvas - Immediate-mode drawing with GraphicsContext
  • 85 built-in symbols organized by category (shapes, arrows, media, status, navigation)

TodoApp Component Showcase

Full interactive demo app with 6 tabs: Todos, Controls, Display, Layout, Forms, Effects. Demonstrates CRUD operations, state binding, all major controls, and layout primitives running in the browser.

Swift 6 Strict Concurrency

  • Full compliance across all 279 source files and 89 test files
  • @MainActor isolation on all UI types
  • @Sendable closures for all event handlers
  • Builds clean on macOS, Linux (Ubuntu 22.04), and WASM

Cleanup

  • Removed 37K+ lines of orphaned phase docs, Python CLI, and loose example files
  • Removed dead Differ/CommitPhase code
  • Cleaned tracked .wasm binaries

Testing

878 passing tests across 89 test files covering fiber reconciliation, state reactivity, gestures, forms, accessibility, presentation, virtual scrolling, and list features.