Changelog
All notable changes to Drift are documented here. Patch releases are grouped under their parent minor version.
v0.26.0
- Network images:
Imagewidget loads fromhttp://andhttps://URLs with in-memory LRU and on-disk caching - Material 3 color schemes: HCT color space and seed-based color scheme generation for dynamic theming
- Platform channels: Method channels now thread
context.Contextthrough native calls for cancellation and deadline propagation - Permissions: Consolidated platform permission implementations behind a shared core with expanded test coverage
v0.25.x
v0.25.0
- Reactive primitives renamed:
Observable,DerivedObservable, andChangeNotifierrenamed toSignal,Derived, andNotifierfor clarity and consistency
v0.25.1
- Added
ListenableBuilderconvenience widget
v0.24.0
- App lifecycle callbacks:
OnInitandOnDisposecallbacks for app-level setup and teardown - New hooks:
UseSubscriptionfor stream subscriptions;UseLifecycleObserverfor observing app lifecycle events - Fix:
DidChangeDependenciesnow called on initial mount
v0.23.x
v0.23.0
- Android minimum SDK lowered: Minimum Android SDK reduced from API 31 to API 29
v0.23.1 to v0.23.4
- Added
DerivedObservableandGlobalKey - Added
LayoutIssueerror type for developer-friendly error screens - Added
AllowsOverscrollmethod toScrollPhysicsinterface OnEditingCompletecallback now receives the current text value- Fixed unbounded constraint propagation to non-flex children
v0.22.x
v0.22.0
- Vulkan rendering backend: Android rendering migrated from OpenGL/EGL to Vulkan (#34)
- Fade transition opacity: Navigation fade transitions now support opacity
- Performance: Replaced reflection-based dirty checks with typed slot comparison; map-based dirty element dedup in
BuildOwner; generics constrained tocomparable - Refactoring: Extracted
RenderObjectBaseandStateBaseto reduce widget boilerplate; hoisted shared render and element tree helpers; consolidated type conversion helpers; simplifiedCenteras stateless wrapper aroundAlign - Skia bridge: Moved shared bridge implementation to a dedicated compilation unit
- Fixes: Fixed navigation resource cleanup for routes and tab navigators; fixed transition disposal; fixed base64 decoding in storage handler; fixed SVG icon cache race on concurrent hit; fixed overlay rebuild after pending ops
v0.22.1
- CLI warns when its version mismatches the project's drift dependency
- Replaced JSON frame snapshots with packed binary encoding for better performance
- Batched display list replay into single CGO calls
v0.21.x
v0.21.0
- Platform view occlusion: Occlusion region support for native view clipping (#30)
- Navigation:
TabScaffoldrenamed toTabNavigator;RouteConfigandShellRouteunified intoScreenRoute
v0.21.1 to v0.21.3
- Added builder methods to
TextFieldandTextFormFieldwith expanded docs - Converted
SvgIconfrom custom element to stateless widget - Fixed occlusion emission for semi-transparent backgrounds
v0.20.x
v0.20.0
The v0.20.0 release focuses on API and developer experience improvements, reducing boilerplate across the framework.
- Simplified state API:
StatelessBaseandStatefulBaseeliminate widget boilerplate - Builder-pattern APIs:
Positionedand other widgets now use a fluent builder pattern - Removed helpers:
ColumnOf/RowOfconvenience helpers removed in favor of explicit children - Simplified widget setup: Progress indicators and Lottie animations use streamlined constructors
- Navigation: Added
SimpleBuilderhelper for routes that ignore settings - Theme accessors: Granular theme accessors replace verbose lookups
v0.20.1
- Optimized frame scheduling and Metal presentation sync
- Fixed bare code fences in generated documentation
v0.14.0
- Hot-reload watch mode:
drift runnow watches for changes and hot-reloads, with unified device management (#25) - Platform view pre-warming: Expensive native views are pre-warmed at startup to reduce first-frame latency
v0.13.0
- RichText widget: Styled span tree rendering for mixed-style text (#28)
- Lottie animations: Lottie support via Skia's Skottie module (#27)
- Android SurfaceControl: Replaced GLSurfaceView with SurfaceControl and split the frame pipeline (#26)
- Parallax transitions: New parallax route transition style
- Navigation: Pointer interaction is now blocked during route transitions
- Text wrapping:
TextandRichTextdefault to wrap-on, using an enum for wrap mode - Platform log bridging: Native log output from Android and iOS is bridged into Drift's logger
- Video controls: Added
HideControlsoption to toggle native transport controls
v0.12.x
v0.12.0
A large release covering on-demand rendering, platform view hit testing, and many new widgets.
- On-demand frame scheduling: Both iOS and Android replaced continuous vsync loops with on-demand rendering
- Platform view hit testing: Engine-side hit testing enables touch interception for platform views
- Dialog widgets:
ShowDialogandShowAlertDialoghelpers with modal dialog widgets - Eject command:
drift ejectexports platform projects for manual customization (#3) - URL launcher: New platform service for opening URLs
- Preferences service: Simple key-value storage for user preferences
- New widgets:
Divider,VerticalDivider,Spacer - TextAlign: Paragraph-level horizontal alignment for text
- Accessibility: Improved screen reader support for overlays, radio buttons, and dropdowns
- Fixes: Multiline text input defaults, safe area insets before first frame, outer box shadow rendering
v0.12.1
- Reduced frame scheduling latency and lock contention
- Fixed iOS transition jitter caused by CubicBezier solver instability
- Fixed scroll fling velocity smoothing and overscroll resistance
- Synchronized Metal presentation for rotation and platform views
v0.12.2
- Raised minimum iOS deployment target from iOS 14 to iOS 16
- Added
driftCLI generation of app icons and launch screens for iOS and Android - Fixed multiline text input scroll state on iOS geometry changes
v0.12.3 / v0.12.4
- Experimental SurfaceControl rendering pipeline for Android (reverted pending stability fixes)
v0.11.x
v0.11.0
- Media player: Audio and video playback support (#19)
- Platform services: Unified platform services behind consistent interfaces
- Widget catalog: New documentation with widget catalog and simplified guides
- Enum defaults: Enum zero values now match their default behavior
v0.11.1
- LayoutBuilder: New widget for constraint-aware child building
- Screen orientation: Configurable screen orientation support
- HTTP config:
allow_httpscaffold config for cleartext HTTP traffic - Fixed screen rotation handling on both iOS and Android
- Fixed missing Firebase configuration crash on Android
v0.10.x
v0.10.0
- Layer tree and display lists: Core rendering pipeline rewritten with display list recording, compositing, and repaint boundaries (#14)
- Frame tracing: Runtime diagnostics and frame tracing added to the debug server (#16)
- Init command:
drift initnow accepts a directory path instead of a bare project name (#17) - Platform view sync: Render thread synchronization with native geometry to prevent torn frames
- Performance:
batchSetGeometrymade async to eliminate flush stalls
v0.10.1
- Added code example image to the website homepage
- Fixed iOS simulator Intel arch naming (x64 to amd64)
v0.9.x
v0.9.0
- Declarative Router: Path parameters and route guards (#4)
- Overlay system: Modals and floating UI (#6)
- Bottom sheet: Navigation-integrated bottom sheet component (#9)
- Flexible widget:
FlexFitsupport for flex layouts - Reproducible builds:
SKIA_REVenvironment variable pins the Skia version - CI: Added GitHub Actions workflow for vet and tests
- Fixed hit testing through
AlignandCenterwidgets - Fixed alignment-positioned children sizing in
StackFitExpand
v0.9.1
- SVG icon caching and optimized invalidation
- Fixed bottom sheet drag handle region
- Windows NDK host tag detection
- Fixed Android back button frame loop wake
v0.9.2
- Fixed
gradlewpath construction on Windows
v0.8.0
- Breaking: Renamed
ChildWidget/ChildrenWidgetstoChild/Childrenacross all widgets
v0.7.x
v0.7.0
Rendering
- Skia paragraph API integration for text layout
- Native SVG rendering via Skia's SVG DOM (replacing oksvg)
DrawImageRectwith filter quality and image cachingClipPath,SaveLayer,ColorFilter, andImageFiltersupport- Extended paint properties for stroke styling and compositing
- Box shadows default to outer blur; inner shadow rendering fixed
- Shader warmup for reduced first-frame stutter
Widgets
Wrapwidget for flow layout with wrappingAlignwidget and border support forContainer- Gradient border support for
ContainerandDecoratedBox Offstagewidget to skip paint for hidden routesTextFormFieldtheme support and fluent API- Standardized widget construction API for v1.0.0
- Relative alignment coordinates for gradients and positioning
- Normalized 0 to 1 alpha values for the color API
Performance
- Child culling outside clip bounds during paint
- Skip layout for inactive
IndexedStackchildren - Skip child layout in
Offstagewhen hidden - Repaint boundaries on
ImageandSvgImage
Developer Tools
- Widget testing framework with
Text,Padding,Container, andButtontests - HTTP debug server for render tree inspection
- Widget-tree endpoint on the debug server
- Layout bounds debug overlay
Fixes
- Loose constraints for
Containerchildren with explicit dimensions - Unbounded constraint handling in
Align,Center, andFlex - iOS
CLLocationManagerdeadlock on dedicated thread - iOS display link restart after modal dismissal
v0.7.1 to v0.7.5
- Bundled
libc++_shared.soin Android release builds to prevent NDK ABI mismatch - NDK toolchain fallback for Apple Silicon Macs
- CLI version read from Go embedded build info
- Triple-buffering on Android to prevent flickering on physical devices
- Disabled outline atomics for older NDK compatibility
v0.6.0
- Platform views: Synchronized batch geometry updates, clip bounds support, and visibility culling during scroll
- TextInput migration:
TextInputmigrated to the platform view system; added nativeSwitch - TextFormField: New form-aware text field widget
- Progress indicators: Linear and circular progress indicators
- Date/time pickers: Native date and time picker widgets
- Diagnostics HUD: FPS counter and frame graph overlay
- Font weight fix: Normalized font weight to prevent thin text on Android
- Forms guide: New documentation guide covering validation, selection controls, and pickers
v0.5.0
- Documentation website: Launched Docusaurus-based docs at driftframework.dev
- Error boundaries: Panic recovery with error boundary widgets
- Slot-based reconciliation: Keyed reconciliation for the render tree
InheritedProvider<T>: Generic zero-boilerplate inherited providers- Permissions API: Unified permissions with blocking requests and context support
- Secure storage: Biometric-authenticated secure storage
- Custom Skia path:
DRIFT_SKIA_DIRenvironment variable for custom Skia library locations
v0.4.0
- Repaint boundaries: Optimized paint propagation with repaint boundary tracking
- Relayout boundaries: Optimized layout propagation with relayout boundary tracking
- Semantics dirty tracking: Accessibility semantics only rebuild when changed
- Deferred semantics flushes: Semantics updates deferred during animations
- Aspect-based dependency tracking: Granular inherited widget subscriptions
- SafeAreaProvider: Scoped rebuilds with batched safe area updates
- Box shadows and backdrop blur: Visual effects for decorated boxes
- Text shadows: Shadow support on text rendering
TextStyle.WithColor(),PushReplacementNamed- Reduced redundant keyboard hide calls and render cycles on Android
v0.3.0
drift fetch-skia: New CLI command with auto-fetch on build- Versioned cache: Cache directories scoped by version with configurable root
- Log filtering: PID-based Android log filtering and
os_logiOS filtering - Fixed iOS accessibility files missing from Xcode project template
- Fixed iOS scheduled notification time interval trigger
- Release script confirmation prompt before pushing tags
v0.2.0
- Accessibility: TalkBack and VoiceOver support with semantic tree
- Theming: Material Design 3 and Cupertino theme support with unified
AppThemeprovider - Gestures: Drag gesture recognizers with axis-locked drag and arena hold mechanism
- Positioned widget: Layout support within
Stack - Multi-touch: Unique pointer ID tracking for multi-touch support
- Navigation: Scroll position preserved across route transitions
- Keyboard navigation: Focus target set when keyboard navigates between text fields
- Performance: O(1) dirty object lookup using maps in the layout pipeline
- Fixed bundle ID segment sanitization, platform channel names, and Android native library loading
v0.1.0
Initial release of Drift with core framework functionality:
- Widget tree with stateless and stateful widgets
- Flex layout engine (Row, Column, Stack)
- Skia-based rendering via CGO
- Android (Kotlin) and iOS (Swift) embedders
- Navigation with named routes
- Text input and basic form widgets
- Scroll views
- Image and SVG rendering
- Platform channels for native communication
driftCLI for init, build, run, and clean