• Stars
    star
    140
  • Rank 261,473 (Top 6 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created over 3 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

RxFire

Firebase and RxJS for all frameworks.

What is RxFire?

  • Observable creators - Observables bindings for most Firebase web libraries.
  • Portable - Use across any framework or no framework at all.
  • Tree shake-able - Import only what you need. Shake the rest out with your favorite module bundler like Webpack or Rollup.
  • Combine multiple data sources - Need to join two Firestore references? Want to combine an image from Cloud Storage with a Firestore document? Super easy with observables and operators.
  • Simplify code-splitting of Firebase - Using RxFire with Webpack makes it easy to load Firebase features on-demand.

Status: Beta

Install

# npm
npm i rxfire firebase rxjs --save
# yarn
yarn add rxfire firebase rxjs

Make sure to install Firebase and RxJS individually as they are peer dependencies of RxFire.

Example use:

import { initializeApp } from 'firebase/app';
import { getFirestore, collection, where, query } from 'firebase/firestore';
import { collectionData } from 'rxfire/firestore';
import { tap } from 'rxjs/operators';

const app = initializeApp({ /* config */ });
const firestore = getFirestore(app);
const citiesRef = query(
    collection(firestore, 'cities'),
    where('state', '==', 'CO')
);

collectionData(citiesRef, { idField: 'id' })
  .pipe(
    tap(cities => console.log('This is just an observable!'))
  )
  .subscribe(cities => { /* update UI */ })

Easily combine multiple Firebase data sources

RxJS provides multiple operators and creation methods for combining observable streams. This makes it easy to combine data from multiple Firebase resources. You can also handle simplify high asynchronous tasks like joins into a flat stream.

The example below streams a list of "cities" from Firestore and then retrieves their image from a Cloud Storage bucket. Both tasks are asynchronous but RxJS makes it easy to combine these tasks together.

import { initializeApp } from 'firebase/app';
import { getStorage, ref } from 'firebase/storage';
import { getFirestore, collection, where, query } from 'firebase/firestore';
import { collectionData } from 'rxfire/firestore';
import { getDownloadURL } from 'rxfire/storage';
import { combineLatest } from 'rxjs';
import { switchMap } from 'rxjs/operators';

const app = initializeApp({ /* config */ });
const firestore = getFirestore(app);
const storage = getStorage(app);
const citiesRef = query(
    collection(firestore, 'cities'),
    where('state', '==', 'CO')
);

collectionData(citiesRef, { idField: 'id' })
  .pipe(
    switchMap(cities => {
      return combineLatest(...cities.map(c => {
        const ref = ref(storage, `/cities/${c.id}.png`);
        return getDownloadURL(ref).pipe(map(imageURL => ({ imageURL, ...c })));
      }));
    })
  )
  .subscribe(cities => {
    cities.forEach(c => console.log(c.imageURL));
  });

Understanding RxFire imports

RxFire is a complementary library to Firebase. It is not meant to wrap the entire Firebase SDK. RxFire's purpose is to simplify async streams from Firebase. You need to import the Firebase SDK and initialize an app before using RxFire.

import { initializeApp } from 'firebase/app';
import { getStorage, ref } from 'firebase/storage';
import { getDownloadURL } from 'rxfire/storage';

const app = initializeApp({ /* config */ });
const storage = getStorage(app);
const ref = ref(storage, 'data.json');

// Now you can use RxFire!
const url$ = getDownloadURL(ref);

RxFire contains multiple entry points for module imports. Each Firebase library is an entry point.

import { } from 'rxfire/firestore';
import { } from 'rxfire/database';
import { } from 'rxfire/storage';
import { } from 'rxfire/auth';
import { } from 'rxfire/functions';
import { } from 'rxfire/performance';
import { } from 'rxfire/remote-config';

Simple functions

RxFire is a set of functions. Most functions create observables and from there you can use regular RxJS operators. Some functions are custom operators. But at the end of the day, it's all just functions. This is important for tree shaking. Any unused functions are stripped from your final build if you use a module bundler like Webpack or Rollup.

import { initializeApp } from 'firebase/app';
import { getStorage, ref } from 'firebase/storage';
import { getDownloadURL, put /* not used! */ } 'rxfire/storage';

const app = initializeApp({ /* config */ });
const storage = getStorage(app);
const ref = ref(storage, 'data.json');

const url$ = getDownloadURL(ref);

Documentation

Examples

Examples: See this example repository for a list of ways to configure and use RxFire.

More Repositories

1

firepad

Collaborative Text Editor Powered by Firebase
JavaScript
3,868
star
2

reactfire

Hooks, Context Providers, and Components that make it easy to interact with Firebase.
TypeScript
3,540
star
3

angularfire

AngularJS bindings for Firebase
JavaScript
2,728
star
4

firechat

Real-time Chat powered by Firebase
JavaScript
2,414
star
5

firebase-arduino

Arduino samples for Firebase.
C++
945
star
6

bolt

Bolt Compiler (Firebase Security and Modeling)
TypeScript
897
star
7

firebase-queue

JavaScript
787
star
8

action-hosting-deploy

Automatically deploy shareable previews for your Firebase Hosting sites
TypeScript
699
star
9

emberfire

The officially supported adapter for using Firebase with Ember
TypeScript
684
star
10

mlkit-material-android

ML Kit Showcase App with Material Design
Java
490
star
11

polymerfire

Polymer Web Components for Firebase
HTML
459
star
12

flutterfire_desktop

An early-stage, experimental pure-Dart implementation of Firebase SDKs.
Dart
406
star
13

mlkit-custom-image-classifier

Easily collect data and train image classification models.
Dart
403
star
14

firebase-import

Node module for importing large data into Firebase.
JavaScript
370
star
15

custom-auth-samples

Samples showcasing how to sign in Firebase using additional Identity Providers
Java
323
star
16

firebase-framework-tools

Experimental addon to the Firebase CLI to add web framework support
JavaScript
285
star
17

firechat-ios

An example chat application built using the Firebase iOS SDK
Objective-C
246
star
18

experimental-extensions

๐Ÿงช A laboratory for new extensions created by Firebase
TypeScript
244
star
19

make-it-so-android

Kotlin
218
star
20

protobuf-rules-gen

This is an experimental protoc plugin that generates Firebase Rules for Cloud Firestore based on Google's Protocol Buffer format. This allows you to easily validate your data in a platform independent manner.
C++
198
star
21

karas-coffee

TypeScript
162
star
22

unity-solutions

Use Firebase tools to incorporate common features into your games!
C#
128
star
23

firebase-video-samples

This repository contains sample code for some of the videos on the Firebase YouTube channel.
Swift
118
star
24

user-data-protection

Generalizable examples of protecting user data in Firebase Applications
JavaScript
97
star
25

expense-tracker

JavaScript
84
star
26

mlkit-material-ios

These apps demonstrate how to build an end-to-end user experience with Google ML Kit APIs and following the new Material for ML design guidelines.
Objective-C
80
star
27

firebase-auth-service-worker-sessions

JavaScript
79
star
28

TubeSock

A WebSocket client library implemented in Java
Java
79
star
29

codelab-friendlyeats-flutter

FlutterFire Firestore codelab. Develop a cross platform restaurant recommendation app with Flutter.
Dart
78
star
30

fastlane-plugin-firebase_test_lab

Test your app with Firebase Test Lab with ease using fastlane
Ruby
74
star
31

auth-without-play-services

Demonstrates how to implement Firebase Auth on devices without Google Play services
Kotlin
70
star
32

user-privacy

Sample of general purpose functions for user data deletion and export
JavaScript
68
star
33

remote-styles

Conditionally load CSS from Firebase Remote Config
TypeScript
64
star
34

analytics-webview

Java
63
star
35

firebase-streaming-import

public node.js script for streaming large JSON files into a Firebase
Python
61
star
36

cocos2dx-cpp-sample

Firebase Cocos2d-x samples
C++
53
star
37

firestore-codelab-extended-swift

Swift
48
star
38

codelab-kanban-fire

TypeScript
43
star
39

firebase-continue

Firebase Continue enables mobile developers to integrate activity transitioning from their mobile apps to the web
JavaScript
36
star
40

firestoreodm-flutter

Dart
35
star
41

MLKit-ARKit

Swift
34
star
42

parse-migration-tools

JavaScript
26
star
43

firepad-demo

http://demo.firepad.io/ sources
CSS
16
star
44

palm-chatbot-angular

TypeScript
15
star
45

compass-travel-planning-sample

TypeScript
15
star
46

firestore-nlp-extension

TypeScript
15
star
47

codelab-ai-genkit-rag

TypeScript
12
star
48

codelab-measure-android-view-performance

Java
11
star
49

MLKit-ARCore

Swift
11
star
50

firebase-auth-migration-helpers

Objective-C
11
star
51

codelab-contentrecommendation-android

Kotlin
11
star
52

firebase-js-sdk-performance-dashboard

Firebase JS SDK Performance Dashboard
TypeScript
9
star
53

firebase_fcm_flutter

Java
8
star
54

compass-ai-travel-planning-sample-flutter

This is a travel demo built in Flutter using Firebase Data Connect and Firebase Genkit to find ideal itineraries from a database of travel plans.
Dart
8
star
55

cmake-way-for-firebase

C++
6
star
56

codelab-fcm-and-fiam

Kotlin
5
star
57

codelab-textclassification-android

Jupyter Notebook
5
star
58

fcm-external-prober

Go
4
star
59

codelab-rules

JavaScript
4
star
60

angularfire-expert-led-class

TypeScript
4
star
61

crashlytics-migration-ios

Swift
4
star
62

crashlytics-migration-android

Java
4
star
63

firebase-console-performance-dashboard

TypeScript
4
star
64

codelab-digitclassifier-android

Kotlin
3
star
65

codelab-appdistribution-android

Kotlin
3
star
66

codelab-gemini-api-extensions

TypeScript
3
star
67

ai-extensions-codelab

JavaScript
3
star
68

poem-from-image

TypeScript
3
star
69

codelab-actions-firestore

JavaScript
3
star
70

vertexai-sdk-test-data

Python
3
star
71

firebase-apple-sdk-triage

This repo contains a collection of "skeleton" apps for quickly reproducing issues from the firebase-ios-sdk.
Swift
2
star
72

github-actions

Python
2
star
73

firebase-functions-go

Go
2
star
74

changelog

TypeScript
2
star
75

codelab-contentrecommendation-ios

Swift
2
star
76

codelab-textclassification-ios

Swift
1
star
77

codelab-digitclassifier-ios

Swift
1
star
78

codelab-feature-rollout-performance

This is the source code that accompanies the Firebase Performance Monitoring Codelab: https://firebase.google.com/codelabs/feature-rollout-performance
Java
1
star