AGGR

Live multi-exchange tape and liquidations in one chart — GPL-3.0, and yours to host.

Last updated

From
Free
Latency
Realtime
Licence
GPL-3.0
Self-hosted
Yes

What it is

A browser application that opens a websocket to every exchange you tick, merges the trades into one tape and draws it. Not a chart with a volume pane bolted on — the aggregation is the product. Each bar it stores carries buy volume and sell volume separately, buy and sell trade counts separately, and liquidation volume by side, which is why its own indicator library ships things like Cumulative Volume Delta across selected spot markets and Cumulative Liquidations Delta rather than another moving average.

The repository registers 26 exchange adapters, of which three are Binance — spot, USD-M and COIN-M futures, and Binance.US, each a separate feed. The other 23 are Aster, Bitfinex, Bitget, BitMart, BitMEX, Bitstamp, Bitunix, Bybit, Coinbase, Crypto.com, Deribit, dYdX, Gate.io, HitBTC, Huobi, Hyperliquid, Kraken, KuCoin, MEXC, OKX, Phemex, Poloniex and WhiteBIT. A twenty-seventh entry in the same registry is not an exchange at all: it is the project's own sentiment feed, carrying two synthetic products.

The layout is a draggable grid of eight pane types — chart, trades, a lighter trades list, statistics, counters, prices, alerts, and a pane that embeds an arbitrary web page beside the others. Indicators are written in a small domain-specific language, saved per workspace, and shared through a public library.

Liveness, in dates. Eleven commits on master in the twelve months to 21 September 2026, four of them in 2026, ten of the eleven by the repository owner. The most recent is 3 May 2026 and its subject line is a fix restoring Binance futures liquidations. The hosted build's index.html is served by the project's own nginx with a Last-Modified of 6 May 2026 at 10:57 UTC, within a minute of the same day's push — so the deployment tracks the repository rather than lagging it. The repository is not archived and carries 55 open issues and one open pull request, counted through the search API; the repository's own open_issues_count field reports 57, because it does not separate issues from pull requests.

Pricing

Free, GPL-3.0, and there is genuinely nothing for sale. No hosted tier, no key, no account, no paid edition. Grepping a fresh clone of the default branch for the words a paid tier and a sign-up leave behind finds no paywall, no sign-up and no login: the one hit for premium is a sample indicator that plots the futures basis, and the one hit for login is a variable name in a colour picker. The entire commercial surface is a donation menu in the settings panel with three wallet addresses and a Coinbase Commerce checkout link.

The cost that is real is a server. Live trades cost nothing because they arrive in your browser, but history, and alerts that survive a closed tab, come from an aggr-server instance. The project runs one and points the public build at it. Running your own means a machine that stays up, a disk that keeps filling, and either flat files or InfluxDB 1.8 underneath.

Data & coverage

The browser is the client, which changes who the exchange sees. Every adapter's getUrl returns the venue's own public websocket, and the tab connects to it directly. Nobody's tape sits in between, and nothing in the worker code issues, stores or signs with an exchange API key — grepping a clone of it for the usual field names and for a request signature finds none. That also means the rate limits and the terms that apply are the exchange's, applied to your IP. That is the one case where those terms are least restrictive: personal, internal use is what every document in exchange API terms grants outright. Recording the same tape on a server other people can reach is the case where they start to bite.

Instrument lists are the exception, and they go through the project's host. Product lists are REST rather than websocket, so they need CORS, and the production build prefixes them with the project's own proxy. Hyperliquid's endpoint is marked to skip the proxy; the rest do not. The proxy answered normally on 21 September 2026 when called with a browser's Referer and user agent, and 404s without them.

What a stored bar actually contains. Open, high, low and close, plus vbuy and vsell, cbuy and csell, and lbuy and lsell. Buy and sell volume, buy and sell trade counts, liquidation volume long and short. Those six fields are what the indicator language reads, and they are the reason to use this rather than a generic chart pointed at the same venues.

History on the public instance starts on 1 January 2021. A request for Binance BTC/USDT daily bars covering June 2020 returns an empty result set; the same request for January 2021 returns bars, opening at 28,923.63. The instance records 769 markets across 24 of the 26 exchange feeds — HitBTC and WhiteBIT have nothing stored, although the client will stream them live. The timeframe argument is in milliseconds, which is easy to get wrong, because the app's own settings list timeframes in seconds; asking for 3600 produces an error complaining that a 3.6-second timeframe is not supported.

Liquidations are real but uneven. Daily bars for the week to 21 September 2026 carry substantial liquidation volume on Binance futures and Bybit and exactly zero on Hyperliquid, and the reason is in the adapter: Hyperliquid's subscribes to the trades channel and nothing else. Binance futures subscribes to forceOrder alongside trades, which is where its numbers come from.

No funding, no open interest, no options. None of the 26 adapters mentions a funding rate or open interest. The Deribit adapter requests instruments with kind=future only, so no options series reaches the app at any point. And the DEX side is two order-book perpetual venues, dYdX v4 and Hyperliquid, read through their own indexer and API — there is no AMM pool data, because the Uniswap adapter was removed in version 3.8.3 on 29 November 2025.

Integrations

The historical API is public and unauthenticated. It belongs to aggr-server rather than to the client, its OpenAPI schema lives in that repository, and the project's public instance answers without a key: /products returns the recorded market list, /historical/{from}/{to}/{timeframe}/{markets} returns bars in a column-indexed array format, and /alert takes a push subscription. Nothing documents a rate limit, and nothing suggests it is offered as a product — treat it as the chart's backend that happens to be open, not as a feed to build on. If you want a feed with terms attached, that is market data APIs.

Alerts are Web Push, not a browser notification loop. The client registers a service worker, subscribes through the push manager against a VAPID key, and posts the subscription to the server instance. That is why alerts work with the tab closed, and also why they stop working if the instance you pointed at is not running.

The indicator language is small, documented in the app, and built around the six fields above. Scripts are written in a Monaco editor with autocompletion and a reference pane fed by 42 Markdown pages that ship in the source tree — one per built-in. The vocabulary is a plot type (line, area, histogram, candlestick, baseline, cloudarea, brokenarea), a series helper (sma, ema, cma, rma, linreg, stoch, cum, sum, highest, lowest, pivot_high, pivot_low, heikinashi), and a source() call that filters which of the markets on the pane feed the calculation — by exchange, by spot or perp, or by a regular expression on the symbol. That last one is what makes cross-venue work natural here: a two-line script plots the perp-to-spot basis, or Binance's spot delta on its own. It is not JavaScript, though it is transpiled to it, and there is no published grammar outside those 42 pages.

The indicator library is a git repository behind a URL. The public library serves 42 indicators, 29 of them published under the project's own name and 13 by eleven other authors, the newest added on 9 February 2026. The matching presets and workspaces endpoints exist and currently return empty lists. Publishing from inside the app opens a pull request against a separate repository, which is moderation by review rather than an upload button.

The chart engine is a fork of somebody else's. package.json pins lightweight-charts to a git commit on the maintainer's own fork of TradingView Lightweight Charts, which was last pushed on 28 February 2024. That is a deliberate fork with changes upstream does not carry, and it is also a dependency frozen two and a half years ago.

Self-hosting is documented and short. docker-compose for the client, a second compose file that wires it to a local aggr-server, or a plain npm install and npm run build against a .env.local naming your own API and proxy URLs. The server stores to flat files by default, InfluxDB 1.8 optionally, and a binary store beside them.

Limitations

The server half is published without a licence. aggr-server has no LICENSE file, no licence field in its manifest, and GitHub's licence endpoint returns 404 for it. Under default copyright that is all rights reserved: you may read it on GitHub, and nothing in writing says you may run a modified copy, redistribute it or build a service on it. The GPL-3.0 on the client does not reach it — they are separate repositories. For a personal instance nobody will care; for anything with users, this is the clause to resolve before the work starts, not after.

Releases stopped being the way to track it in 2024. The last tagged release is 3.6.1 from 14 August 2024. package.json says 3.8.3, the CHANGELOG's final entry is 3.8.3 dated 29 November 2025, and every commit since is untagged. Anyone installing by release tag is two minor versions and two years behind the code that is actually deployed.

One maintainer, four commits this year. Four commits in 2026, the last on 3 May, and nothing in the four and a half months since. That is alive rather than abandoned — the fix in May was a real one — but an exchange that changes its websocket protocol is not going to be patched the same week, and 55 open issues is what a single-maintainer project with 1,147 stars accumulates.

Google Tag Manager is compiled into the build. The container ID is hardcoded in index.html in the repository, not injected at deploy time, so a self-hosted copy ships the project's own tag manager unless you delete those lines before building. The same is true of the GIF feature — trades over a size threshold can trigger a sound and an image, and the image is fetched from Giphy with an API key written into the source. Two third-party origins the page touches, on a tool whose selling point is that no vendor sits between you and the exchange.

Nothing exports a price series. Workspaces, presets and individual indicators download as JSON, and the whole local database exports as a Dexie JSON blob — those are your settings, not your data. There is no CSV anywhere in the source tree, and no export path that hands you bars. If you want the tape in a dataframe, you are calling the server's HTTP endpoint yourself or looking at Tardis.dev.

No order entry, no screening, no backtesting. You cannot trade from it, and the prices pane is a sortable watchlist of markets you already added rather than a screener over a venue's whole symbol list. It charts a tape; everything else is somewhere else on this site.

It is one browser tab holding dozens of websockets. Every connection, every aggregation and every indicator runs on your machine, in web workers, in one page. That is the architecture that makes the licensing simple and the data unmediated, and it is also the reason the app ships a dedicated connection-issue dialog.

Alternatives

If what you want is the derivatives state of the market rather than its tape — funding, open interest, liquidation heatmaps across thirty venues — this is the wrong shape and CoinGlass, Coinalyze and Hyblock Capital are built for exactly that.

If you want the aggregated tape and a ticket to trade it from, that is the terminals category: Velo and Tealstreet put order entry next to a multi-venue screen, and Bookmap and ATAS go considerably deeper into order flow and footprint than a merged trade list does — at a desktop install and a monthly price.

If you are here for the habit rather than the tape, TradingView has the drawing tools, the scripting language and the layouts, and none of the per-side volume and liquidation fields that this one is built around. And if you want to record the same websockets yourself rather than watch them, CCXT is the client and Tardis.dev is the archive somebody already recorded.

Specs

Interfaces
API, AGGR indicator script
Export
JSON
Asset classes
Spot, Perpetuals, Futures
Chains
Venues
CEX, DEX, Derivatives
KYC required
No
Platforms
Web
AI features
None
Capabilities
Charting, Alerts, Derivatives analytics
Pricing verified
Capabilities verified
Coverage verified

Also worth comparing

  • GoChartingBrowser footprint and market-profile terminal, with crypto as one market of five.
  • TensorChartsOrder-book and trade heatmaps on five venues — live data on a codebase dated 2018.
  • TradingViewThe chart everyone else embeds, sold as a subscription — and crypto is one market on it.
  • DXcharts LiteThe MPL-2.0 renderer under a broker charting product — candles and axes, no indicators.
  • KLineChartZero-dependency candle engine with no market-hours rules to switch off for 24/7.
  • TradingView Lightweight ChartsApache-2.0 canvas renderer for candles and lines. No indicators, no drawing tools.

On these shelves

Background

How this part of the industry works, rather than which product to pick.

  • A token threshold is not a priceSome tools unlock features by requiring you to hold the vendor's token, not pay it. What that really costs, and why it cannot be compared with a monthly fee.

FAQ

What licence is AGGR under, and does it cover the whole thing?

The client is GPL-3.0 — the LICENSE file at the root of the default branch carries the full GNU GPL v3 text, and the repository metadata agrees. The companion repository that stores historical data, aggr-server, has no LICENSE file at all and GitHub's licence endpoint returns 404 for it. So the half you run in a browser is copyleft-licensed and the half that keeps your history is published without a grant. Checked 21 September 2026.

Where does the data come from?

Your own browser, straight to each venue. Every adapter in the repository opens the exchange's own public websocket — fstream.binance.com, stream.bybit.com, api.hyperliquid.xyz, indexer.dydx.trade and so on — and no key is issued anywhere in the code. Instrument lists are the exception, because those are REST calls that need CORS, and the production build routes them through the project's own proxy host.

Does it show funding rates or open interest?

No. Searching all 26 exchange adapters on the default branch for funding or open-interest fields returns nothing. What it does carry that a plain chart does not is per-side volume, per-side trade counts and liquidation volume by side, which is the whole point of the aggregator. For funding and open interest the derivatives screeners in this category are the answer.

How much history do I get without running anything myself?

For markets the project's public instance records, quite a lot. A request for daily bars on Binance BTC/USDT returns data back to 1 January 2021 and nothing before it, and the instance carries 769 markets across 24 exchange feeds. Everything outside that list is live-only in the browser unless you run your own server, which starts recording from zero the day you start it.

Do I need an account?

No. There is no login, signup or auth code anywhere in the repository, no key to obtain and no wallet to connect. Workspaces, layouts and indicators live in your browser's IndexedDB, and the export button hands you a JSON file. Publishing an indicator to the shared library is the one thing that reaches outside, and it is done as a pull request against a separate repository.

Is it still maintained?

Slowly, by one person. Eleven commits landed on the default branch in the twelve months to 21 September 2026, four of them in 2026, and ten of the eleven were by the same author. The last was 3 May 2026 and restored Binance futures liquidations; the hosted build's index.html carries a Last-Modified of 6 May 2026 from the project's own nginx. The last tagged release is 3.6.1 from August 2024, two minor versions behind the code.