# AGGR

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

*https://cryptomarkets.tools/tools/aggr · Crypto Charting Platforms & Libraries*

## Facts

### At a glance

| Field | Value |
| --- | --- |
| Vendor | AGGR |
| Category | Crypto Charting Platforms & Libraries |
| Job | charting |
| Website | https://aggr.trade/ |
| Pricing model | open-source |
| Free tier | true |
| Open source | true |
| Licence | GPL-3.0 |
| Self-hosted | true |
| KYC required | false |
| Tested hands-on | false |
| Last updated | 2026-09-21 |

### Coverage

| Field | Value |
| --- | --- |
| Asset classes | spot, perpetuals, futures |
| Chains | none |
| Venues | cex, dex, derivatives |
| Data latency | realtime |
| Platforms | web |
| AI features | none |

### Interfaces

| Field | Value |
| --- | --- |
| API | true |
| Webhooks | false |
| Scripting | AGGR indicator script |
| MCP server | false |
| Export | json |

### Capabilities

Yes: charting, alerts, derivatives_analytics

No: screening, backtesting, automation, live_trading, paper_trading, portfolio_tracking, exchange_import, tax_reporting, news, onchain_data, wallet_tracking

*Verified: pricing 2026-09-21; capabilities 2026-09-21; coverage 2026-09-21.*

## 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](https://cryptomarkets.tools/guides/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](https://cryptomarkets.tools/categories/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](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/coinglass-web), [Coinalyze](https://cryptomarkets.tools/tools/coinalyze) and
[Hyblock Capital](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/velo) and [Tealstreet](https://cryptomarkets.tools/tools/tealstreet) put order entry next to a
multi-venue screen, and [Bookmap](https://cryptomarkets.tools/tools/bookmap) and [ATAS](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/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](https://cryptomarkets.tools/tools/ccxt) is the client and
[Tardis.dev](https://cryptomarkets.tools/tools/tardis-dev) is the archive somebody already recorded.

## 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.

## Also worth comparing

- [GoCharting](https://cryptomarkets.tools/tools/gocharting.md) — Browser footprint and market-profile terminal, with crypto as one market of five.
- [TensorCharts](https://cryptomarkets.tools/tools/tensorcharts.md) — Order-book and trade heatmaps on five venues — live data on a codebase dated 2018.
- [TradingView](https://cryptomarkets.tools/tools/tradingview.md) — The chart everyone else embeds, sold as a subscription — and crypto is one market on it.
- [DXcharts Lite](https://cryptomarkets.tools/tools/dxcharts-lite.md) — The MPL-2.0 renderer under a broker charting product — candles and axes, no indicators.
- [KLineChart](https://cryptomarkets.tools/tools/klinechart.md) — Zero-dependency candle engine with no market-hours rules to switch off for 24/7.
- [TradingView Lightweight Charts](https://cryptomarkets.tools/tools/tradingview-lightweight-charts.md) — Apache-2.0 canvas renderer for candles and lines. No indicators, no drawing tools.
