PackageTrack
Sign in Get early access

solidart

A simple State Management solution for Dart applications inspired by SolidJS

2.8.6 4.0K downloads/mo #4199 most downloaded on pub.dev nank1ro/solidart

What this package is like to depend on

Last release 1 months ago

30 Jun 2026

Release timing varies

gaps range from 1 weeks to 5 months

Nearly every release is documented

notes for 55 of 55 stable releases

Nothing withdrawn

no release was ever pulled

4 years old

69 releases · first in 2023

16 releases in the last 12 months

see the full history below

Release timeline

69 releases · Jan 2023 to Jun 2026
2024 2025 2026
Release Pre-release

Releases

latest 60 of 69
  1. 3.0.0-dev.1 30 Jun 2026 pre-release
    Release notes
    • BREAKING: SolidartConfig.autoDispose now defaults to false — auto-dispose is opt-in from v3. Enable it globally (SolidartConfig.autoDispose = true) or per Signal/Computed/Effect via the autoDispose parameter.
    • FIX: Effect now honours its per-instance autoDispose flag (defaulted from SolidartConfig.autoDispose at creation), consistent with Signal and Computed. Previously an effect only auto-disposed when the global SolidartConfig.autoDispose was enabled, ignoring a per-instance autoDispose: true.
    • CHORE: Upgrade alien_signals to ^2.3.1 and adapt the internal reactive adapter to its preset/system APIs.
    • FIX: A lazy nullable Signal (e.g. Signal<int?>.lazy()) now notifies when it is first set to null; previously the NoneSome(null) transition was treated as "no change".
    • FIX: Disposing a signal now fully unlinks its subscribers on both sides of each dependency link — and does so regardless of SolidartConfig.autoDispose (a disposed signal is destroyed, like Effect/Computed disposal) — so a later write to the disposed signal can no longer propagate into an already-detached computed.
    • FIX: Computed.listenerCount now reports the number of subscribers instead of the number of dependencies. This also corrects Resource's source cleanup, which uses listenerCount to decide whether to dispose a Computed passed as its source.
    • FIX: Disposing a Computed now unlinks all of its subscribers instead of only the first (leaving no dangling links back to it) and offers each subscriber the chance to auto-dispose, matching signal disposal.
    • REFACTOR: ReactiveSystem, reactiveSystem, and the MayDisposeDependencies extension are no longer exported from the public solidart.dart barrel — they expose internal alien_signals types and are implementation detail. Sibling packages consume them via package:solidart/solidart_internal.dart.
    Open source →
    Release notes
    • BREAKING: SolidartConfig.autoDispose now defaults to false — auto-dispose is opt-in from v3. Enable it globally (SolidartConfig.autoDispose = true) or per Signal/Computed/Effect via the autoDispose parameter.
    • FIX: Effect now honours its per-instance autoDispose flag (defaulted from SolidartConfig.autoDispose at creation), consistent with Signal and Computed. Previously an effect only auto-disposed when the global SolidartConfig.autoDispose was enabled, ignoring a per-instance autoDispose: true.
    • CHORE: Upgrade alien_signals to ^2.3.1 and adapt the internal reactive adapter to its preset/system APIs.
    • FIX: A lazy nullable Signal (e.g. Signal<int?>.lazy()) now notifies when it is first set to null; previously the NoneSome(null) transition was treated as "no change".
    • FIX: Disposing a signal now fully unlinks its subscribers on both sides of each dependency link — and does so regardless of SolidartConfig.autoDispose (a disposed signal is destroyed, like Effect/Computed disposal) — so a later write to the disposed signal can no longer propagate into an already-detached computed.
    • FIX: Computed.listenerCount now reports the number of subscribers instead of the number of dependencies. This also corrects Resource's source cleanup, which uses listenerCount to decide whether to dispose a Computed passed as its source.
    • FIX: Disposing a Computed now unlinks all of its subscribers instead of only the first (leaving no dangling links back to it) and offers each subscriber the chance to auto-dispose, matching signal disposal.
    • REFACTOR: ReactiveSystem, reactiveSystem, and the MayDisposeDependencies extension are no longer exported from the public solidart.dart barrel — they expose internal alien_signals types and are implementation detail. Sibling packages consume them via package:solidart/solidart_internal.dart.
    Open source →
  2. 2.8.6 21 May 2026
    Release notes

    What's Changed

    Full Changelog: flutter_solidart-v2.7.3...solidart-v2.8.6

    Open source →
    Release notes
    • FIX: Prevent effect re-entrancy when a signal is written during the effect's first run. The write no longer re-enters the running effect mid-execution, which could throw LateInitializationError.
    Open source →
  3. 2.8.5 14 Apr 2026
    Release notes

    What's Changed

    • Computed.untrackedValue is not up to date by @nank1ro in #172

    Full Changelog: flutter_solidart-v2.7.2...solidart-v2.8.5

    Open source →
    Release notes
    • FIX: Return up-to-date value from Computed.untrackedValue after dependency changes.
    Open source →
  4. 2.8.4 13 Apr 2026
    Release notes
    • FIX: Prevent LateInitializationError when accessing Computed.untrackedValue before first value access. hasValue now triggers lazy computation, and untrackedValue asserts with a clear message if accessed before computation.
    Open source →
  5. 2.8.3 20 Nov 2025
    Release notes
    • FIX: Handle race conditions in Resource that caused multiple calls to resolve.
    Open source →
  6. 2.8.2 17 Nov 2025
    Release notes
    • REFACTOR: Improve the Solidart DevTools extension by giving any signal an id and omit overriding the same signal by name.
    Open source →
  7. 2.8.1 03 Nov 2025
    Release notes
    • FIX: Expose until method for Computed.
    Open source →
  8. 2.8.0 23 Oct 2025
    Release notes
    • REFACTOR: Deprecate maybeOn and on methods of ResourceState. Use maybeWhen and when instead.
    Open source →
  9. 2.7.1 07 Oct 2025
    Release notes
    • REFACTOR: Rename update to shouldUpdate in ReadableSignal.
    Open source →
  10. 2.7.0 25 Sep 2025
    Release notes
    • FEAT: Add then extension method to FutureOr. This allows you to use the then method on both Future and FutureOr values seamlessly. Mainly needed to simplify the usage of ReadableSignal.until and Resource.untilReady methods.
      final count = Signal(10);
      count.until((value) => value > 5).then((value) {
        print('The count is now greater than 5: $value');
      });
      
    Open source →
  11. 2.6.1 22 Sep 2025
    Release notes
    • FIX: Fix auto disposal of Computed which happened even if autoDispose was set to false.
    Open source →
  12. 2.6.0 19 Sep 2025
    Release notes
    • REFACTOR: Make auto disposal synchronous.
    Open source →
  13. 2.5.0 10 Sep 2025
    Release notes
    • FEAT: Add run method to Computed to manually trigger an update of its value.
    • FEAT: Add run method to Effect to manually re-run the effect.
    • CHORE: Detect if Effect didn't track any reactive value and throw an EffectWithoutDependenciesError.
    Open source →
  14. 2.4.1 08 Sep 2025
    Release notes
    • FIX: Signal.lazy which caused an exception.
    Open source →
  15. 2.4.0 02 Sep 2025
    Release notes
    • FEAT: Add Debouncer utility class to easily debounce operations and debounceDelay to Resource to debounce source changes if they fire very often.
    Open source →
  16. 2.3.0 29 Aug 2025
    Release notes
    • FEAT: Allow extending signal, computed, resource, list-signal, set-signal and map-signal.
    Open source →
  17. 2.2.0 26 Aug 2025
    Release notes
    • FEAT: Add timeout parameter to Signal.until method to specify a timeout duration. If the condition is not met within the specified duration, the returned future will complete with a TimeoutException.
    Open source →
  18. 2.1.1 31 Jul 2025
    Release notes
    • CHORE: Bump the alien_signals dependency to ^0.5.1 for slight performance improvements (thanks to @medz).
    Open source →
  19. 2.1.1+1 01 Aug 2025
    Release notes
    • CHORE: Update README.md with new contributors.
    Open source →
  20. 2.1.0 31 Jul 2025
    Release notes
    • REFACTOR: Update alien_signals dependency from ^0.2.1 to ^0.4.3 with significant performance improvements (thanks to @medz).
    • REFACTOR: Replace custom reactive node implementations with alien.ReactiveNode for better compatibility and performance (thanks to @medz).
    • REFACTOR: Simplify signal, computed and effect implementations by leveraging new alien_signals API (thanks to @medz).
    • PERFORMANCE: Improve performance by removing redundant tracking operations in the reactive system (thanks to @medz).
    • FIX: Add proper cleanup for disposed nodes to prevent memory leaks (thanks to @medz).
    • FIX: Fix potential memory leaks in auto-dispose scenarios (thanks to @medz).
    • FIX: Clear queued flag when running effects in ReactiveSystem to ensure proper effect execution (thanks to @medz).
    • CHORE: Reorder dev_dependencies in pubspec.yaml for improved organization and readability (thanks to @medz).
    Open source →
  21. 2.0.1 20 Jun 2025
    Release notes
    • FIX: DevTools extension not working.
    Open source →
  22. 2.0.0 03 Jun 2025
    Release notes
    • CHORE: Improve the performance by using alien_signals for the reactive system.
    • FEAT: Expose untracked.
    • REFACTOR: Updated the reactive system from scratch, improving the performances.
    • BREAKING CHANGE: Remove set and call methods from Signals (Use an extension to have them back).
    • FEAT: Add useRefreshing to Resource to decide whether to update the current state with isRefreshing (defaults to true). If you set it to false, when refreshing, the resource will go directly to the loading state.
    • FEAT: Add Signal.lazy to allow the creation of a signal without an initial value. Be aware, the signal will throw an error if you try to read its value before it has been initialized.
    • CHORE: Remove deprecated createSignal, createComputed, createEffect and createResource helpers.
    • CHORE: Remove SignalOptions and ResourceOptions classes.
    • FEAT: Add batch function to execute a callback that will not side-effect until its top-most batch is completed. See docs here
    • CHORE: Add trackInDevTools to SignalOptions and ResourceOptions to disable the DevTools tracking for specific signals and resources, defaults to SolidartConfig.devToolsEnabled.
    Open source →
  23. 2.0.0-dev.5 25 Feb 2025 pre-release
    Release notes
    • CHORE: Improve the performance
    Open source →
  24. 2.0.0-dev.4 18 Feb 2025 pre-release
    Release notes
    • REFACTOR: Updated the reactive system from scratch, improving the performances.
    • BREAKING CHANGE: Remove set and call methods from Signals (Use an extension to have them back).
    • FEAT: Add useRefreshing to Resource to decide whether to update the current state with isRefreshing (defaults to true). If you set it to false, when refreshing, the resource will go directly to the loading state.
    Open source →
  25. 2.0.0-dev.3 19 Aug 2024 pre-release
    Release notes
    • FEAT: Add Signal.lazy to allow the creation of a signal without an initial value. Be aware, the signal will throw an error if you try to read its value before it has been initialized.
    Open source →
  26. 2.0.0-dev.2 05 Aug 2024 pre-release
    Release notes
    • CHORE: Remove deprecated createSignal, createComputed, createEffect and createResource helpers.
    • CHORE: Remove SignalOptions and ResourceOptions classes.
    Open source →
  27. 2.0.0-dev.1 30 May 2024 pre-release
    Release notes
    • FEAT: Add batch function to execute a callback that will not side-effect until its top-most batch is completed. See docs here
    • CHORE: Add trackInDevTools to SignalOptions and ResourceOptions to disable the DevTools tracking for specific signals and resources, defaults to SolidartConfig.devToolsEnabled.
    Open source →
  28. 1.5.4 30 Dec 2023
    Release notes
    • CHORE: Add devToolsEnabled option to manually disable the DevTools extension that defaults to kDebugMode
    Open source →
  29. 1.5.3 19 Dec 2023
    Release notes
    • BUGFIX: Fix an auto dispose issue of Signals that have some active observations.
    Open source →
  30. 1.5.2 19 Dec 2023
    Release notes
    • BUGFIX: Fix DevTools extension with null signal name.
    Open source →
  31. 1.5.1 18 Dec 2023
    Release notes
    • CHORE: Upload DevTools extension to pub.dev
    Open source →
  32. 1.5.0 18 Dec 2023
    Release notes
    • FEAT: Add DevTools extension to solidart.
    Open source →
  33. 1.4.1 09 Dec 2023
    Release notes
    • BUGFIX: The method didUpdateSignal of SolidartObserver was not triggered for collections.
    Open source →
  34. 1.4.0 09 Dec 2023
    Release notes
    • FEAT: Create SolidartConfig which you can use to customize the autoDispose of all the tracking system and and observers.
    • BUGFIX: Removed the internal ResourceUnresolved state so you can easily use the ResourceState sealed class.
    Open source →
  35. 1.3.0 30 Nov 2023
    Release notes
    Open source →
  36. 1.2.2 24 Nov 2023
    Release notes
    • BUGFIX: Fix the update method of a Resource that triggered reportObserved.
    Open source →
  37. 1.2.1 23 Nov 2023
    Release notes
    • BUGFIX: Fix the updateValue method of a Signal that triggered reportObserved. (thanks to @9dan)
    Open source →
  38. 1.2.0 23 Oct 2023
    Release notes
    • FEAT: Add 3 new signals: ListSignal, SetSignal and MapSignal. Now you can easily be notified of every change of a list, set or map. Before:

      final list = Signal([1, 2]);
      // this doesn't work
      list.add(3);
      // instead you have to provide a new list instance
      list.value = [...list, 3];
      

      Now:

      final list = ListSignal([1, 2]);
      // this now works as expected
      list.add(3);
      
    • CHORE: Rename the firstWhere method of a ReadSignal into until

    • CHORE: Rename the firstWhereReady method of a Resource into untilReady

    • CHORE: Rename the update method of a Signal into updateValue

    • CHORE: Deprecate createSignal, createComputed, createEffect and createResource

    Open source →
  39. 1.1.0 03 Oct 2023
    Release notes
    • BUGFIX: Fix a bug in the Resource where the stream subscription was not disposed correctly
    Open source →
  40. 1.0.1 06 Sep 2023
    Release notes

    Improve copyWith methods of ResourceReady and ResourceError

    Open source →
  41. 1.0.0 04 Aug 2023
    Release notes

    The core of the library has been rewritten in order to support automatic dependency tracking like SolidJS.

    • FEAT: Add automatic dependency tracking

    • BREAKING CHANGE: To create derived signals now you should use createComputed instead of signalName.select This allows you to derive from many signals instead of only 1.

      Before:

      final count = createSignal(0);
      final doubleCount = count.select((value) => value * 2);
      

      Now:

      final count = createSignal(0);
      final doubleCount = createComputed(() => count() * 2);
      
    • FEAT: The createEffect no longer needs a signals array, it automatically track each signal.

      Before:

      final effect = createEffect(() {
        print('The counter is now ${counter.value}');
      }, signals: [counter]);
      

      Now:

      final disposeFn = createEffect((disposeFn) {
        print('The counter is now ${counter.value}');
      })
      
    • BREAKING CHANGE: The fireImmediately field on effects has been removed. Now an effect runs immediately by default.

    • FEAT: Add observe method on Signal. Use it to easily observe the previous and current value instead of creating an effect.

      final count = createSignal(0);
      final disposeFn = count.observe((previousValue, value) {
        print('The counter changed from $previousValue to $value');
      }, fireImmediately: true);
      
    • FEAT: Add firstWhere method on Signal. It returns a future that completes when the condition evaluates to true and it returns the current signal value.

      final count = createSignal(0);
      // wait until the count is greater than 5
      final value = await count.firstWhere((value) => value > 5);
      
    • FEAT: Add firstWhereReady method on Resource. Now you can wait until the resource is ready.

      final resource = createResource(..);
      final data = await resource.firstWhereReady();
      
    • FEAT: The Resource now accepts ResourceOptions. You can customize the lazy value of the resource (defaults to true), if you want your resource to resolve immediately.

    • CHORE: ResourceValue has been renamed into ResourceState. Now you can get the state of the resource with the state getter.

    • CHORE: Move refreshing from ResourceWidgetBuilder into the ResourceState. (thanks to @manuel-plavsic)

    • FEAT: Add hasPreviousValue getter to ReadSignal. (thanks to @manuel-plavsic)

    • FEAT Before, only the fetcher reacted to the source. Now also the stream reacts to the source changes by subscribing again to the stream. In addition, the stream parameter of the Resource has been changed from Stream into a Stream Function() in order to be able to listen to a new stream if it changed.

    • FEAT: Add the select method on the Resource class. The select function allows filtering the Resource's data by reading only the properties that you care about. The advantage is that you keep handling the loading and error states.

    • FEAT: Make the Resource to auto-resolve when accessing its state.

    • CHORE: The refetch method of a Resource has been renamed to refresh.

    • FEAT: You can decide whether to use createSignal() or directly the Signal() constructor, now the're equivalent. The same applies to all the other create functions.

    Open source →
  42. 1.0.0+1 21 Aug 2023
    Release notes

    Fix the pub.dev pub points.

    Open source →
  43. 1.0.0+2 21 Aug 2023
    Release notes

    Fix the pub.dev pub points.

    Open source →
  44. 1.0.0+3 21 Aug 2023
    Release notes

    Fix the pub.dev pub points.

    Open source →
  45. 1.0.0+4 21 Aug 2023
    Release notes

    Fix the pub.dev pub points.

    Open source →
  46. 1.0.0-dev8 14 Jul 2023 pre-release
    Release notes
    • FEAT: Add the select method on the Resource class. The select function allows filtering the Resource's data by reading only the properties that you care about. The advantage is that you keep handling the loading and error states.
    • FEAT: Make the Resource to auto-resolve when accessing its state
    Open source →
  47. 1.0.0-dev7 06 Jul 2023 pre-release
    Release notes
    • CHORE: createComputed now returns a Computed class instead of a ReadSignal.
    Open source →
  48. 1.0.0-dev6 01 Jul 2023 pre-release
    Release notes
    • FEAT Before, only the fetcher reacted to the source. Now also the stream reacts to the source changes by subscribing again to the stream. In addition, the stream parameter of the Resource has been changed from Stream into a Stream Function() in order to be able to listen to a new stream if it changed
    Open source →
  49. 1.0.0-dev5 22 Jun 2023 pre-release
    Release notes
    • BUGFIX Refactor the core of the library in order to fix issues with previousValue and hasPreviousValue of Computed and simplify the logic.
    Open source →
  50. 1.0.0-dev4 17 Jun 2023 pre-release
    Release notes
    • Move refreshing from ResourceWidgetBuilder into the ResourceState. (thanks to @manuel-plavsic)
    • Add hasPreviousValue getter to ReadSignal. (thanks to @manuel-plavsic)
    Open source →
  51. 1.0.0-dev3 08 Jun 2023 pre-release
    Release notes
    • Deprecate value getter in the Resource. Use state instead.
    • Remove where method from ReadSignal.
    Open source →
  52. 1.0.0-dev2 05 Jun 2023 pre-release
    Release notes
    • Rename until into firstWhere

    • Rename untilReady into firstWhereReady

    • FEAT: add where method to Signal. It returns a new ReadSignal with the values filtered by condition. Use it to filter the value of another signal, e.g.:

      final loggedInUser = user.where((value) => value != null);
      

      The initial value may be null because a Signal must always start with an initial value. The following values will always satisfy the condition. The returned ReadSignal will automatically dispose when the parent signal disposes.

    Open source →
  53. 1.0.0-dev1 19 May 2023 pre-release
    Release notes

    This is a development preview of the 1.0.0 release of solidart. The core of the library has been rewritten in order to support automatic dependency tracking like SolidJS.

    • FEAT: Add automatic dependency tracking

    • BREAKING CHANGE: To create derived signals now you should use createComputed instead of signalName.select This allows you to derive from many signals instead of only 1.

      Before:

      final count = createSignal(0);
      final doubleCount = count.select((value) => value * 2);
      

      Now:

      final count = createSignal(0);
      final doubleCount = createComputed(() => count() * 2);
      
    • FEAT: The createEffect no longer needs a signals array, it automatically track each signal.

      Before:

      final effect = createEffect(() {
        print('The counter is now ${counter.value}');
      }, signals: [counter]);
      

      Now:

      final disposeFn = createEffect((disposeFn) {
        print('The counter is now ${counter.value}');
      })
      
    • BREAKING CHANGE: The createEffect method no longer returns an Effect, you cannot pause or resume it anymore. Instead it returns a Dispose callback which you can call when you want to stop it. You can also dispose an effect from the inside of the callback.

    • BREAKING CHANGE: The fireImmediately field on effects has been removed. Now an effect runs immediately by default.

    • FEAT: Add observe method on Signal. Use it to easily observe the previous and current value instead of creating an effect.

      final count = createSignal(0);
      final disposeFn = count.observe((previousValue, value) {
        print('The counter changed from $previousValue to $value');
      }, fireImmediately: true);
      
    • FEAT: Add until method on Signal. It returns a future that completes when the condition evaluates to true and it returns the current signal value.

      final count = createSignal(0);
      // wait until the count is greater than 5
      final value = await count.until((value) => value > 5);
      
    • FEAT: Add untilReady method on Resource. Now you can wait until the resource is ready.

      final resource = createResource(..);
      final data = await resource.untilReady();
      
    • FEAT: The Resource now accepts ResourceOptions. You can customize the lazy value of the resource (defaults to true), if you want your resource to resolve immediately.

    • CHORE: ResourceValue has been renamed into ResourceState. Now you can get the state of the resource with the state getter.

    Open source →
  54. 0.3.0 31 Mar 2023
    Release notes
    • BUGFIX: Listening to the source of a Resource was not stopped when the source disposed.
    • BUGFIX: A Resource would not perform the asynchronous operation until someone called the fetch method, typically the ResourceBuilder widget. This did not apply to the stream which was listened to when the resource was created. Now the behaviour has been merged and the fetch method has been renamed into resolve.
    • CHORE: Renamed ReadableSignal into ReadSignal.
    • CHORE: Renamed the readable method of a Signal into toReadSignal()
    Open source →
  55. 0.2.4 19 Mar 2023
    Release notes
    • Add assert to resource fetch method to prevent multiple fetches of the same resource.
    Open source →
  56. 0.2.3 07 Mar 2023
    Release notes
    • The select method of a signal now can take a custom options parameter to customize its behaviour.
    • Fixed an invalid assert in the ResourceBuilder widget that happens for resources without a fetcher.
    Open source →
  57. 0.2.2 20 Feb 2023
    Release notes
    • createResource now accepts a stream and can be used to wrap a Stream and correctly handle its state.
    Open source →
  58. 0.2.1 20 Feb 2023
    Release notes
    • Get a signal value with signalName().
    Open source →
  59. 0.2.0 19 Feb 2023
    Release notes
    • Documentation improvements
    • Refactor Resource, now the createResource method takes only 1 generic, the type of the future result.
      // before
      final resource = createResource<SourceValueType, FetcherValueType>(fetcher: fetcher, source: source);
      // now
      final resource = createResource<FetcherValueType>(fetcher: fetcher, source: source); // the FetcherValueType can be inferred by Dart >=2.18.0, so you can omit it
      
    Open source →
  60. 0.2.0+1 19 Feb 2023
    Release notes
    • Add documentation link inside the pubspec
    Open source →

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