built_redux
A state management library written in dart that enforces immutability
8.0.10
8.3K downloads/mo
#3167 most downloaded on pub.dev
davidmarne/built_redux
What this package is like to depend on
Last release 6 months ago
15 Feb 2026
Release timing varies
gaps range from 2 weeks to 1.3 years
Some releases are documented
notes for 32 of 62 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
67 releases · first in 2017
1 release in the last 12 months
see the full history below
Release timeline
67 releases · Apr 2017 to Feb 2026Releases
latest 60 of 67-
8.0.1015 Feb 2026Release notes
Open source →Info
Build: (waiting for build to complete)
Skynet Results: (waiting for Skynet results)
Pipeline: (waiting for pipeline to start)
This patch release includes the following changes:Miscellaneous
- #179 Update to full Dart 3.10
Notes created on Sunday, February 15 02:22 PM UTC
-
8.0.904 Nov 2024Release notes
Open source →Info
Build: (waiting for build to complete)
Skynet Results: (waiting for Skynet results)
Pipeline: (waiting for pipeline to start)
This patch release includes the following changes:Miscellaneous
- #178 Allow analyzer 6
Notes created on Monday, November 04 04:27 PM UTC
-
8.0.605 Sep 2023 -
8.0.505 Sep 2023 -
8.0.405 Sep 2023Nothing published for this version
-
8.0.316 Feb 2023 -
8.0.216 Feb 2023Release notes
Open source →- only use nndb in generator if nndb feature is enabled. prevents build issues for non nndb consumers
-
8.0.113 Feb 2023 -
8.0.003 Jun 2021Release notes
Open source →- updated analyzer, source_gen, build, build_test dependency ranges
- fix nnbd issues in generator
- set sdk range lower bound to 2.12.0
-
8.0.0-nullsafety.008 Feb 2021 pre-releaseRelease notes
Open source →- add tests that generate actions with nullable generics
- fixed issue where ++ does not work on builder value
- address deprecations in generator
- Breaking changes:
- The argements to
ActionDispatcher.callare no longer optional. when dispatching an action a payload a value must be provided. if the payload type is nullable null must be explicitly provided. append a?to theActionDispatchertype parameter for any actions that can be dispatched with a null payload, e.g.ActionDispatcher<int?>. - Remove previously deprecated test method
- The argements to
-
7.5.1424 Feb 2022Nothing published for this version
-
7.5.1323 Feb 2022Nothing published for this version
-
7.5.1217 Jun 2021Nothing published for this version
-
7.5.1112 May 2020Release notes
Open source →- allow analyzer 0.39.0
- make dispatcher name public
- fix documentation typo
-
7.5.1022 Jan 2020Release notes
Open source →- add workiva_analysis_options
- remove usage of new keyword in code and examples
- bump various dependencies lower bounds
-
7.5.909 Jan 2020 -
7.5.805 Dec 2019Release notes
Open source →- rework generator to lift analyzer version constraint.
- open analyzer range
- generator now uses source parsing to resolve action generic types which allows any unresolved type to be used as an action payload.
- generated actions classes now use type inference.
- bump built_value lower bound to 6.1.4 since it is impossible for pub to resolve to anything lower due to the build dependency constraint.
-
7.5.727 Nov 2019Release notes
Open source →open built value range restrict analyzer to less than 0.38.3, issue was introduced in 0.38.3 patch
-
7.5.616 Oct 2019 -
7.5.509 Oct 2019 -
7.5.419 Jun 2019Release notes
Open source →update analyzer dependency to allow '>=0.33.0 <0.37.0' fix type in built_redux_test_utils.dart
-
7.5.301 Apr 2019 -
7.5.214 Dec 2018 -
7.5.114 Dec 2018 -
7.5.013 Sep 2018Release notes
Open source →- allow 4.x.x of built_collection
- added combineReducerBuilder to NestedReducerBuilder
- added a NestedMiddlewareBuilder
Release notes
Open source →- allow 4.x.x of built_collection
- added combineReducerBuilder to NestedReducerBuilder
- added a NestedMiddlewareBuilder
-
7.4.502 Aug 2018Release notes
Open source →- open sdk range to dart 2!
- update built_value and source_gen dependencies
- use SharedPartBuilder rather than PartBuilder in the generator
Release notes
Open source →- open sdk range to dart 2!
- update built_value and source_gen dependencies
- use SharedPartBuilder rather than PartBuilder in the generator
-
7.4.4-dev15 Jul 2018 pre-release -
7.4.3-dev14 Jul 2018 pre-releaseRelease notes
Open source →- update dependency range on analyzer
- update dependency range on test
- fix broken test caused by dart 2's new asyc behavior
Release notes
Open source →- update dependency range on analyzer
- update dependency range on test
- fix broken test caused by dart 2's new asyc behavior
-
7.4.229 Jun 2018 -
7.4.2+128 Feb 2019Nothing published for this version
-
7.4.117 Apr 2018Release notes
Open source →- fix cast issues around store changes in dart 2
- open analyzer version range
-
7.4.1-dev17 Apr 2018 pre-release -
7.4.026 Feb 2018Release notes
Open source →- add built_redux_test_utils library - exposes an expectDispatched function for expecting a given action gets dispatched asynchronously
- add combine to MiddlewareBuilder class - lets you combine middleware builders
- add toString to Action class
- add example
- add docs
-
7.4.0-dev29 Mar 2018 pre-releaseRelease notes
Open source →- add build.yaml and build.dart to comply with build_runner 0.7.x
With the dev tag you can consume the latest versions of built_value, build, and build_runner that are only compatable with dart 2.
In order to migrate:
- remove your old build scripts
- update your pubspec to include
build_runner: ^0.7.9- add a build.yaml to the root of your repo that contains the following:
targets: $default: builders: built_value_generator|built_value: enabled: false- run
pub run build_runner build.
The build script is only a temporary measure until https://github.com/dart-lang/source_gen/issues/319 is resolved.
-
7.3.531 Jan 2018Nothing published for this version
-
7.3.426 Jan 2018Nothing published for this version
-
7.3.331 Dec 2017 -
7.3.205 Dec 2017 -
7.3.130 Nov 2017 -
7.3.018 Nov 2017 -
7.2.005 Nov 2017Release notes
Open source →- Added actionStream stream to the store api so one can listen to changes resulting from a specific action name.
- Fixed issues called out my adding implicit-dynamic and implicit-cast rules.
-
7.1.001 Nov 2017Release notes
Open source →- Added reducer builders for all collection types in built_collection. This means you can now write reducers that rebuild just a collection. Examples: https://github.com/davidmarne/built_redux/blob/master/test/unit/collection_models.dart
- The action generator now supports inheritance, meaning one can now have action classes extend one another. AbstractReducerBuilder was added as means of merging a reducer builder defined to rebuild the abstract pieces of state. Examples: https://github.com/davidmarne/built_redux/blob/7.1.0/test/unit/inheritance_test_models.dart for examples
-
7.0.022 Oct 2017Release notes
Open source →- Breaking changes:
- A breaking change in behavior was made to action dispatchers. Before action dispatchers executed the middleware/reducers asynchronously, but they now execute synchronously.
For example you may have:
int getCount(store) { print(store.state.count); // prints 0 store.actions.increment(1); print(store.state.count); // would print 1 if actions were sync, 0 if async return store.state.count; // would return 1 if actions were sync, 0 if async }Before this function would return 0 because the state update that occurs from actions.increment would be processed in a future task. Now this function will return 1 because the state update that occurs from actions.increment is processed in the current task
- Breaking changes:
-
6.1.113 Oct 2017Nothing published for this version
-
6.1.001 Oct 2017Nothing published for this version
-
6.0.028 Sep 2017Release notes
Open source →Removes the BuiltReducer interface and the generated BuiltReducer implementation in favor of building a reducer function and passing it to the store at instantiation.
- Breaking changes:
- Store now takes a reducer
- Nested reducers need to be built with the NestedReducerBuilder and merged wth the main ReducerBuilder using ReducerBuilder.addNestedReducer
- Models no longer implement BuiltReducer
- Remove references to the reducer on your models
- Renamed ActionDispatcher.syncWithStore to setDispatcher
- Renamed SubStateChange to SubstateChange
Reasoning:
- Decouples your models and reducers.
- Requires less generated code.
- Reducing requires less map look ups. Previously N map look ups were required where N was the number of BuiltReducers in your state tree. Now only 1 map look up is required per action dispatched.
Examples:
- Example model change. Remove the generated BuiltReducer mixin and the reducer getter
Before:
abstract class Counter extends Object with CounterReducer implements Built<Counter, CounterBuilder> { int get count; get reducer => _reducer; Counter._(); factory BaseCounter() => new _$BaseCounter._(count: 1); }After:
abstract class Counter implements Built<Counter, CounterBuilder> { int get count; Counter._(); factory BaseCounter() => new _$BaseCounter._(count: 1); }- Example nested reducer change. Change NestedCounter's reducer builder to a NestedReducerBuilder. Pass the NestedReducerBuilder mapper functions from the main state/builder to the nested state/builder.
Before
// Built Reducer abstract class BaseCounter extends Object with BaseCounterReducer implements Built<BaseCounter, BaseCounterBuilder> { int get count; BuiltList<int> get indexOutOfRangeList; NestedCounter get nestedCounter; @override get reducer => _baseReducer; // Built value constructor BaseCounter._(); factory BaseCounter() => new _$BaseCounter._( count: 1, nestedCounter: new NestedCounter(), ); } final _baseReducer = (new ReducerBuilder<BaseCounter, BaseCounterBuilder>() ..add(BaseCounterActionsNames.increment, _baseIncrement) ..add(BaseCounterActionsNames.decrement, _baseDecrement)) .build(); abstract class NestedCounter extends Object with NestedCounterReducer implements Built<NestedCounter, NestedCounterBuilder> { int get count; get reducer => _nestedReducer; // Built value constructor NestedCounter._(); factory NestedCounter() => new _$NestedCounter._(count: 1); } final _nestedReducer = (new ReducerBuilder<NestedCounter, NestedCounterBuilder>() ..add(NestedCounterActionsNames.increment, _nestedIncrement) ..add(NestedCounterActionsNames.decrement, _nestedDecrement)) .build();After
abstract class BaseCounter implements Built<BaseCounter, BaseCounterBuilder> { int get count; NestedCounter get nestedCounter; BaseCounter._(); factory BaseCounter() => new _$BaseCounter._( count: 1, nestedCounter: new NestedCounter(), ); } // the reducer passed to the store final reducer = (new ReducerBuilder<BaseCounter, BaseCounterBuilder>() ..add(BaseCounterActionsNames.increment, _baseIncrement) ..add(BaseCounterActionsNames.decrement, _baseDecrement) ..combineNested(_nestedReducer)) .build(); abstract class NestedCounter implements Built<NestedCounter, NestedCounterBuilder> { int get count; // Built value constructor NestedCounter._(); factory NestedCounter() => new _$NestedCounter._(count: 1); } final _nestedReducer = new NestedReducerBuilder<BaseCounter, BaseCounterBuilder, NestedCounter, NestedCounterBuilder>( (state) => state.nestedCounter, (builder) => builder.nestedCounter, ) ..add(NestedCounterActionsNames.increment, _nestedIncrement) ..add(NestedCounterActionsNames.decrement, _nestedDecrement); - Breaking changes:
-
5.1.027 Sep 2017Nothing published for this version
-
5.0.008 Sep 2017Nothing published for this version
-
4.0.030 Aug 2017Nothing published for this version
-
3.0.013 Aug 2017Nothing published for this version
-
2.1.204 Aug 2017Nothing published for this version
-
2.1.126 Jul 2017Nothing published for this version
-
2.0.219 Jul 2017Nothing published for this version
-
2.0.118 Jul 2017Nothing published for this version
-
2.0.016 Jul 2017Nothing published for this version
-
1.0.014 May 2017Nothing published for this version
-
0.1.407 May 2017Nothing published for this version
-
0.1.330 Apr 2017Nothing published for this version
-
0.1.230 Apr 2017Nothing published for this version
-
0.1.123 Apr 2017Nothing published for this version