kepler.gl is a free, open source business intelligence & reporting project written in TypeScript and released under MIT. It has 12,013 GitHub stars, 1,957 forks and 452 open issues, and was last pushed 4 hours ago. On this registry it ranks #14 of 57 tracked projects in Business Intelligence & Reporting, with 5 head-to-head comparisons available.

What is kepler.gl?

Kepler.gl is an MIT-licensed, TypeScript geospatial analysis tool that renders large-scale geolocation data sets in the browser at million-point scale, built for data analysts, GIS practitioners, and React developers who need to explore trip and point data without assembling their own rendering stack.

What it is

Kepler.gl is a data-agnostic, high-performance web application for visual exploration of large-scale geolocation data sets. It is built on top of MapLibre GL and deck.gl, and it can render millions of points representing thousands of trips while performing spatial aggregations on the fly. It is also a React component that uses Redux to manage its state and data flow, which means it can be embedded into other React-Redux applications and customized extensively. The project lives in the Data and Analytics category under Business Intelligence and Reporting, is written in TypeScript, and ships under the MIT licence.

The concrete problem it solves is the assembly work that surrounds large geospatial visualizations. Rendering millions of points and aggregating them in the browser normally means hand-writing deck.gl layers, spatial aggregation logic, map state, and the Redux plumbing that keeps them synchronized. Kepler.gl supplies that stack as installable modules: a reducer that owns the map state, a component that renders it, and middleware for asynchronous side effects. The specific thing it replaces is the bespoke deck.gl plus MapLibre GL mapping layer that a team would otherwise build and maintain itself.

Key capabilities

  • Renders millions of points and thousands of trips in the browser, with spatial aggregations computed on the fly.
  • Ships as embeddable React components and Redux reducers through the modules @kepler.gl/components and @kepler.gl/reducers.
  • Provides enhanceReduxMiddleware and a built-in taskMiddleware for handling asynchronous side effects in the Redux store.
  • Exposes component props including id, mapboxApiAccessToken, and getState, where getState defaults to state => state.keplerGl and id maps each instance to its own slice such as state.keplerGl.foo.
  • Publishes precompiled production UMD builds in the umd folder on unpkg, so the library can be loaded with a script tag without a module bundler.
  • Includes the @kepler.gl/sqlrooms module, exercised by the SQLRooms demo that tests a collapsible application shell and modular panel layout.
  • Offers a Jupyter widget with its own user guide, alongside the App User Guide, API Reference, and Roadmap documentation.

Who uses it and how

  • Analysts interactively explore point and trip data sets through the hosted demo application at kepler.gl/demo.
  • React and Redux developers embed the component into existing applications by mounting the reducer with combineReducers and supplying a Mapbox access token.
  • Notebook users load the Jupyter widget to explore geospatial data alongside analysis code.
  • Teams evaluating layout options run the SQLRooms demo with yarn start:sqlrooms on port 8083 next to the original main demo with yarn start on port 8080.
  • Projects without a bundler deploy the UMD build from unpkg by adding a script tag for a chosen version.

Getting started

Install the module with npm install --save @kepler.gl/components or yarn add @kepler.gl/components, then follow the documentation at docs.kepler.gl. Kepler.gl is built on Mapbox and requires a Mapbox Access Token for base map rendering.

How it compares

The facts do not name a competing paid product that Kepler.gl replaces, and no direct peer tool is listed in this registry. Kepler.gl layers on top of deck.gl and MapLibre GL rather than competing with them, and it depends on Mapbox for base map rendering through an access token, so the rendering foundation and the tile source are both external dependencies.

When to use it — and when not to

A self-hoster must supply a Mapbox Access Token, which means a third-party account and service sit underneath the deployment. Development is pinned to Node 20.19.3 as recorded in .nvmrc, because newer Node versions can make yarn install and yarn bootstrap compile the gl dev dependency from source and fail. The project carries 452 open issues, and the supplied README is sparse on production deployment specifics, so teams that need a fully self-contained stack with no external token should look elsewhere.

project readme (upstream, from github) — read inline

version build stars MIT License Fossa Netlify Status Coverage Status

kepler.gl | Website | Demo App | Docs

Kepler.gl

[Kepler.gl][web] is a data-agnostic, high-performance web-based application for visual exploration of large-scale geolocation data sets. Built on top of MapLibre GL and deck.gl, kepler.gl can render millions of points representing thousands of trips and perform spatial aggregations on the fly.

Kepler.gl is also a React component that uses Redux to manage its state and data flow. It can be embedded into other React-Redux applications and is highly customizable. For information on how to embed kepler.gl in your app take a look at the documentation.

Links

  • [Website][web]
  • [Demo][demo-app]
  • [Examples][examples]
  • [Get Started][get-started]
  • [App User Guide][user-guide]
  • [Jupyter Widget User Guide][user-guide-jupyter]
  • [Documentation][docs]
  • [Stack Overflow][stack]
  • [Contribution Guidelines][contributing]
  • [Api Reference][api-reference]
  • [Roadmap][roadmap]

Env

For developing this repository, use Node 20.19.3 (see .nvmrc): run nvm install and nvm use. Newer Node versions can make yarn install / yarn bootstrap try to compile the gl dev dependency from source; if that fails, see Troubleshooting: gl package install.

When using kepler.gl as a dependency in your own app, use Node 20.19.3 or a supported LTS; older Node versions are not supported or tested.

Install kepler.gl modules

Kepler.gl consists of different modules. Each module can be added to the project like this:

npm install --save @kepler.gl/components
// or
yarn add @kepler.gl/components

kepler.gl is built upon [mapbox][mapbox]. You will need a [Mapbox Access Token][mapbox-token] to use it.

If you don't use a module bundler, it's also fine. Kepler.gl npm package includes precompiled production UMD builds in the umd folder. You can add the script tag to your html file as it follows (latest version of Kepler.gl):

<script src="https://unpkg.com/kepler.gl/umd/keplergl.min.js" />

or if you would like, you can load a specific version:

<script src="https://unpkg.com/[email protected]/umd/keplergl.min.js" />

Develop kepler.gl

Take a look at the [development guide][developers] to develop kepler.gl locally.

The SQLRooms demo tests a collapsible application shell and modular panel layout using @kepler.gl/sqlrooms. Run it with yarn start:sqlrooms (port 8083), alongside the original main demo with yarn start (port 8080). The website continues to serve the original app at /demo.

Basic Usage

Here are the basic steps to import kepler.gl into your app. You also take a look at the examples folder. Each example in the folder can be installed and run locally.

1. Mount reducer

Kepler.gl uses Redux to manage its internal state, along with a built-in task middleware to handle async side effects.

You need to add taskMiddleware to your store. The easiest way is via enhanceReduxMiddleware from @kepler.gl/reducers:

import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
import keplerGlReducer, {enhanceReduxMiddleware} from '@kepler.gl/reducers';

const initialState = {};
const reducers = combineReducers({
  // <-- mount kepler.gl reducer in your app
  keplerGl: keplerGlReducer,

  // Your other reducers here
  app: appReducer
});

// using createStore
export default createStore(
  reducer,
  initialState,
  applyMiddleware(
    enhanceReduxMiddleware([
      /* Add other middlewares here */
    ])
  )
);

Or if use enhancer:

// using enhancers
const initialState = {};
const middlewares = enhanceReduxMiddleware([
  // Add other middlewares here
]);
const enhancers = [applyMiddleware(...middlewares)];

export default createStore(reducer, initialState, compose(...enhancers));

If you mount kepler.gl reducer in another address instead of keplerGl, or the kepler.gl reducer is not mounted at root of your state, you will need to specify the path to it when you mount the component with the getState prop.

Read more about [Reducers][reducers].

2. Mount Component

import KeplerGl from '@kepler.gl/components';

const Map = props => (
  <KeplerGl id="foo" width={width} mapboxApiAccessToken={token} height={height} />
);

Props

Prop Name Type Default Value Description
id String map The unique identifier for the KeplerGl instance. Required when multiple KeplerGl instances exist. It maps to the state in the reducer (e.g. component with id foo can be found instate.keplerGl.foo).
mapboxApiAccessToken String undefined API token for Mapbox, used for rendering base maps. Create a free token at Mapbox.
getState Function state => state.keplerGl Function that specifies the path to the root KeplerGl state in the reducer.
width Number 800 The width of the KeplerGl UI in pixels.
height Number 800 The height of the KeplerGl UI in pixels.
appName String Kepler.Gl The app name displayed in the side panel header.
version String v1.0 The version displayed in the side panel header.
onSaveMap Function undefined A function called when the "Save Map URL" in side panel header is clicked.

readme truncated — read the full docs on github

Frequently asked questions

Is kepler.gl free to use?

kepler.gl is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does kepler.gl do?

Kepler.gl is a powerful open source geospatial analysis tool for large-scale data sets.

What is kepler.gl written in?

kepler.gl is primarily written in TypeScript. Its source is publicly available at https://github.com/keplergl/kepler.gl, and it has 12,013 GitHub stars.