Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including @2mann/geofire with all npm packages installed. Try it out:

require("firebase/package.json"); // firebase is a peer dependency. var geofire = require("@2mann/geofire")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

@2mann/geofire v4.1.2

Location-based querying and filtering using Firebase


The purpose of this fork is to allow the set method to take additional data and put it in the firebase node (ie: timestamp)

We can now pass a third argument to set with an object and each property will be added to the geofire node


export function setUserLocation (uid, coords) {
  return geoFireRef.set(uid, coords, {
    t: database.ServerValue.TIMESTAMP,

This payload will be surfaced via the key_added and key_moved callbacks as the fourth argument (all the raw data will be in that object including the geohash and coordinates)


this.geoQuery.on('key_entered', (key, coords, distance, payload) => {
  if (key !== this.props.currentUserId) {
      uid: key,
      timestamp: payload.t,

NOTE: it will always and only use the payload passed as the 3rd argument If you pass an array of points to set, there is no support for each node having its own payload, it will just use whatever is passed as third argument for each node. This can be changed but im lazy and i dont have a usecase for it ATM

GeoFire for JavaScript Build Status Coverage Status Version

GeoFire is an open-source library that allows you to store and query a set of keys based on their geographic location. At its heart, GeoFire simply stores locations with string keys. Its main benefit, however, is the possibility of retrieving only those keys within a given geographic area - all in realtime.

GeoFire uses the Firebase Realtime Database for data storage, allowing query results to be updated in realtime as they change. GeoFire selectively loads only the data near certain locations, keeping your applications light and responsive, even with extremely large datasets.

GeoFire is designed as a lightweight add-on to Firebase. To keep things simple, GeoFire stores data in its own format and its own location within your Firebase database. This allows your existing data format and Security Rules to remain unchanged while still providing you with an easy solution for geo queries.

A compatible GeoFire client is also available for Objective-C and Java.

Table of Contents

Downloading GeoFire

In order to use GeoFire in your project, you need to include the following files in your HTML:

<!-- Firebase -->
<script src=""></script>

<!-- GeoFire -->
<script src=""></script>

Use the URL above to download both the minified and non-minified versions of GeoFire from the Firebase CDN. You can also download them from the releases page of this GitHub repository.

You can also install GeoFire via npm or Bower. If downloading via npm, you will have to install Firebase separately (because it is a peer dependency to GeoFire):

$ npm install geofire firebase --save

On Bower, the Firebase dependency will be downloaded automatically:

$ bower install geofire --save



You can find a full list of our demos and view the code for each of them in the examples directory of this repository. The examples cover some of the common use cases for GeoFire and explain how to protect your data using the Firebase Database Security Rules.

Example Usage

Assume you are building an app to rate bars and you store all information for a bar, e.g. name, business hours and price range, at /bars/<bar-id>. Later, you want to add the possibility for users to search for bars in their vicinity. This is where GeoFire comes in. You can store the location for each bar using GeoFire, using the bar IDs as GeoFire keys. GeoFire then allows you to easily query which bar IDs (the keys) are nearby. To display any additional information about the bars, you can load the information for each bar returned by the query at /bars/<bar-id>.

Migration Guides

Using an older version of GeoFire and want to upgrade to the latest version? Check out our migration guides to find out how!


If you'd like to contribute to GeoFire, please first read through our contribution guidelines. Local setup instructions are available here.

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free