Repository navigation
v0.10.0
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 compressionraven 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
_CoordinatorRenderableprotocol - views render themselves using a_RenderContext _ModifierRenderableconvenience 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:
objectWillChangesubscriptions now call_RenderScheduler.current?.scheduleRender()directly- Bypasses the defunct Mirror-based
setupStateCallbacksmechanism @Publishedproperty 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_getpolyfill 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
matchMedialistener 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
@MainActorisolation on all UI types@Sendableclosures 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.