Skip to content
The Reactive Extensions for Dart
Dart HTML Other
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
example replaces of_type with where_type (#314) Aug 26, 2019
lib fix slow bufferTest when using a large amount of events (#367) Nov 7, 2019
test adds the linter public_member_api_docs and adds docs where missing (#363 Nov 6, 2019
tool Add `range` factory (#44) Feb 6, 2017
.travis.yml release 0.22.6 Nov 6, 2019 More docs / Remove deprecated methods (#78) Mar 5, 2017
LICENSE Changed license to Apache v2.0, Dec 24, 2016 Fix doc sequenceEqual method (#354) Oct 24, 2019
analysis_options.yaml adds the linter public_member_api_docs and adds docs where missing (#363 Nov 6, 2019
codecov.yml rename yaml to yml Feb 2, 2017
pubspec.yaml release 0.22.6 Nov 6, 2019


Build Status codecov Pub Gitter


RxDart is a reactive functional programming library for Google Dart, based on ReactiveX.
Google Dart comes with a very decent Streams API out-of-the-box; rather than attempting to provide an alternative to this API, RxDart adds functionality on top of it.


Dart 1.0 is supported until release 0.15.x, version 0.16.x is no longer backwards compatible and requires the Dart SDK 2.0

How To Use RxDart

For Example: Reading the Konami Code

void main() {
  const konamiKeyCodes = const <int>[

  final result = querySelector('#result');
  final keyUp = Observable<KeyboardEvent>(document.onKeyUp);

    .map((event) => event.keyCode)
    .bufferCount(10, 1)
    .where((lastTenKeyCodes) => const IterableEquality<int>().equals(lastTenKeyCodes, konamiKeyCodes))
    .listen((_) => result.innerHtml = 'KONAMI!');

API Overview



RxDart's Observables extends the Stream class. This has two major implications:

Finally, the Observable class & operators are simple wrappers around Stream and StreamTransformer classes. All underlying implementations can be used free of the Observable class, and are exposed in their own libraries. They are linked to below.


Generally speaking, creating a new Observable is either done by wrapping a Dart Stream using the top-level constructor new Observable(), or by calling a factory method on the Observable class. But to better support Dart's strong mode, combineLatest and zip have been pulled apart into fixed-length constructors. These methods are supplied as static methods, since Dart's factory methods don't support generic types.

var myObservable = new Observable(myStream);

Available Factory Methods

var myObservable = new Observable.merge([myFirstStream, mySecondStream]);
Available Static Methods
var myObservable = Observable.combineLatest3(
    (firstData, secondData, thirdData) => print("$firstData $secondData $thirdData"));


Available Methods

A full list of all methods and properties including those provided by the Dart Stream API (such as first, asyncMap, etc), can be seen by examining the DartDocs

var myObservable = new Observable(myStream)


Web and command-line examples can be found in the example folder.

Web Examples

In order to run the web examples, please follow these steps:

  1. Clone this repo and enter the directory
  2. Run pub get
  3. Run pub run build_runner serve example
  4. Navigate to http://localhost:8080/web/ in your browser

Command Line Examples

In order to run the command line example, please follow these steps:

  1. Clone this repo and enter the directory
  2. Run pub get
  3. Run dart example/example.dart 10

Flutter Example

Install Flutter

In order to run the flutter example, you must have Flutter installed. For installation instructions, view the online documentation.

Run the app

  1. Open up an Android Emulator, the iOS Simulator, or connect an appropriate mobile device for debugging.
  2. Open up a terminal
  3. cd into the example/flutter/github_search directory
  4. Run flutter doctor to ensure you have all Flutter dependencies working.
  5. Run flutter packages get
  6. Run flutter run

Notable References


Refer to the Changelog to get all release notes.

You can’t perform that action at this time.