You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 6dca708
Browse filesBrowse the repository at this point in the historyBrowse files
- Android cold-start DartWorker persistence: callbackHandle persisted to
SharedPreferences and restored when WorkManager restarts the process after
app kill. FlutterLoader initialized before lookupCallbackInformation() to
prevent UnsatisfiedLinkError on cold process start.
- iOS cold-start: callbackHandle persisted to UserDefaults and restored in
hasCallbackHandle/ensureEngineInitialized.
- Remote trigger direct commands (enqueue_task, enqueue_chain, enqueue_graph,
offline_queue_enqueue) executed without waking Flutter.
- HMAC SHA-256 signature verification for remote triggers.
- Global middleware API: HeaderMiddleware, LoggingMiddleware, RemoteConfigMiddleware.
- Task Graphs (DAG) on Android with DFS cycle detection.
- DevTools extension real-time event streaming via developer.postEvent.
- native_workmanager_gen code generation enhancements.
- Replace bare Log.d/e with NativeLogger in FlutterEngineManager and Initialize.
- Fix version strings: android/build.gradle and podspec 2.4.0 → 1.2.0.
- Remove stray doc/internal/test.kt.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+12-1Lines changed: 12 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
---
9
9
10
+
## [1.2.0] - 2026-04-17
11
+
12
+
### Added
13
+
-**Android cold-start `DartWorker` persistence**: `DartWorker` tasks now execute reliably after app kill. The `callbackHandle` is persisted to `SharedPreferences` (Android) and `UserDefaults` (iOS) during `initialize()` and automatically restored when WorkManager restarts the process. Requires host app to implement `Configuration.Provider` — see `doc/ANDROID_SETUP.md`.
14
+
-**Advanced Remote Trigger**: Support for direct commands in push payloads (`native_wm` key). Execute tasks, chains (`enqueue_chain`), graphs, and offline queues without waking Flutter. Both Android and iOS support executing task chains completely in the background.
15
+
-**HMAC Security**: Robust HMAC SHA-256 signature verification for remote triggers (supporting nested objects) to prevent unauthorized task execution.
16
+
-**Real-time Observability**: DevTools extension now supports real-time event streaming via `developer.postEvent`.
17
+
-**Global Middleware API**: Global interceptors for task configuration (Headers, RemoteConfig, Logging).
18
+
-**Code Generation Enhancements**: `native_workmanager_gen` now generates type-safe enqueue wrappers and automatic worker registries from `@WorkerCallback` annotations.
19
+
-**Task Graphs (DAG)**: Support for complex non-linear task dependencies on Android.
20
+
10
21
## [1.1.2] - 2026-04-14
11
22
12
23
### Added
@@ -865,7 +876,7 @@ Built on [kmpworkmanager v2.3.9](https://github.com/pablichjenkov/kmpworkmanager
865
876
866
877
---
867
878
868
-
**Latest Version:** 1.1.2
879
+
**Latest Version:** 1.2.0
869
880
**Status:** Production Ready - Stable release for all production apps
> **If you only do HTTP syncs and file ops, you probably don't need Dart workers at all.** Use the native workers directly — they're production-hardened and need zero engine overhead.
Dart workers boot a headless Flutter isolate (~50 MB, 1–2 s cold start). The isolate is cached for 5 minutes so back-to-back tasks pay the boot cost only once. For HTTP and file tasks, use native workers instead.
208
209
210
+
> **Android killed-app support** — When Android kills your app and WorkManager later fires a `DartWorker`, the process restarts without Flutter. The plugin automatically restores the `callbackHandle` from `SharedPreferences`, but your `Application` class must implement `Configuration.Provider` so WorkManager uses the plugin's `WorkerFactory`. One-time setup — see **[Android Setup Guide](doc/ANDROID_SETUP.md)**.
211
+
212
+
### Code generation for DartWorker
213
+
214
+
The companion [`native_workmanager_gen`](https://pub.dev/packages/native_workmanager_gen) package generates type-safe callback IDs and a worker registry from `@WorkerCallback` annotations, eliminating string-based registration and magic IDs:
0 commit comments