HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
markerikson
redux-ecosystem-links
Web Development2016–2018
markerikson / redux-ecosystem-links

redux-ecosystem-links

A categorized list of Redux-related addons, libraries, and utilities

2Distinct people
65Mentions
1Explicit recommenders
5.2KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A categorized list of Redux-related addons, libraries, and utilities

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

I'll agree with the "nothing magical" statement, but I disagree with most of the rest of that comment. Certainly there's nothing "magical" about Redux. After all, the core…

acemarke used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 3:38:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month65 dated mentions

Observed mentions: 2016-04-04 16:14:05 UTC to 2018-10-27 19:58:15 UTC.

02468102016-04-01 00:00:00 UTC to 2016-05-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 commentsApr 20162016-05-01 00:00:00 UTC to 2016-06-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2016-06-01 00:00:00 UTC to 2016-07-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2016-07-01 00:00:00 UTC to 2016-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-08-01 00:00:00 UTC to 2016-09-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2016-09-01 00:00:00 UTC to 2016-10-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2016-10-01 00:00:00 UTC to 2016-11-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2016-11-01 00:00:00 UTC to 2016-12-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2016-12-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2017-01-01 00:00:00 UTC to 2017-02-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-02-01 00:00:00 UTC to 2017-03-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-03-01 00:00:00 UTC to 2017-04-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2017-04-01 00:00:00 UTC to 2017-05-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2017-05-01 00:00:00 UTC to 2017-06-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2017-06-01 00:00:00 UTC to 2017-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-07-01 00:00:00 UTC to 2017-08-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 commentsJul 20172017-08-01 00:00:00 UTC to 2017-09-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2017-09-01 00:00:00 UTC to 2017-10-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2017-10-01 00:00:00 UTC to 2017-11-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-11-01 00:00:00 UTC to 2017-12-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2017-12-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2018-02-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2018-02-01 00:00:00 UTC to 2018-03-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-03-01 00:00:00 UTC to 2018-04-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2018-04-01 00:00:00 UTC to 2018-05-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-05-01 00:00:00 UTC to 2018-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-06-01 00:00:00 UTC to 2018-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2018-07-01 00:00:00 UTC to 2018-08-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-08-01 00:00:00 UTC to 2018-09-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2018-09-01 00:00:00 UTC to 2018-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-10-01 00:00:00 UTC to 2018-11-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsOct 2018

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Apr 20162016-04-01 00:00:00 UTC2016-05-01 00:00:00 UTC312
May 20162016-05-01 00:00:00 UTC2016-06-01 00:00:00 UTC101
Jun 20162016-06-01 00:00:00 UTC2016-07-01 00:00:00 UTC404
Jul 20162016-07-01 00:00:00 UTC2016-08-01 00:00:00 UTC000
Aug 20162016-08-01 00:00:00 UTC2016-09-01 00:00:00 UTC101
Sep 20162016-09-01 00:00:00 UTC2016-10-01 00:00:00 UTC303
Oct 20162016-10-01 00:00:00 UTC2016-11-01 00:00:00 UTC505
Nov 20162016-11-01 00:00:00 UTC2016-12-01 00:00:00 UTC101
Dec 20162016-12-01 00:00:00 UTC2017-01-01 00:00:00 UTC404
Jan 20172017-01-01 00:00:00 UTC2017-02-01 00:00:00 UTC101
Feb 20172017-02-01 00:00:00 UTC2017-03-01 00:00:00 UTC101
Mar 20172017-03-01 00:00:00 UTC2017-04-01 00:00:00 UTC303
Apr 20172017-04-01 00:00:00 UTC2017-05-01 00:00:00 UTC606
May 20172017-05-01 00:00:00 UTC2017-06-01 00:00:00 UTC202
Jun 20172017-06-01 00:00:00 UTC2017-07-01 00:00:00 UTC101
Jul 20172017-07-01 00:00:00 UTC2017-08-01 00:00:00 UTC909
Aug 20172017-08-01 00:00:00 UTC2017-09-01 00:00:00 UTC202
Sep 20172017-09-01 00:00:00 UTC2017-10-01 00:00:00 UTC404
Oct 20172017-10-01 00:00:00 UTC2017-11-01 00:00:00 UTC101
Nov 20172017-11-01 00:00:00 UTC2017-12-01 00:00:00 UTC303
Dec 20172017-12-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
Jan 20182018-01-01 00:00:00 UTC2018-02-01 00:00:00 UTC101
Feb 20182018-02-01 00:00:00 UTC2018-03-01 00:00:00 UTC000
Mar 20182018-03-01 00:00:00 UTC2018-04-01 00:00:00 UTC101
Apr 20182018-04-01 00:00:00 UTC2018-05-01 00:00:00 UTC404
May 20182018-05-01 00:00:00 UTC2018-06-01 00:00:00 UTC000
Jun 20182018-06-01 00:00:00 UTC2018-07-01 00:00:00 UTC101
Jul 20182018-07-01 00:00:00 UTC2018-08-01 00:00:00 UTC000
Aug 20182018-08-01 00:00:00 UTC2018-09-01 00:00:00 UTC101
Sep 20182018-09-01 00:00:00 UTC2018-10-01 00:00:00 UTC000
Oct 20182018-10-01 00:00:00 UTC2018-11-01 00:00:00 UTC202

What Hacker News says

9 sources
Also worth noting that the Redux docs _specifically_ have a section called "Reducing Boilerplate" [0] that shows how to write functions like this, and my Redux addons catalog [1] lists dozens of such libraries already. As I've said many times: it's entirely up to you how much abstraction you want to apply on top of Redux. [0] http://redux.js.org/docs/recipes/ReducingBoilerplate.html [1] https://github.com/markerikson/redux-ecosystem-links
In Show HN: Kea – The power of Redux with the simplicity of MobX
Yeah, that is a tradeoff - globalized state makes a lot of scenarios easier, but does make complete encapsulation and reusability harder. Most of the third-party "Redux-connected component" libs I've seen provide a reducer that they expect to be added to the root of the state tree under a specific key name. Works, but it's not ideal. I've seen a few that let you provide a selector or key name when you initialize the library, so that the library is more flexible in how it's connected. There's been a lot of discussion of various approaches for implementing fully encapsulated/reusable Redux-based React components in Sebastian Lorber's "Scalable Frontend with Elm or Redux" repo [0], and my links list has a section of additional articles on the topic of encapsulation with Redux [1]. My Redux addons catalog also has a large section for libra
Read the rest
ries that implement some form of per-component state or component encapsulation in Redux as well [2]. So, it's not impossible, but it does take work and there are tradeoffs either way. [0] https://github.com/slorber/scalable-frontend-with-elm-or-red... [1] https://github.com/markerikson/react-redux-links/blob/master... [2] https://github.com/markerikson/redux-ecosystem-links/blob/ma...
In Things to learn in React before using Redux
This relates to the discussion I've been trying to have on potential abstraction layers that could be built on top of Redux to make it easier for some people to learn and work with [0]. There ARE a large number of existing libraries out there for things like fetching and managing normalized entities [1], as well as some more extensive frameworks like `dva` [2]. I'd be interested in hearing more details about what your company has put together. If you get a chance, please drop by the Reactiflux chat channels [3] and ping me. [0] https://github.com/reactjs/redux/issues/2295 [1] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [2] https://github.com/dvajs/dva [3] https://www.reactiflux.com
In Things to learn in React before using Redux
I have links to a number of useful utilities for visualizing when and why components re-rendered in the "DevTools#Component Update Monitoring" section of my Redux addons catalog [0]. Hopefully those help. I'm a bit curious why you say that "reselect makes it less clear when things are being re-rendered". The overall reasons shouldn't change - connected components will re-render when values from `mapState` or props from the parent component have changed by reference. Thunks are definitely the "minimum viable approach" for handling async logic in Redux, or at least the minimum _suggested_ approach (as opposed to doing async handling purely inside of a component). I agree that sagas (and observables) are a pretty big jump for most devs to make, but then again, async logic in general is more difficult to reason about. Personally, I stil
Read the rest
l think most devs should use thunks until they see a need for something else (per my post "Idiomatic Redux: Thoughts on Thunks" [1]). Redux does deliberately push the question of "how do I handle async logic?" outside of its core, and leave it up to you. That's both because Redux focuses on structuring synchronous state updates, and because (per my post) Dan and Andrew wanted to give devs flexibility in what specific technique they use for handling async. [0] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [1] http://blog.isquaredsoftware.com/2017/01/idiomatic-redux-tho...
In Idiomatic Redux: Implementation and Intent
Whenever a Redux thread pops up, there's inevitably complaints about "boilerplate". I'd like to pre-empt those complaints a bit by pointing out that, per part 2 of my post, it's entirely up to you how much abstraction you use in your own Redux app. If you want use Redux for a particular use case, someone has probably already written an addon or utility to help solve that problem, and I've got them listed in my Redux addons catalog [0]. If you don't want to edit multiple files, use the "ducks" pattern to put actions and reducers in a single file [1]. If you don't like writing action constants by hand, use one of the dozens of action/reducer generation utilities out there [2] [3]. If you don't want to manage normalized data by hand, there's many addon libraries to help with that [4]. I specifically show off one of them, Redux-ORM [5],
Read the rest
in my "Practical Redux" tutorial series [6]. I love all the tools and addons that people are building on top of Redux. One of my favorite quotes is from a Redux issue thread: > Redux is a generic framework that provides a balance of just enough structure and just enough flexibility. As such, it provides a platform for developers to build customized state management for their use-cases, while being able to reuse things like the graphical debugger or middleware. A few months ago I opened up a Redux issue thread to discuss further ways that we could help make it easier for people to use Redux, and solve complaints about "boilerplate". The discussion kind of trailed off, but I would love to have more discussion and ideas for building useful new tools on top of and around Redux to help people solve problems and build useful applications. Please join the discussion here: https://github.com/reactjs/redux/issues/2295 [0] https://github.com/markerikson/redux-ecosystem-links [1] https://github.com/erikras/ducks-modular-redux [2] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [3] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [4] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [5] https://github.com/tommikaikkonen/redux-orm [6] http://blog.isquaredsoftware.com/series/practical-redux
In Idiomatic Redux: Implementation and Intent
For what it's worth, immutability matters for more than _just_ having React-Redux properly update. It also matters for time-travel debugging, and to some extent for proper reducer testing. I'd very much disagree with the phrases "can't scale to large data-sets because of immutability", and "app can't properly model your domain". If you follow the suggested pattern of normalizing your state like a database [0], then modeling relationships between data types is entirely feasible, AND you can update the individual items efficiently (and if you don't want to write that code manually, there's a ton of addon libraries to help you manage those relationships [1] [2] [3]). At that point, the only real limit to how much data you load is browser memory, same as any other client-side framework. [0] http://redux.js.org/docs/recipes/reducers/Normali
Read the rest
In How to optimize React applications that use Redux
Several reasons why it's popular: - It has helped many developers organize their "write logic" and state management, and made it easier to test that code - Time travel debugging is a fantastic tool for understanding what happens in your application - One of my favorite quotes: "Redux is a generic framework that provides a balance of just enough structure and just enough flexibility. As such, it provides a platform for developers to build customized state management for their use-cases, while being able to reuse things like the graphical debugger or middleware." - And it doesn't hurt that Dan Abramov is a well-known figure in the React community, and an incredibly helpful and friendly person too. No, Javascript doesn't have immutability built-in (sadly), but that doesn't mean you should totally give up on applying those principles in Javas
Read the rest
cript code. There's WAY more developers writing JS than Clojurescript, and those devs can still make use of tools like Redux in their applications. Besides, there's a variety of approaches for handling data immutably, whether it be `Object.assign`, the Stage 3 object spread operator, Immutable.js, or the many immutable update utility libraries out there. Your comment about speed doesn't make sense. A few function calls and switch statements will execute quickly overall, and perf benchmarks will show that your reducer logic is almost never going to be the bottleneck in a Redux application. Some links for further related reading: - https://medium.com/@dan_abramov/you-might-not-need-redux-be4... - http://redux.js.org/docs/faq/Reducers.html#reducers-use-swit... - http://redux.js.org/docs/faq/Performance.html#performance-al... - https://github.com/markerikson/react-redux-links/blob/master... - https://github.com/markerikson/redux-ecosystem-links/blob/ma...
In How to optimize React applications that use Redux
One of the primary intents behind the creation of Redux was that it would provide structure for synchronous state updates, but leave handling of async logic and methodology as a plugin system. Middleware was explicitly intended to be an extension point that would allow users to plug in their preferred approach for handling async behavior (as opposed to libs like Flummox, which had a promise-handling capability built in, but no way to modify it or use anything else). I recapped the intentions behind Redux's creation in my blog post "The Tao of Redux, Part 1 - Implementation and Intent" [0]. The idea of Redux middleware has been an unqualified success. There's several hundred middlewares now available, covering a wide range of capabilities like general async side effects, API abstractions, logging, action transformation, and much MUCH mo
Read the rest
re. I have a list of just about every existing Redux middleware [1] in my Redux addons catalog [2] . The most common Redux async side effect middlewares allow you to handle your async logic via your preference of syntax and implementation: simple functions, promises, generators, observables, or even Elm-style descriptive effects. I listed the most popular side effects libs in "The Tao of Redux, Part 2 - Practice and Philosophy" [3], there's a really good article comparing the various approaches at [4], and I have more articles on Redux side effects listed at [5]. This particular middleware appears to be primarily for transforming the contents of actions as they pass through the middleware pipeline, with the ability to resolve the transformations synchronously or asynchronously. This would likely be useful in ensuring that responses from an API have been transformed into a consistent format before they are processed by the Redux store. So, it doesn't look like it handles or implements async behavior itself, but rather allows you to write transformation logic that can be async. [0] http://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao... [1] https://github.com/markerikson/redux-ecosystem-links/blob/ma... [2] https://github.com/markerikson/redux-ecosystem-links [3] http://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao... [4] https://decembersoft.com/posts/what-is-the-right-way-to-do-a... [5] https://github.com/markerikson/react-redux-links/blob/master...
In Async friendly transformation middleware for Redux
Heh. Quoting my tweet from last December at https://twitter.com/acemarke/status/809427191306059776 : > If I had a nickel for every lib I've seen that lets me "Write reducers with less boilerplate", I'd have... well, several dollars, anyway Case in point, the "Reducers" page [0] in my Redux addons catalog lists dozens of reducer utility libs , and there's even more under the "Action/Reducer Generation" page [1]. (Yes, those two pages are cluttered and need to be reorganized, but I haven't had time yet. I'll also note that I did just add redeuceur to my list a couple days ago as well.) So, good news is that if you want to abstract out the process of defining reducers and action creators, there's a gazillion libs out there to help you do that. As always, it's up you you to decide how much abstraction _you_ want to use in a Redux app [2].
Read the rest
In Show HN: redeuceur – A utility for creating terse Redux reducers

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.