Releases: openwebf/webf
0.23.12
- Performance
- Rendering: comprehensive flex layout optimizations (caching invariants and per-item flex data, reduced allocations, and new fast paths).
- Inline formatting: speed up paragraph layout and trailing extras shrink passes; refactor paragraph building for less work.
- Style/layout: optimize parent render-style reads and avoid unnecessary element key updates.
- Fixed
- Android: fix build configuration issues.
- Tooling/tests: resolve lint issues and update integration/unit tests.
- Chore
- Dependencies: bump
vector_mathto^2.2.0.
- Dependencies: bump
0.23.11
- Features
- CSS Grid: enable grid layout by default and expand support for track sizing and placement, including
repeat()/minmax()/fit-content(), named lines, template areas, andgrid/grid-template/place-*
shorthands. - DOM/Bridge: complete the
IntersectionObserverAPI (includingIntersectionObserverEntry) and add v2
properties for richer visibility tracking. - Accessibility: improve semantics for overflow scrolling containers, add ListView a11y coverage, and support
menubar/menuitemroles.
- CSS Grid: enable grid layout by default and expand support for track sizing and placement, including
- Fixed
- Grid: fix auto-placement and sizing edge cases (reverse line ranges,
justify-content: space-*, auto-fit
track collapse, and placement alignment). - Platform/CI: fix iOS source builds and stabilize integration tests/snapshots.
- Accessibility/DOM: improve focusability handling and skip non-semantic container tags during traversal.
- Grid: fix auto-placement and sizing edge cases (reverse line ranges,
0.16.3 ~ 0.23.10
🔐 Licensing
GPL-3.0
- Updated all license headers
- Clear GPL-3.0 indication in package metadata
- Docs updated for licensing clarity
🎯 Major Feature Categories
- CSS & Layout Engine (0.23.x series)
- CSS Grid Support (experimental in 0.23.9)
- CSS Variables & Transitions - Complete overhaul with var-driven transitions
- CSS Performance - 84.7% reduction in recalc time, 87.8% reduction in flush time
- Modern CSS: aspect-ratio, clamp(), fit-content()
- Backgrounds & Gradients: Layered backgrounds, radial/conic gradients, repeating patterns
- Pseudo-elements: ::first-line, ::first-letter, ::before, ::after
- Canvas 2D API (0.23.10)
- ImageData APIs (getImageData/putImageData)
- Hit-testing (isPointInPath/isPointInStroke)
- Line dashes with dash offset
- Shadow offsets and global compositing
- ImageBitmap support
- DevTools & Debugging (0.22.x - 0.23.x)
- Chrome DevTools Protocol (CDP) integration
- Network panel with request/response inspection
- DOM manipulation tools
- CSS debugging APIs (CSS.createStyleSheet, CSS.forcePseudoState, CSS.resolveValues)
- Performance metrics display (FP/FCP/LCP)
- Performance Metrics (0.21.6 - 0.22.7)
- LCP (Largest Contentful Paint) tracking
- FCP (First Contentful Paint) support
- FP (First Paint) metrics
- Route-specific tracking
- LoadingState API with comprehensive lifecycle monitoring
- Networking & HTTP (0.22.8)
- Dio networking support with adapters
- CupertinoHttp for iOS/macOS
- Custom network options per controller
- HTTP cache improvements with SHA-256 hashing
- Accessibility (0.23.9)
- Semantics tree integration
- ARIA attributes support (aria-pressed)
- Multiple element types (, email inputs)
- Heading levels and semantic flags
- Text & Typography (0.23.2)
- RTL (right-to-left) support
- Text transforms (capitalize/uppercase/lowercase)
- Gradient text with background-clip: text
- W3C-compliant whitespace processing
- ex unit support
- Build System & Platforms
- Android: x86_64 emulator support, 16KB page size compatibility
- Windows: Full MSYS2 builds with CI/CD
- iOS: Direct source compilation, prebuilt framework support
- Platform Features: Android STL bundling options (static/dynamic)
- JavaScript Runtime (0.21.1)
- QuickJS Upgrade to 2025-04-26
- WeakRef & FinalizationRegistry
- Top-level await in modules
- Promise.withResolvers
- Array.prototype methods (with, toReversed, toSpliced, toSorted)
- Router & Navigation (0.21.x - 0.23.x)
- Hybrid router support with WebFSubView
- hybridHistory.buildContextStack() API
- Router lifecycle events (didPush/didPushNext)
- go_router Flutter package integration
📊 Performance Improvements
CSS Performance (0.23.4)
- recalcMs: 209ms → 32ms (~84.7% reduction)
- flushMs: 203ms → ~25ms (87.8% reduction)
- recalc calls: ~37% reduction (462 → 292)
- Targeted invalidation via id/class/attr indices
- Selector memoization and ancestry fast-path
Memory Management
- Idle scheduling for batch freeing of native objects
- HTTP cache SHA-256 hashing (replaced url.hashCode)
- QuickJS bytecode caching
- Global cache management API (WebF.clearAllCaches())
🔧 Architecture Changes
Widget Element System (0.21.0-beta.3)
- New WebFWidgetElementState pattern
- Custom Flutter widgets as HTML elements
- Two-way data binding support
- Method exposure to JavaScript
Controller Management (0.21.x)
- WebFControllerManager for lifecycle management
- Preload/prerender support with race condition handling
- Auto-managed WebF widgets
- Fallback mechanisms for concurrent requests
🐛 Major Bug Fixes Across Versions
Layout & Rendering
- Flexbox sizing corrections (multiple releases)
- Absolute positioning spec alignment
- Text wrapping in flex containers
- CJK font baseline alignment
- getBoundingClientRect accuracy improvements
Memory Leaks Fixed
- BoxFitImage controller references (0.21.4)
- Event listener options (0.22.0)
- Native binding objects (0.21.x)
- Canvas context finalization (0.21.0-beta.5+2)
- Script promise lifecycle (0.21.0-beta.5+2)
Cross-Platform Stability
- Windows malloc/free mismatch fixes (0.23.1)
- iOS compilation issues (multiple releases)
- Android NDK compatibility (0.22.3+1)
- Linux build dependencies (0.23.1)
🔄 Breaking Changes
0.21.5+1
- Removed javaScriptChannel parameter from WebFController constructor
- Removed navigationDelegate parameter (now set via setup() callback)
- WebFJavaScriptChannel now auto-created via controller.javascriptChannel
0.23.0-beta.1
- Minimum NDK version: r22 → r27
- Migrated from QuickJS-based AtomicString to Blink string implementation
- Removed legacy UI command implementations
📦 API Additions
WebFController APIs
- controller.printDOMTree() - Debugging helper
- controller.printRenderObjectTree() - Render tree inspection
- controller.javascriptChannel - Auto-created channel
- controller.loadingState - Comprehensive loading metrics
- Performance callbacks: onFP, onFCP, onLCP
Document APIs
- document.currentScript
- queueMicrotask (global scope)
- Element.insertAdjacentElement
- HTMLLinkElement.relList
Web APIs
- TextEncoder/TextDecoder (WHATWG Encoding Standard)
- FormData/File API
- Web Streams API (initial)
- URL API enhancements (username/password)
🧪 Experimental Features
Rust/Native API (0.16.3)
- Native plugin support with Rust bindings
- Example: webf/example/rust_builder/rust
CSS Grid (0.23.9)
- Explicit track parsing (px/%/fr)
- Auto-placement scaffolding
- grid-auto-flow support
- MVP layout across columns
📝 Documentation & Tooling
WebF CLI (0.22.0)
- Code generator for React/Vue bindings
- Type-safe Flutter/Dart ↔ JavaScript bridges
- NPM publishing with custom registries
- Auto-metadata sync from pubspec.yaml
Testing Infrastructure
- Integration test tools (0.23.0)
- Snapshot testing with visual regression
- Widget unit test utilities
- CDPanel basic tests (0.23.3)
Version Timeline
0.16.3 (Community) → 0.20.0 (Enterprise) →
0.21.x (Architecture) → 0.22.x (DevTools/Network) →
0.23.x (CSS Modernization) → 0.23.10 (Current)
Quick Stats:
- 14 beta releases in 0.21.x series
- 19 releases in 0.22.x series
- 11 releases in 0.23.x series (current)
- 500+ commits between versions
- Multiple Flutter version support: 3.13.x - 3.38.x
Recent Highlights (0.23.10)
The latest release focuses on Canvas 2D API completeness and licensing clarity:
- Canvas 2D: ImageData, hit-testing, line dashes, shadows, compositing
- ImageBitmap support in bridge
- Animation/prerendering fixes
- iOS logging improvements
0.16.3
This version supports Flutter 3.27.x, 3.24.x, 3.22.x, 3.19.x, 3.16.x, and 3.13.x.
Features
- Optimize Dart/C++ FFI performance in multiple thread mode. #654
- Change viewport css property value automatically when app metrics changed. #655
- Optimize listview performance. #669
- Full support of CanvasContext2D.Path2D. #684
- Add WebFChildNodeSize widget. #690
- Add console.inspect() API for inspecting JavaScript Objects. #691
- Using std::atomic value types for disposed checks of NativeBindingObject. #699
- Upgrade intl deps to 0.19.0. #701
Bug Fixed
- Fix dart type error when attach flex layout underneath of Flutter ListView. #650
- Fix crash when clear ui commands without commands. #651
- Fix onClick events respond very slowly on React 18. #665
- Fix negative percentage translate in positioned elements. #680
- Fix ios simulator[arm64] build. #681
- Fix globalToLocal coordinate conversion related to position fixed layout. #686
- Rework inline cache handling. #688
- Fix crash when add property maybe failed on build arguments. #689
Experimental Features
Rust/Native API
Have a Try
https://github.com/openwebf/webf/tree/main/webf/example/rust_builder/rust
Provides support for native plugin APIs and offers corresponding Rust bindings.
0.16.2
0.16.1
0.16.1
This version supports Flutter 3.22.x, 3.19.x, 3.16.x, and 3.13.x.
Features
Bug Fixed
0.16.0
This version supports Flutter 3.19.x, 3.16.x, and 3.13.x.
A version compatible with Flutter 3.10.x landed in 0.15.2.
A version compatible with Flutter 3.7.x landed in 0.14.4.
Architecture Upgrade
The JavaScript Runtime has now migrated to a dedicated thread and is enabled by default in this version.
For users who want to keep the single-threading mode the same as in the previous version, use the following configuration:
WebFController(
context,
runningThread: FlutterUIThread(),
);Big News
- Added PreRendering and Preload loading modes, which can save up to 90% of loading time.
Click here for more details.
Features
- Support preloadedBundles in WebF. #500
- Add pre-rendering and persistent rendering modes. #501
- Optimize the evaluate times at the first time. #503
- Add MutationObserver API support. #508
- Add Dedicated Threading support. #512
- Optimize raster performance on Animated images. #513
- Turn off quickjs GC at page loading phase. #515
- Optimization matrix algorithm. #516
- Support override default contentType for WebFBundle. #534
- Support dns-prefetch. #535
- Add more SVG tags. #543
- Optimize MutationObserver performance. #545
- QuickJS add property inline cache. #546
- Optimize paint and add profile records. #547
- Pause the activity of webf when app visibility changed. #549
- Optimize bytecode cache load speed and fix http cache. #552
- Add Element.parentElement support. #555
- Add repaintBoundary for animated images when using css background-images #557
- Add support for hash router #572
- Add support for object event listener. #575
- Optimize performance for recalculate styles #579
Bug Fixed
- Fix class selector not match on html element. #490
- Fix concurrent modification during iteration. #491
- Fix JavaScript stack overflow error when print Proxy object. #493
- Fix borderXxxRadius transition. #495
- Avoid Hive.init cause conflicts with box paths. #504
- Fix assertion error when change display in input element. #505
- Fix lenght variable issue. #510
- Fix transform value not updated in percentage when box size changed. #514
- Fix crashed due to trigger touch events to inaccessible dom elements. #517
- Fix crash due to init touchEvent from JS. #518
- Fix event.target still can be pointed by event after finalized by JavaScript GC. #519
- Fix flex-grow not work. #524
- Fix bg_image_update not update error. #526
- Fix text calculate constraints error. #527
- Fix min precision case some error and waste cpu. #528
- Fix sliver layout child boundingClientRect offset error. #530
- Fix build on ArchLinux. #536
- Fix devtool select img element. #538
- Fix ui command exec order in dedicated thread mode. #540
- Fix img gif work error. #541
- Fix request flutter to update frame when sync commands to dart. #548
- Fix textarea elements in ios/android can not auto unfocus. #551
- Fix crash when binding object had been released by GC. #553
- Fix windows platform crash with 0.16.0. #558
- Fix page load failed when using async attributes in
<script />elements. #561 - Fix dart element memory leaks when js gc collected. #563
- Fix crash on flutter engine dispose. #566
- Fix background-image disappear with multiple image links. #574
- Fix js log does not show in terrminal and devtools. #584
- Fix mem leaks caused by event dispatch. #585
- Fix input when resume apps #589
- Fix memory leak caused by img element #590
- Fix input elements or widget elements when preload or prerendering complete. #595
- Fix animation time resume. #597
- Fix invalid xcframework for ios release. #600
0.15.1
This version will support Flutter 3.10.x
Features
- Optimize location API for better performance results. #420
- Optimize the webf_bridge and quickjs binary size. #414
- Support CSS initial length value. #421
- Optimize Element.children() and Document.all() performance. #424
- Support element for svg. #475
- Add WebFController.onTitleChanged API. #479
Bug Fixed
- Fix percentage width and height not working under inline block box. #430
- Fix Node.insertBefore with SVGElement error. #431
- Fix cookie delete file error when it's not available. #429
- Fix use css vars with initial. 1da2e58
0.15.0-beta.3 - Fix toggle position: fixed on bodyElement with other fixed elements. #416
- Fix css nth-child not work. #417
- Fix Node.childNodes didn't update when nodes changed. #419
- Fix loading fonts cause assertion when remove or attach RenderObjects. #425
- fix crash when reload pages. #476
- Fix memory leaks. #487
0.14.3
0.14.3
This version will support Flutter 3.3.x ~ 3.7.x.
Features
- Optimize location API for better performance results. #420
- Optimize the webf_bridge and quickjs binary size. #414
- Support CSS initial length value. #421
- Optimize Element.children() and Document.all() performance. #424
- Support element for svg. #475
- Add WebFController.onTitleChanged API. #479
Bug Fixed
- Fix percentage width and height not working under inline block box. #430
- Fix Node.insertBefore with SVGElement error. #431
- Fix cookie delete file error when it's not available. #429
- Fix use css vars with initial. 1da2e58
0.15.0-beta.3 - Fix toggle position: fixed on bodyElement with other fixed elements. #416
- Fix css nth-child not work. #417
- Fix Node.childNodes didn't update when nodes changed. #419
- Fix loading fonts cause assertion when remove or attach RenderObjects. #425
- fix crash when reload pages. #476
- Fix memory leaks. #487
0.15.0
This version will support Flutter 3.10.x
Break Changes
- Remove
navigator.connectionAPI. #411
Features
- Upgrade Flutter support to 3.10.x. #345
- Optimize location API for better performance results. #420
- Optimize the size of webf_bridge.xcframework and quickjs.xcframework. #414
- Support CSS initial length value. #421
- Optimize Element.children() and Document.all() performance. #424
- Support base64 format font data in
@font-facesrc. #399 - Support Element.dir API. #418
- Add
<circle />and<ellipse>tags for SVG. #423 - Support share customized JS properties in event object. #427
- Support
window.pageXOffsetandwindow.pageYOffsetAPI. https://github.com/openwebf/webf/pull/428/files - Optimize layout/paint performance when block box size is fixed. #450
- Optimize performance when update Element.className. #452
- Support CanvasRenderingContext2D.createPattern() API. #464
Bug Fixed
- Fix use css vars with initial. #421
- Fix toggle position: fixed on bodyElement with other fixed elements. #416
- Fss nth-child not work. #417
- Fix Node.childNodes didn't update when nodes changed. #419
- Fix loading fonts cause assertion when remove or attach RenderObjects. #425
- Fix percentage width and height not working under inline block box. #430
- Fix Node.insertBefore with SVGElement error. #431
- Fix cookie delete file error when it's not available. #429
- Fix read ANDROID_SDK_HOME before implying to platform defaults. #422
- Fix cookie delete file error. #429
- Fix percentage width and height not working under inline block box. #430
- Fix Node.insertBefore with SVGElement error. #431
- Fix DevTool's network panel not working. #435
- Losen intl dependency constraint. #439
- Fix built-in methods in the event object cannot be overridden. #443
- Fix crash when touching pseduo elements. #445
- Fix event not responding when multiple flutter engine created. #451
- Fix Element.style.cssText API not works. #455
- Fix use-of-free crash of shared string property in event object. #458
- Fix dynamic build items in WidgetElement. #461
- Fix CSS content property have sequences of unicode chars. #463
- Fix crash when create unsupported svg element with style. #465