FlowscopeDocs

Quickstart

Build the recorder, run it on your machine and serve what it records to the desktop app through a data hub.

This page gets a recorder running locally, then a data hub that records the same way and serves it to a desktop client. You need the repository and the pinned Rust toolchain, the same as for the app.

1. Build

Terminal
cargo build --release -p flowscope-recorder

The binary is target/release/flowscope-recorder.

2. Run

With no flags the recorder records BTC on every venue into ./flowscope-data and listens on 127.0.0.1:8787:

Terminal
./target/release/flowscope-recorder

The defaults:

SettingDefault
MarketsBinanceUsdm:BTCUSDT, BinanceSpot:BTCUSDT, Okx:BTC-USDT-SWAP, Bybit:BTCUSDT, Hyperliquid:BTC
Data directoryflowscope-data (relative to where you start it)
Listen address127.0.0.1:8787
Hyperliquid positionsBTC, ETH, SOL, HYPE
Retention90 days

To choose markets and a directory:

Terminal
./target/release/flowscope-recorder \
  --markets BinanceUsdm:BTCUSDT,BinanceUsdm:ETHUSDT,Okx:BTC-USDT-SWAP \
  --dir ./flowscope-data

Markets are written Venue:SYMBOL. Venue names are BinanceSpot, BinanceUsdm, Bybit, Okx and Hyperliquid, case-insensitive. Every flag is listed in Configuration.

3. Watch it work

The recorder logs at info level. Once a minute it prints, per market, how many minutes of the last six hours are full, partial, loading, unavailable or missing, whether the current minute is live, and its memory:

Text
INFO flowscope_recorder: recording markets=5 dir=flowscope-data listen=127.0.0.1:8787
INFO flowscope_recorder: recording hyperliquid positions coins=["BTC", "ETH", "SOL", "HYPE"]
INFO flowscope_recorder: coverage market=BinanceUsdm:BTCUSDT full=355 partial=1 loading=4 unavailable=0 missing=0 live=true mb=41

Timestamps are left out above, and the numbers are illustrative. Set RUST_LOG to change the level, for example RUST_LOG=debug.

It records what arrives live, from the moment it starts. Nothing is backfilled from venue trade history: minutes before the start, or lost to a disconnect, stay unrecorded.

Check the HTTP side from another terminal:

Terminal
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/v1/markets
curl http://127.0.0.1:8787/v1/segments/BinanceUsdm_BTCUSDT/
Text
ok
BinanceSpot_BTCUSDT
BinanceUsdm_BTCUSDT
Bybit_BTCUSDT
Hyperliquid_BTC
Okx_BTC-USDT-SWAP
2026-10-04

A market appears in /v1/markets once its first segment is saved. Segments are saved every 60 seconds.

4. Stop it

Press Ctrl+C. The recorder saves every market’s history and the Hyperliquid day files, then exits.

Warning

The recorder saves on exit only when it receives an interrupt (SIGINT, what Ctrl+C sends). A plain SIGTERM ends it without the final save; up to one save interval of data is lost. Under systemd, set KillSignal=SIGINT. See Deployment.

5. Serve it to the desktop through a hub

The desktop does not read a recorder directly: it takes every market and its history from the Flowscope data hub. The hub runs the same recorder inside and takes the same options after its own, so start it on the same directory instead of the recorder (not beside it: both would write the directory):

Terminal
cargo build --release -p flowscope-hub
./target/release/flowscope-hub --open \
  --markets BinanceUsdm:BTCUSDT,BinanceUsdm:ETHUSDT,Okx:BTC-USDT-SWAP \
  --dir ./flowscope-data --listen 127.0.0.1:8790
FLOWSCOPE_HUB_URL=http://127.0.0.1:8790 ./target/release/flowscope

--open serves requests without a key; use it only locally. From the repository, make hub and make desktop do the same with RECORD_MARKETS and RECORD_DIR.

Open a footprint chart of a recorded market and scroll back. Days the hub holds load from it; before its recording began, the chart has no bars.

For Hyperliquid coins the hub tracks, the Hyperliquid take-profit, stop-loss and liquidation heatmaps and the positioning footprints now load from the hub too.

Next steps