NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #4425 most downloaded on pub.dev
Alien Signals is a reactive state management library that brings the power of signals to Dart and Flutter applications.
Last release 1 months ago
30 Aug 2026
Release timing varies
gaps range from 8 days to 3 months
Some releases are documented
notes for 22 of 47 stable releases
1 version withdrawn
withdrawn after publishing
2 years old
66 releases · first in 2024
One column per month.
Cache errors thrown by computed getters until a dependency changes, preserving the original error and stack trace instead of returning null or a stale
null or a stale value on later reads. (#42)Revert the extra Dart-only lifecycle cleanup and tracking guards added in 2.3.0, so setup failure and stopped-subscriber edge cases follow upstream al
alien-signals semantics and downstream code can choose its own cleanupSync upstream alien-signals v3.2.1
Sync upstream alien-signalsv3.2.1
effect() can return a cleanup callback; effectScope nesting andbuild: bump minimum Dart SDK to ^3.8.0 and refresh dev dependency constraints
^3.8.0 and refresh dev dependency constraintsbench/ and refresh benchmark setupfix: clear queued effects after a failed flush to avoid running skipped effects later
Sync upstream alien-signals<sup>v3.1.2</sup>
fix: remove unsupported @pragma('dart2js:tryInline') on top-level fields for dart2js
@pragma('dart2js:tryInline') on top-level fields for dart2jspreset: Rename SignalNode.update/ComputedNode.update to didUpdate
SignalNode.update/ComputedNode.update to didUpdateComputedNode.value to currentValuepref: replace bitwise flags with inline comments for clarity
Removed legacy code and deprecated patterns
Status: Released (2025-11-26)
🚀 Major Architecture Refactoring
Version 2.0 represents a complete architectural overhaul of alien_signals, introducing a cleaner separation between the user-facing API and the reactive engine implementation. This release improves performance, maintainability, and developer experience while maintaining core functionality.
// Before (1.x): signal(value) for both read and write
final count = signal(0);
count(5); // Set value
count(5, true); // Set with nulls parameter
final val = count(); // Get value
// After (2.0): Separate call() for read and set() for write
final count = signal(0);
count.set(5); // Set value - clearer intent
final val = count(); // Get value - unchangednulls parameter - no longer needed with explicit set() methodset() method returns void instead of the value() instead of .dispose() method
// Before: effect.dispose()
// After: effect()surface.dart (Signal, WritableSignal, Computed, Effect, EffectScope, signal, computed, effect, effectScope)getBatchDepth(), getActiveSub(), setActiveSub() now require explicit import from preset.dartReactiveSystem refactored from concrete implementation to abstract class
// Before: const ReactiveSystem system = PresetReactiveSystem();
// After: abstract class ReactiveSystem { ... }ReactiveSystem is now an abstract base class for custom implementationsReactiveSystemtrigger() function for imperatively initiating reactive updates
trigger(() {
// Signal accesses here will propagate to subscribers
someSignal();
});surface.dart: High-level user-facing API with clean interfacespreset.dart: Reactive engine with node implementations (SignalNode, ComputedNode, EffectNode)system.dart: Core algorithms and data structures (Link, ReactiveNode, ReactiveFlags)_SignalImpl, _ComputedImpl, _EffectImpl, _EffectScopeImpl)@pragma annotations on hot paths for better performanceSee MIGRATION.md for detailed migration instructions from 1.x.
Key migration points:
signal(value) with signal.set(value) for write operations.dispose() with () for effects and scopestrigger() function for one-time reactive operationsThanks to all contributors and users who provided feedback that shaped this major release.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Restrict preset developer exports to public API
Nothing published for this version
Change signal interface to use call() instead of .value getter/setter
call() instead of .value getter/setterAfter months of development and multiple beta releases, we're excited to announce the first stable version of Alien Signals for Dart! This release bri
Status: Released (2025-01-15)
🎉 First Stable Release!
After months of development and multiple beta releases, we're excited to announce the first stable version of Alien Signals for Dart! This release brings a mature, high-performance reactive signal library to the Dart ecosystem.
signal(), computed(), and effect() functionseffectScope()startBatch() and endBatch()import 'package:alien_signals/alien_signals.dart';
void main() {
// Create a signal
final count = signal(0);
// Create a computed value
final doubled = computed((_) => count.value * 2);
// Create an effect
effect(() {
print('Count: ${count.value}, Doubled: ${doubled.value}');
});
// Update the signal
count.value++; // Prints: Count: 1, Doubled: 2
}
If you're upgrading from a beta version, please see our Migration Guide for detailed instructions.
Special thanks to the StackBlitz team for creating the original alien-signals library and to our community for feedback during the beta period.
FIX: remove assertion in effectOper
Status: Released(2025-09-30)
FEATURE: Add preset_developer.dart, the basics of exporting Preset
Status: Released(2025-09-30)
preset_developer.dart, the basics of exporting PresetHave good auto-imports, avoid auto-importing src
Status: Released(2025-09-29)
Effect/EffectScope's call() is renamed to dispose()BREAKING CHANGE: sync alien-signal 3.0.0 version
Sync upstream alien-signals<sup>v3.0.0</sup>
Status: Released(2025-09-29)
3.0.0 versionlink add a third version count paramstartTracking and endTracking APIsystem.dart entry point exportbatchDepth to getBatchDepth()getCurrentSub/setCurrentSub to getActiveSub/setActiveSubgetCurrentScope/getCurrentScope, using getActiveScope/setActiveScopecall(), using .value propertySignal,WritableSignal,Computed,Effect abstract interfaceNothing published for this version
perf(system): Move dirty flag declaration outside loop
> Sync upstream alien-signals v2.0.7
Sync upstream alien-signals<sup>v2.0.7</sup>
fix: Introduce per-cycle version to dedupe dependency links
fix: Remove non-contiguous dep check
BREAKING CHANGE: Remove pauseTracking and resumeTracking
pauseTracking and resumeTrackingNothing published for this version
Nothing published for this version
Nothing published for this version
perf: Replace magic number with bitwise operation for clarity
perf: Optimize computed values by using final result value in bit marks calculation (reduces unnecessary computations)
Nothing published for this version
pref: Add prefer-inline pragmas to core reactive methods. (Thx #17 at @Kypsis)
Nothing published for this version
refactor: simplifying unlink sub in effect cleanup
NOTE: Sync upstream v2.0.4 version.
Sync with upstream alien-signal v2.0.1
alien-signal v2.0.1signal() function for creating reactive statecomputed() function for derived stateeffect() function for side effectseffectScope() for managing groups of effectsstartBatch() and endBatch()pauseTracking() and resumeTracking()Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →