# redux-observable/redux-observable

RxJS middleware for action side effects in Redux using "Epics"

Repository: https://github.com/redux-observable/redux-observable
Canonical: https://ross.abutalabs.com/products/redux-observable
Homepage: https://redux-observable.js.org
Language: TypeScript
License: MIT
License Family: permissive
Last push: 2026-08-11T12:57:00+00:00

## Health v2 (maintenance only)
Score: 76/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 97, release rhythm 35, longevity 100
- inputs: {"age_days": 3787, "days_push": 22, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: no_releases
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 7806, forks 457 (observed 2026-08-28T04:10:05.185794+00:00)

## What it is
redux-observable is RxJS-based middleware for Redux that lets you handle action side effects using 'Epics'—functions that take a stream of actions and return a stream of actions. It supports composing and cancelling async actions, dependency injection, and marble-based testing with RxJS's TestScheduler.

## Use cases
- handle async side effects in redux apps
- cancel in-flight ajax requests when a new action arrives
- debounce and compose complex async action streams
- test redux side effects deterministically with marble tests
- inject mock dependencies into epics for testing
- manage complex async workflows beyond redux-thunk

## When to choose
- your redux app has complex async/side-effect logic that benefits from reactive streams
- your team already knows RxJS and observables
- you need powerful cancellation, debouncing, or racing of async actions
- you want UI-framework-agnostic business logic in redux

## When to avoid
- you only have simple side effects—redux-thunk or RTK listeners are simpler
- your team is not comfortable with RxJS and reactive programming
- you're starting a new project where Redux Toolkit's built-in patterns suffice

## Facets
- artifact type: library
- maturity: maintenance
- function: middleware, state-management, web-framework
- domain: frontend, web-development, developer-tools
- platform: browser, cross-platform
- tags: redux, rxjs, epics, side-effects, async-actions, reactive-programming, typescript, nodejs

## Member repositories
- redux-observable/redux-observable (main) score 76

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:10:05.185794+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T17:34:36.791625+00:00, confidence not recorded.
  - readme: https://github.com/redux-observable/redux-observable (fetched 2026-08-28T04:10:05.185794+00:00, sha d219ad56b805)
  - homepage: https://redux-observable.js.org (fetched 2026-08-29T08:31:13.480013+00:00, sha 51b0d2ef5737)
  - site_page: https://redux-observable.js.org/docs/basics/Epics (fetched 2026-08-29T08:31:13.489186+00:00, sha adb5653c634c)
  - site_page: https://redux-observable.js.org/docs/basics/SettingUpTheMiddleware (fetched 2026-08-29T08:31:13.491249+00:00, sha 910fc8bee1a2)
  - site_page: https://redux-observable.js.org/docs/recipes/Cancellation (fetched 2026-08-29T08:31:13.493503+00:00, sha ef8e742805bb)
  - site_page: https://redux-observable.js.org/docs/recipes/ErrorHandling (fetched 2026-08-29T08:31:13.495785+00:00, sha 0665352a79cd)
  - site_page: https://redux-observable.js.org/docs/recipes/InjectingDependenciesIntoEpics (fetched 2026-08-29T08:31:13.497703+00:00, sha b52d07e85568)
  - site_page: https://redux-observable.js.org/docs/recipes/WritingTests (fetched 2026-08-29T08:31:13.499456+00:00, sha 7e489645f97d)
  - site_page: https://redux-observable.js.org/docs/recipes/UsageWithUIFrameworks (fetched 2026-08-29T08:31:13.501105+00:00, sha b05e9bcabf72)
  - site_page: https://redux-observable.js.org/docs/recipes/AddingNewEpicsAsynchronously (fetched 2026-08-29T08:31:13.502631+00:00, sha f2bd9291d5b0)
- Data as of 2026-08-30T08:39:29.467469+00:00.
