PackageTrack
Sign in Get early access

alien_signals

Alien Signals is a reactive state management library that brings the power of signals to Dart and Flutter applications.

2.3.1 medz/alien-signals-dart

What this package is like to depend on

Last release 3 months ago

25 May 2026

Release timing varies

gaps range from 8 days to 3 months

Some releases are documented

notes for 21 of 46 stable releases

1 version withdrawn

withdrawn after publishing

2 years old

65 releases · first in 2024

26 releases in the last 12 months

see the full history below

Release timeline

65 releases · Dec 2024 to May 2026
2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 65
  1. 2.3.1 25 May 2026
    Release notes

    Behavior

    • 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
      alien-signals semantics and downstream code can choose its own cleanup
      policy.
    Open source →
    Release notes

    Behavior

    • 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 alien-signals semantics and downstream code can choose its own cleanup policy.
    Open source →
  2. 2.3.0 15 May 2026
    Release notes

    Sync upstream alien-signalsv3.2.1

    New Features

    • effect() can return a cleanup callback; effectScope nesting and
      propagation are improved.

    Bug Fixes

    • Corrected disposal and cleanup ordering for effects and computeds.
    • Preserved subscriptions across re-runs; fixed propagation for writes inside
      effects.
    • Made updates resilient to dependency-graph mutations; tightened cleanup
      timing.

    Documentation

    • API and guide updated to document generic effect callbacks and cleanup
      behavior.

    Tests

    • Added comprehensive tests covering cleanup, teardown, scopes, and mutation
      cases.
    Open source →
    Release notes

    Sync upstream alien-signals<sup>v3.2.1</sup>

    New Features

    • effect() can return a cleanup callback; effectScope nesting and propagation are improved.

    Bug Fixes

    • Corrected disposal and cleanup ordering for effects and computeds.
    • Preserved subscriptions across re-runs; fixed propagation for writes inside effects.
    • Made updates resilient to dependency-graph mutations; tightened cleanup timing.

    Documentation

    • API and guide updated to document generic effect callbacks and cleanup behavior.

    Tests

    • Added comprehensive tests covering cleanup, teardown, scopes, and mutation cases.
    Open source →
  3. 2.2.0 31 Mar 2026
    Release notes

    Changes

    • build: bump minimum Dart SDK to ^3.8.0 and refresh dev dependency constraints
    • chore: refine pub.dev topics metadata
    • bench: move propagate benchmark into bench/ and refresh benchmark setup
    • ci: narrow the Dart test matrix
    • docs: update related projects in the README
    • style: improve internal condition readability and reformat sources
    Open source →
    Release notes
    • build: bump minimum Dart SDK to ^3.8.0 and refresh dev dependency constraints
    • chore: refine pub.dev topics metadata
    • bench: move propagate benchmark into bench/ and refresh benchmark setup
    • ci: narrow the Dart test matrix
    • docs: update related projects in the README
    • style: improve internal condition readability and reformat sources
    Open source →
  4. 2.1.2 29 Dec 2025
    Release notes

    Changes

    • fix: clear queued effects after a failed flush to avoid running skipped effects later
    • test: add regression test for failed flush queue cleanup
    Open source →
    Release notes

    Sync upstream alien-signals<sup>v3.1.2</sup>

    • fix: clear queued effects after a failed flush to avoid running skipped effects later
    • test: add regression test for failed flush queue cleanup
    Open source →
  5. 2.1.1 21 Dec 2025
    Release notes

    2.1.1

    • fix: remove unsupported @pragma('dart2js:tryInline') on top-level fields for dart2js
    • test: add dart2js compile regression test
    Open source →
    Release notes
    • fix: remove unsupported @pragma('dart2js:tryInline') on top-level fields for dart2js
    • test: add dart2js compile regression test
    Open source →
  6. 2.1.0 07 Dec 2025
    Release notes
    • preset: Rename SignalNode.update/ComputedNode.update to didUpdate
    • preset: Rename ComputedNode.value to currentValue
    Open source →
  7. 2.0.1 26 Nov 2025
    Release notes
    • pref: replace bitwise flags with inline comments for clarity
    • example: add preset playground example
    Open source →
  8. 2.0.0 26 Nov 2025
    Release notes

    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.

    💥 Breaking Changes

    WritableSignal API Changes

    • BREAKING: WritableSignal now uses separate methods for reading and writing
      // 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 - unchanged
      • Removed nulls parameter - no longer needed with explicit set() method
      • set() method returns void instead of the value
      • Clearer separation between read and write operations

    API Surface Restructuring

    • BREAKING: Effect and EffectScope disposal now uses callable syntax () instead of .dispose() method
      // Before: effect.dispose()
      // After:   effect()
    • BREAKING: Library exports reorganized into layers:
      • Main exports now come from surface.dart (Signal, WritableSignal, Computed, Effect, EffectScope, signal, computed, effect, effectScope)
      • Batch controls remain in preset exports (startBatch, endBatch, trigger)
    • BREAKING: Low-level APIs no longer exported by default:
      • getBatchDepth(), getActiveSub(), setActiveSub() now require explicit import from preset.dart
      • Most applications should not need these APIs

    Reactive System Changes

    • BREAKING: ReactiveSystem 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 implementations
      • The preset system internally extends this abstract class
      • Enables advanced users to create custom reactive systems by extending ReactiveSystem
      • Most users won't interact with this directly as it's handled internally by the library

    ✨ New Features

    Manual Trigger Function

    • NEW: Added trigger() function for imperatively initiating reactive updates
      trigger(() {
        // Signal accesses here will propagate to subscribers
        someSignal();
      });
      • Useful for testing, forced updates, and non-reactive code integration
      • Creates temporary reactive context without persistent effects

    🏗️ Architecture Improvements

    Layer Separation

    • Complete separation into three distinct layers:
      • surface.dart: High-level user-facing API with clean interfaces
      • preset.dart: Reactive engine with node implementations (SignalNode, ComputedNode, EffectNode)
      • system.dart: Core algorithms and data structures (Link, ReactiveNode, ReactiveFlags)
    • Better encapsulation with private implementation classes (_SignalImpl, _ComputedImpl, _EffectImpl, _EffectScopeImpl)
    • Improved inheritance hierarchy with surface implementations properly extending preset nodes

    ⚡ Performance Enhancements

    • Aggressive inlining: Strategic @pragma annotations on hot paths for better performance
    • Optimized dependency tracking: Improved cycle management and link traversal
    • Reduced allocations: More efficient memory usage in the reactive graph
    • Better cycle detection: Enhanced algorithm for circular dependency detection

    📝 Documentation

    • Comprehensive API documentation: Added detailed doc comments for all public APIs
    • Migration guide: Complete guide for upgrading from 1.x to 2.0
    • Code examples: Updated all examples to use new API patterns

    🔧 Internal Changes

    • Removed legacy code and deprecated patterns
    • Improved type safety and null handling
    • Cleaner separation of concerns between modules
    • More maintainable codebase structure
    • Fix trigger dependency cleanup to prevent stale notifications

    📦 Migration

    See MIGRATION.md for detailed migration instructions from 1.x.

    Key migration points:

    1. Replace signal(value) with signal.set(value) for write operations
    2. Replace .dispose() with () for effects and scopes
    3. Add explicit imports for low-level APIs if needed
    4. Consider using new trigger() function for one-time reactive operations

    🙏 Acknowledgments

    Thanks to all contributors and users who provided feedback that shaped this major release.

    Open source →
    Release notes

    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.

    💥 Breaking Changes

    WritableSignal API Changes

    • BREAKING: WritableSignal now uses separate methods for reading and writing
      // 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 - unchanged
      
      • Removed nulls parameter - no longer needed with explicit set() method
      • set() method returns void instead of the value
      • Clearer separation between read and write operations

    API Surface Restructuring

    • BREAKING: Effect and EffectScope disposal now uses callable syntax () instead of .dispose() method
      // Before: effect.dispose()
      // After:   effect()
      
    • BREAKING: Library exports reorganized into layers:
      • Main exports now come from surface.dart (Signal, WritableSignal, Computed, Effect, EffectScope, signal, computed, effect, effectScope)
      • Batch controls remain in preset exports (startBatch, endBatch, trigger)
    • BREAKING: Low-level APIs no longer exported by default:
      • getBatchDepth(), getActiveSub(), setActiveSub() now require explicit import from preset.dart
      • Most applications should not need these APIs

    Reactive System Changes

    • BREAKING: ReactiveSystem 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 implementations
      • The preset system internally extends this abstract class
      • Enables advanced users to create custom reactive systems by extending ReactiveSystem
      • Most users won't interact with this directly as it's handled internally by the library

    ✨ New Features

    Manual Trigger Function

    • NEW: Added trigger() function for imperatively initiating reactive updates
      trigger(() {
        // Signal accesses here will propagate to subscribers
        someSignal();
      });
      
      • Useful for testing, forced updates, and non-reactive code integration
      • Creates temporary reactive context without persistent effects

    🏗️ Architecture Improvements

    Layer Separation

    • Complete separation into three distinct layers:
      • surface.dart: High-level user-facing API with clean interfaces
      • preset.dart: Reactive engine with node implementations (SignalNode, ComputedNode, EffectNode)
      • system.dart: Core algorithms and data structures (Link, ReactiveNode, ReactiveFlags)
    • Better encapsulation with private implementation classes (_SignalImpl, _ComputedImpl, _EffectImpl, _EffectScopeImpl)
    • Improved inheritance hierarchy with surface implementations properly extending preset nodes

    ⚡ Performance Enhancements

    • Aggressive inlining: Strategic @pragma annotations on hot paths for better performance
    • Optimized dependency tracking: Improved cycle management and link traversal
    • Reduced allocations: More efficient memory usage in the reactive graph
    • Better cycle detection: Enhanced algorithm for circular dependency detection

    📝 Documentation

    • Comprehensive API documentation: Added detailed doc comments for all public APIs
    • Migration guide: Complete guide for upgrading from 1.x to 2.0
    • Code examples: Updated all examples to use new API patterns

    🔧 Internal Changes

    • Removed legacy code and deprecated patterns
    • Improved type safety and null handling
    • Cleaner separation of concerns between modules
    • More maintainable codebase structure
    • Fix trigger dependency cleanup to prevent stale notifications

    📦 Migration

    See MIGRATION.md for detailed migration instructions from 1.x.

    Key migration points:

    1. Replace signal(value) with signal.set(value) for write operations
    2. Replace .dispose() with () for effects and scopes
    3. Add explicit imports for low-level APIs if needed
    4. Consider using new trigger() function for one-time reactive operations

    🙏 Acknowledgments

    Thanks to all contributors and users who provided feedback that shaped this major release.


    Open source →
  9. 2.0.0-rc.5 26 Nov 2025 pre-release

    Nothing published for this version

  10. 2.0.0-rc.4 13 Nov 2025 pre-release

    Nothing published for this version

  11. 2.0.0-rc.3 12 Nov 2025 pre-release

    Nothing published for this version

  12. 2.0.0-rc.2 10 Nov 2025 pre-release

    Nothing published for this version

  13. 2.0.0-rc.1 10 Nov 2025 pre-release

    Nothing published for this version

  14. 2.0.0-beta.3 09 Nov 2025 pre-release

    Nothing published for this version

  15. 2.0.0-beta.2 09 Nov 2025 pre-release

    Nothing published for this version

  16. 2.0.0-beta.1 09 Nov 2025 pre-release

    Nothing published for this version

  17. 1.0.3 08 Oct 2025
    Release notes
    • Restrict preset developer exports to public API
    • Rename update method to shouldUpdated
    Open source →
  18. 1.0.2 05 Oct 2025 withdrawn

    Nothing published for this version

  19. 1.0.1 30 Sep 2025
    Release notes
    • Change signal interface to use call() instead of .value getter/setter
    Open source →
  20. 1.0.0 30 Sep 2025
    Release notes

    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.

    🚀 What's New in 1.0.0

    • Stable API: All APIs are now stable and ready for production use
    • Better Dart Integration: Redesigned API that feels natural in Dart
    • Enhanced Performance: Optimized reactive system with cycle-based dependency tracking
    • Comprehensive Documentation: Complete API documentation and examples
    • Production Ready: Battle-tested through beta releases and community feedback

    📋 Key Features

    • Lightweight & Fast: The lightest signal library for Dart with excellent performance
    • Simple API: Easy-to-use signal(), computed(), and effect() functions
    • TypeScript Origins: Based on the excellent stackblitz/alien-signals
    • Effect Scopes: Manage groups of effects with effectScope()
    • Batch Updates: Control reactivity with startBatch() and endBatch()

    🎯 Getting Started

    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
    }
    

    🔧 Migration from Beta

    If you're upgrading from a beta version, please see our Migration Guide for detailed instructions.

    🙏 Acknowledgments

    Special thanks to the StackBlitz team for creating the original alien-signals library and to our community for feedback during the beta period.


    Open source →
  21. 1.0.0-beta.4 30 Sep 2025 pre-release
    Release notes

    Status: Released(2025-09-30)

    • FIX: remove assertion in effectOper
    Open source →
  22. 1.0.0-beta.3 29 Sep 2025 pre-release
    Release notes

    Status: Released(2025-09-30)

    • FEATURE: Add preset_developer.dart, the basics of exporting Preset
    Open source →
  23. 1.0.0-beta.2 29 Sep 2025 pre-release
    Release notes

    Status: Released(2025-09-29)

    • Have good auto-imports, avoid auto-importing src
    • Effect/EffectScope's call() is renamed to dispose()
    Open source →
  24. 1.0.0-beta.1 29 Sep 2025 pre-release
    Release notes

    Sync upstream alien-signals<sup>v3.0.0</sup>

    Status: Released(2025-09-29)

    System

    • BREAKING CHANGE: sync alien-signal 3.0.0 version
    • BREAKING CHANGE: link add a third version count param
    • BREAKING CHANGE: remove startTracking and endTracking API

    Preset

    • BREAKING CHANGE: remove deprecated system.dart entry point export
    • BREAKING CHANGE: migrate batchDepth to getBatchDepth()
    • BREAKING CHANGE: rename getCurrentSub/setCurrentSub to getActiveSub/setActiveSub
    • BREAKING CHANGE: remove getCurrentScope/getCurrentScope, using getActiveScope/setActiveScope
    • BREAKING CHANGE: remove signal/computed call(), using .value property
    • FEATURE: add Signal,WritableSignal,Computed,Effect abstract interface
    Open source →
  25. 1.0.0-bate.1 29 Sep 2025 pre-release

    Nothing published for this version

  26. 0.5.4 24 Sep 2025
    Release notes
    • perf(system): Move dirty flag declaration outside loop
    Open source →
  27. 0.5.3 19 Aug 2025
    Release notes

    Sync upstream alien-signals<sup>v2.0.7</sup>

    • system: Optimize isValidLink implementation
    • system: Optimize reactive system dirty flag propagation loop
    • system: Refactor reactive system dependency traversal logic
    • system: Use explicit nullable types for Link variables
    • system: Optimize reactive system flag checking logic
    • system: Simplify recursive dependency check
    Open source →
  28. 0.5.2 02 Aug 2025
    Release notes
    • fix: Introduce per-cycle version to dedupe dependency links
    Open source →
  29. 0.5.1 23 Jul 2025
    Release notes
    • fix: Remove non-contiguous dep check
    Open source →
  30. 0.5.0 14 Jul 2025
    Release notes
    • pref: refactor: queue effects in linked effects list
    • pref: Add pragma annotations for inlining to startTracking
    • BREAKING CHANGE: Remove pauseTracking and resumeTracking
    • BREAKING CHANGE: Remove ReactiveFlags, change flags to int type
    Open source →
  31. 0.5.0-pre.2 08 Jul 2025 pre-release

    Nothing published for this version

  32. 0.5.0-pre.1 08 Jul 2025 pre-release

    Nothing published for this version

  33. 0.4.5-pre.1 08 Jul 2025 pre-release

    Nothing published for this version

  34. 0.4.4 08 Jul 2025
    Release notes
    • perf: Replace magic number with bitwise operation for clarity
    Open source →
  35. 0.4.3 04 Jul 2025
    Release notes
    • perf: Optimize computed values by using final result value in bit marks calculation (reduces unnecessary computations)
    • docs: Add code comments to public API for better documentation
    Open source →
  36. 0.4.3-without-inline 04 Jul 2025 pre-release

    Nothing published for this version

  37. 0.4.2 03 Jul 2025
    Release notes
    • pref: Add prefer-inline pragmas to core reactive methods. (Thx #17 at @Kypsis)
    Open source →
  38. 0.4.2-pre.1 02 Jul 2025 pre-release

    Nothing published for this version

  39. 0.4.1 11 May 2025
    Release notes
    • refactor: simplifying unlink sub in effect cleanup
    • refactor: update pauseTracking and resumeTracking to use setCurrentSub
    • refactor(preset): change queuedEffects to map like JS Array
    • refactor: remove generic type from effect, effectScope
    • refactor: more accurate unwatched handling
    • fix: invalidate parent effect when executing effectScope
    • test: update untrack tests
    • test: use setCurrentSub instead of pauseTracking

    NOTE: Sync upstream v2.0.4 version.

    Open source →
  40. 0.4.0 01 May 2025
    Release notes

    Major Changes

    • Sync with upstream alien-signal v2.0.1
    • Complete package restructuring and reorganization
    • Remove workspace structure in favor of a single package repository

    Features

    • Implement improved reactive system architecture
    • Add comprehensive signal management capabilities
      • Add signal() function for creating reactive state
      • Add computed() function for derived state
      • Add effect() function for side effects
      • Add effectScope() for managing groups of effects
    • Add batch processing with startBatch() and endBatch()
    • Add tracking control with pauseTracking() and resumeTracking()

    Development

    • Lower minimum Dart SDK requirement to ^3.6.0 (from ^3.7.0)
    • Add extensive test suite for reactivity features
    • Remove separate packages in favor of a single focused package
    • Update CI workflow for multi-SDK testing
    • Add comprehensive examples showing signal features

    Documentation

    • Expanded example code to demonstrate more signal features
    Open source →
  41. 0.3.1 03 Jul 2025

    Nothing published for this version

  42. 0.3.0 24 Mar 2025

    Nothing published for this version

  43. 0.2.4 24 Feb 2025

    Nothing published for this version

  44. 0.2.3 21 Feb 2025

    Nothing published for this version

  45. 0.2.2 20 Feb 2025

    Nothing published for this version

  46. 0.2.1 01 Feb 2025

    Nothing published for this version

  47. 0.2.0 17 Jan 2025

    Nothing published for this version

  48. 0.1.0 10 Jan 2025

    Nothing published for this version

  49. 0.0.17 09 Jan 2025

    Nothing published for this version

  50. 0.0.16 08 Jan 2025

    Nothing published for this version

  51. 0.0.15 07 Jan 2025

    Nothing published for this version

  52. 0.0.14 26 Dec 2024

    Nothing published for this version

  53. 0.0.13 26 Dec 2024

    Nothing published for this version

  54. 0.0.12 24 Dec 2024

    Nothing published for this version

  55. 0.0.11 23 Dec 2024

    Nothing published for this version

  56. 0.0.10 23 Dec 2024

    Nothing published for this version

  57. 0.0.9 22 Dec 2024

    Nothing published for this version

  58. 0.0.8 22 Dec 2024

    Nothing published for this version

  59. 0.0.7 21 Dec 2024

    Nothing published for this version

  60. 0.0.6 20 Dec 2024

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive