finds.dev← search

// the find

xbbg-org/xbbg

★ 783 · Rust · Apache-2.0 · updated Jun 2026

Intuitive Data Workflows

xbbg is a Bloomberg Terminal client for Python (and experimentally Node), backed by a Rust engine via PyO3/napi-rs. It replaces the old pure-Python line with a compiled core that handles async worker pools, Arrow-shaped data movement, and all the Bloomberg wire protocol complexity. The target audience is quants and engineers at firms that already pay for Bloomberg access.

The separated request/subscription worker pools are the right call — live market data streams and batch BDH calls no longer compete for the same blocking session, which is exactly where raw blpapi code falls over in production. The Narwhals output backend means you pass backend=Backend.POLARS or backend=Backend.DUCKDB and the same call works without restructuring anything, rather than wrapping pandas DataFrames after the fact. Install footprint of 22 MB versus 88 MB for pdblp+pandas is a genuine advantage when you're containerizing Bloomberg-connected services. The testing helpers (mock_engine, create_mock_response) let you unit-test Bloomberg workflows against recorded responses — the alternatives make you either hit live data or hand-roll your own mocks.

This only works if you already have Bloomberg access — Terminal, SAPI/B-PIPE, or a ZFP leased line. The Bloomberg C++ SDK isn't bundled, isn't open source, and has to be staged manually before you can even build. The audience is therefore Bloomberg customers with institutional contracts, not the general open-source developer. The Node bindings are explicitly alpha and ship prebuilt natives for exactly three targets (macOS arm64, Linux x64, Windows x64); Linux arm64 is missing, which is increasingly where containerized workloads run. The pixi-based dev environment adds one more tool to install and understand, and the sdktool.sh script that stages the Bloomberg SDK is a manual step that can fail silently depending on how your Bloomberg environment is set up. The Narwhals fallback chain (PyArrow → other libs → native Arrow carrier) is sensible but the actual output type you get back depends on what's installed, which makes type-checking the return value annoying.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →