Skip to main content

Intuitive Bloomberg data API

Project description

xbbg logo

xbbg: An intuitive Bloomberg API for Python

PyPI version Python versions PyPI Downloads Discord

Buy Me a Coffee

Quick Links: DiscordDocumentationInstallationQuickstartExamplesContributingChangelog


Latest release: xbbg==1.0.0rc2 (release: notes)

This main branch now tracks the Rust-based v1 beta line, a significant upgrade over 0.x in performance and architecture. Need the legacy pure-Python behavior? Use release/0.x.

Table of Contents

Overview

xbbg is a comprehensive Bloomberg API wrapper for Python, providing a clean, Pythonic interface to Bloomberg data services. This main branch is the v1 beta generation: core request execution is now Rust-powered while preserving the familiar xbbg API for day-to-day workflows.

Key Features

Complete API Coverage

  • Reference data (BDP/BDS)
  • Historical time series (BDH)
  • Intraday bars and tick data
  • Real-time subscriptions
  • BQL, BEQS, and BSRCH queries
  • Technical analysis (BTA)

Production-Grade Features

  • Parquet caching for intraday bars
  • Async/await support for non-blocking operations
  • Multi-backend output (pandas, Polars, PyArrow, DuckDB)
  • Full type hints for IDE integration
  • Comprehensive error handling
  • Exchange-aware market hours

Excel Compatibility

  • Familiar Bloomberg Excel syntax
  • Same field names and date formats
  • Minimal learning curve for Excel users
  • Direct migration path from Excel workflows

Developer Experience

  • Consistent, intuitive API design
  • Extensive documentation and examples
  • Active community support (Discord)
  • Regular updates and maintenance
  • Semantic versioning

Quick Example

from xbbg import blp

# Reference data
prices = blp.bdp(['AAPL US Equity', 'MSFT US Equity'], 'PX_LAST')

# Historical data
hist = blp.bdh('SPX Index', 'PX_LAST', '2024-01-01', '2024-12-31')

# Intraday bars with sub-minute precision
intraday = blp.bdib('TSLA US Equity', dt='2024-01-15', interval=10, intervalHasSeconds=True)

See examples/xbbg_jupyter_examples.ipynb for comprehensive tutorials and examples.

Why Choose xbbg?

xbbg is the most complete and production-ready Bloomberg API wrapper for Python, trusted by quantitative researchers and financial engineers worldwide. Here's what sets it apart:

🎯 Unmatched Feature Coverage

xbbg is the only Python library that provides:

  • Complete Bloomberg API access: All major services (Reference, Historical, Intraday, Real-time, BQL, BEQS, BSRCH)
  • Sub-second precision: Down to 10-second intraday bars (unique to xbbg)
  • Real-time streaming: Live market data with async support
  • Advanced utilities: Futures/CDX contract resolution, currency conversion, market hours

📊 Production-Grade Features

  • Intraday caching: Automatic Parquet storage for bdib() bar data
  • Async/await support: Non-blocking operations for modern Python applications
  • Exchange-aware sessions: Precise market hour handling for 50+ global exchanges
  • Type safety: Full type hints for IDE autocomplete and static analysis
  • Comprehensive error handling: Clear, actionable error messages

💡 Developer Experience

  • Excel-compatible: Use familiar Bloomberg Excel syntax - zero learning curve
  • Pythonic API: Consistent, intuitive function names (bdp, bdh, bdib)
  • Rich documentation: 100+ examples, Jupyter notebooks, comprehensive guides
  • Active community: Discord support, regular updates, responsive maintainers

🚀 Performance & Reliability

  • Battle-tested: Used in production by hedge funds, asset managers, and research teams
  • Modern Python: Supports Python 3.10-3.14 with latest language features
  • CI/CD pipeline: Automated testing across multiple Python versions and platforms
  • Semantic versioning: Predictable releases with clear upgrade paths

Comparison with Alternatives

Feature xbbg pdblp blp polars-bloomberg
Data Services
Reference Data (BDP/BDS)
Historical Data (BDH)
Intraday Bars (BDIB)
Tick-by-Tick Data
Real-time Subscriptions
Advanced Features
Equity Screening (BEQS)
Query Language (BQL)
Quote Request (BQR)
Search (BSRCH)
Technical Analysis (BTA)
Yield & Spread Analysis (YAS)
Developer Features
Excel-compatible syntax
Sub-minute intervals (10s bars)
Async/await support
Intraday bar caching (Parquet)
Multi-backend output
Utilities
Currency conversion
Futures contract resolution
CDX index resolution
Exchange market hours
Project Health
Active development ❌[^1]
Python version support 3.10-3.14 3.8+ 3.8+ 3.12+
DataFrame library Multi-backend pandas pandas Polars
Type hints ✅ Full Partial ✅ Full
CI/CD testing

[^1]: pdblp has been superseded by blp and is no longer under active development.

Bottom line: If you need comprehensive Bloomberg API access with production-grade features, xbbg is the clear choice.

Complete API Reference

Reference Data - Point-in-Time Snapshots

Function Description Key Features
bdp() Get current/reference data Multiple tickers & fields
Excel-style overrides
ISIN/CUSIP/SEDOL support
bds() Bulk/multi-row data Portfolio holdings
Fixed income cash flows
Corporate actions
abdp() Async reference data Non-blocking operations
Concurrent requests
Web application friendly
abds() Async bulk data Parallel bulk queries
Same API as bds()
bflds() Unified field metadata Get field info or search by keyword
Single function for both use cases
fieldInfo() Field metadata lookup (alias for bflds) Data types & descriptions
Discover available fields
fieldSearch() Search Bloomberg fields (alias for bflds) Find fields by keyword
Explore data catalog
blkp() Find tickers by name Company name search
Asset class filtering
bport() Portfolio data queries Dedicated portfolio API
Holdings & weights

Fixed Income Analytics

Function Description Key Features
yas() Yield & Spread Analysis YAS calculator wrapper
YTM/YTC yield types
Price↔yield conversion
Spread calculations

Bond Analytics (via xbbg.ext)

Function Description Key Features
bond_info() Bond reference metadata Ratings, maturity, coupon
bond_risk() Duration and risk metrics Modified/Macaulay duration, convexity, DV01
bond_spreads() Spread analytics OAS, Z-spread, I-spread, ASW
bond_cashflows() Cash flow schedule Coupon and principal payments
bond_key_rates() Key rate durations Key rate DV01s and risks
bond_curve() Relative value comparison Multi-bond analytics

Options Analytics (via xbbg.ext)

Function Description Key Features
option_info() Contract metadata Strike, expiry, exercise type
option_greeks() Greeks and implied vol Delta, gamma, theta, vega, IV
option_pricing() Value decomposition Intrinsic/time value, activity
option_chain() Chain via overrides CHAIN_TICKERS with filtering
option_chain_bql() Chain via BQL Rich filtering, expiry/strike ranges
option_screen() Multi-option comparison Side-by-side analytics

CDX Analytics (via xbbg.ext)

Function Description Key Features
cdx_info() CDX reference metadata Series, version, constituents
cdx_defaults() Default history Settled defaults in index
cdx_pricing() Market pricing Spread, price, recovery rate
cdx_risk() Risk metrics DV01, duration, spread sensitivity
cdx_basis() Basis analytics CDX vs intrinsics spread
cdx_default_prob() Default probability Implied default rates
cdx_cashflows() Cash flow schedule Premium and protection legs
cdx_curve() Term structure Multi-tenor curve analytics

Historical Data - Time Series Analysis

Function Description Key Features
bdh() End-of-day historical data Flexible date ranges
Multiple frequencies
Dividend/split adjustments
abdh() Async historical data Non-blocking time series
Batch historical queries
dividend() Dividend & split history All dividend types
Projected dividends
Date range filtering
earnings() Corporate earnings Geographic breakdowns
Product segments
Fiscal period analysis
turnover() Trading volume & turnover Multi-currency support
Automatic FX conversion

Intraday Data - High-Frequency Analysis

Function Description Key Features
bdib() Intraday bar data Sub-minute bars (10s intervals)
Session filtering (open/close)
Exchange-aware timing
Timezone control (tz parameter)
bdtick() Tick-by-tick data Trade & quote events
Condition codes
Exchange/broker details

Screening & Advanced Queries

Function Description Key Features
beqs() Bloomberg Equity Screening Custom screening criteria
Private & public screens
bql() Bloomberg Query Language SQL-like syntax
Complex transformations
Options chain analysis
bqr() Bloomberg Quote Request Tick-level dealer quotes
Broker attribution codes
Spread price & yield data
Date offset support (-2d, -1w)
bsrch() SRCH (Search) queries Fixed income searches
Commodity screens
Weather data
bta() Technical Analysis 50+ technical indicators
Custom studies
etf_holdings() ETF holdings via BQL Complete holdings list
Weights & positions

Real-Time - Live Market Data

Function Description Key Features
subscribe() Real-time subscriptions Async iteration
Topic failure isolation
Health/status metadata
stream() Simplified streaming Context manager
Non-blocking updates
vwap() Real-time VWAP Streaming volume-weighted average price
mktbar() Real-time market bars Streaming OHLCV bars
depth() Market depth Streaming order book levels
chains() Option chains Real-time chain data

Utilities

Function Description Key Features
convert_ccy() Currency conversion Multi-currency DataFrames
Historical FX rates
Automatic alignment
fut_ticker() Futures contract resolution Generic to specific mapping
Date-aware selection
active_futures() Active futures selection Volume-based logic
Roll date handling
cdx_ticker() CDX index resolution Series mapping
Index family support
active_cdx() Active CDX selection On-the-run detection
Lookback windows

Schema Introspection

Function Description Key Features
bops() List service operations Discover available request types
bschema() Get operation schema Field definitions, types, enums
list_valid_elements() Valid request elements Check parameter names before sending
get_enum_values() Enum values for a field Discover valid override values
generate_stubs() IDE stub generation Auto-complete for request parameters

Engine Lifecycle

Function Description Key Features
configure() Engine and session setup Server host/port, auth, options
Replaces connect() / disconnect()
shutdown() Stop engine and sessions Graceful cleanup
reset() Reset engine state Clear sessions and caches
is_connected() Check connection status Boolean connectivity check

Request Middleware

Function Description Key Features
add_middleware() Register request middleware Logging, caching, instrumentation
remove_middleware() Unregister middleware Clean removal
RequestContext Request metadata Request ID, request payload, timing, results
RequestEnvironment Engine/auth snapshot Host, auth method, validation mode, server list

Additional Features

  • Intraday Caching: Automatic Parquet storage for bdib() bar data
  • Timezone Support: Exchange-aware market hours for 50+ global exchanges; bdib() / bdtick() support request_tz and output_tz (interpretation and time-column relabeling in the Rust engine; Bloomberg wire format remains UTC)
  • Configurable Logging: Debug mode for troubleshooting
  • Batch Processing: Efficient multi-ticker queries
  • Standardized Output: Consistent DataFrame column naming
  • Non-live test helpers: xbbg.testing exposes mock_engine() and TestUtil-backed helpers for unit testing Bloomberg flows without a live terminal

Requirements

  • Bloomberg C++ SDK version 3.12.1 or higher:

    • Visit Bloomberg API Library and download C++ Supported Release
    • For local source builds in this repo, install it with bash ./scripts/sdktool.sh on macOS/Linux or .\scripts\sdktool.ps1 on Windows PowerShell
    • If you manage the SDK yourself, set BLPAPI_ROOT to the extracted SDK root
  • Bloomberg official Python API:

pip install blpapi --index-url=https://blpapi.bloomberg.com/repository/releases/python/simple/
  • Python dependencies (core): narwhals>=1.30, pyarrow>=22.0.0

  • Optional backends (install separately if needed):

    • pandas - For pandas DataFrame output (pip install pandas)
    • polars - For Polars DataFrame output
    • duckdb - For DuckDB relation output

Installation

pip install xbbg

Supported Python versions: 3.10 – 3.14 (universal wheel).

Quickstart

Basic Usage

from xbbg import blp

# Get current stock prices
prices = blp.bdp(['AAPL US Equity', 'MSFT US Equity'], 'PX_LAST')
print(prices)

Common Workflows

📊 Get Reference Data (Current Snapshot)
# Single ticker, multiple fields
info = blp.bdp('NVDA US Equity', ['Security_Name', 'GICS_Sector_Name', 'PX_LAST'])

# Multiple tickers, single field
prices = blp.bdp(['AAPL US Equity', 'MSFT US Equity', 'GOOGL US Equity'], 'PX_LAST')

# With overrides (e.g., VWAP for specific date)
vwap = blp.bdp('AAPL US Equity', 'Eqy_Weighted_Avg_Px', VWAP_Dt='20240115')
📈 Get Historical Data (Time Series)
# Simple historical query
hist = blp.bdh('SPX Index', 'PX_LAST', '2024-01-01', '2024-12-31')

# Multiple fields
ohlc = blp.bdh('AAPL US Equity', ['open', 'high', 'low', 'close'], '2024-01-01', '2024-01-31')

# With dividend/split adjustments
adjusted = blp.bdh('AAPL US Equity', 'px_last', '2024-01-01', '2024-12-31', adjust='all')

# Weekly data with forward fill
weekly = blp.bdh('SPX Index', 'PX_LAST', '2024-01-01', '2024-12-31', Per='W', Fill='P')
⏱️ Get Intraday Data (High Frequency)
# 5-minute bars
bars_5m = blp.bdib('SPY US Equity', dt='2024-01-15', interval=5)

# 1-minute bars (default)
bars_1m = blp.bdib('TSLA US Equity', dt='2024-01-15')

# Sub-minute bars (10-second intervals) - UNIQUE TO XBBG!
bars_10s = blp.bdib('AAPL US Equity', dt='2024-01-15', interval=10, intervalHasSeconds=True)

# Session filtering (e.g., first 30 minutes)
opening = blp.bdib('SPY US Equity', dt='2024-01-15', session='day_open_30')

# Get data in UTC instead of exchange local time
bars_utc = blp.bdib('SPY US Equity', dt='2024-01-15', tz='UTC')
🔍 Advanced Queries (BQL, Screening)
# Bloomberg Query Language
result = blp.bql("get(px_last) for('AAPL US Equity')")

# Equity screening
screen_results = blp.beqs(screen='MyScreen', asof='2024-01-01')

# ETF holdings
holdings = blp.etf_holdings('SPY US Equity')

# Search queries
bonds = blp.bsrch("FI:MYSEARCH")

# Dealer quotes with broker codes (BQR)
quotes = blp.bqr("XYZ 4.5 01/15/30@MSG1 Corp", date_offset="-2d")
🔧 Utilities (Futures, Currency, etc.)
# Resolve futures contract
contract = blp.fut_ticker('ES1 Index', '2024-01-15', freq='ME')  # → 'ESH24 Index'

# Get active futures
active = blp.active_futures('ESA Index', '2024-01-15')

# Currency conversion
hist_usd = blp.bdh('BMW GR Equity', 'PX_LAST', '2024-01-01', '2024-01-31')
hist_eur = blp.convert_ccy(hist_usd, ccy='EUR')

# Dividend history
divs = blp.dividend('AAPL US Equity', start_date='2024-01-01', end_date='2024-12-31')
Fixed Income Analytics (Bond, CDX)
from xbbg.ext import bond_info, bond_risk, bond_spreads, cdx_info, cdx_pricing

# Bond reference data
info = bond_info('T 4.5 05/15/38 Govt')

# Bond risk metrics (duration, convexity, DV01)
risk = bond_risk('T 4.5 05/15/38 Govt')

# Bond spreads (OAS, Z-spread, ASW)
spreads = bond_spreads('T 4.5 05/15/38 Govt')

# CDX index info
cdx = cdx_info('CDX IG CDSI GEN 5Y Corp')

# CDX pricing
px = cdx_pricing('CDX IG CDSI GEN 5Y Corp')
Options Analytics
from xbbg.ext import option_info, option_greeks, option_chain_bql

# Option contract metadata
info = option_info('AAPL US 01/17/25 C200 Equity')

# Greeks and implied volatility
greeks = option_greeks('AAPL US 01/17/25 C200 Equity')

# Option chain via BQL (rich filtering)
chain = option_chain_bql('AAPL US Equity', expiry='2025-01-17')

Best Practices

  • Excel users: Use the same field names and date formats as Bloomberg Excel
  • Performance: bdib() caches intraday bars as Parquet files automatically (see Data Storage)
  • Async operations: Use abdp(), abdh(), abds() for non-blocking requests
  • Debugging: Set logging.getLogger('xbbg').setLevel(logging.DEBUG) for detailed logs

Connection Options

By default, xbbg connects to localhost on port 8194. To connect to a remote Bloomberg server or configure authentication, use configure():

from xbbg import blp

# Connect to a remote Bloomberg server
blp.configure(server_host='192.168.1.100', server_port=18194)

# With SAPI authentication
blp.configure(
    server_host='192.168.1.100',
    server_port=18194,
    auth_method='app',
    app_name='myapp:SAPI',
)

# All subsequent calls use the configured connection
blp.bdp(tickers='NVDA US Equity', flds=['Security_Name'])

You can also pass server and port as kwargs to individual function calls for ad-hoc connections.

Engine Architecture

xbbg v1 is powered by a Rust async engine with pre-warmed worker pools:

┌─────────────────────────────────────────────────┐
│                   xbbg Engine                   │
│                                                 │
│  ┌──────────────────────┐  ┌─────────────────┐  │
│  │  Request Worker Pool │  │ Subscription    │  │
│  │  (request_pool_size) │  │ Session Pool    │  │
│  │                      │  │ (sub_pool_size) │  │
│  │  Worker 1 ──session  │  │                 │  │
│  │  Worker 2 ──session  │  │  Session 1      │  │
│  │  ...                 │  │  ...            │  │
│  └──────────────────────┘  └─────────────────┘  │
│           │ round-robin          │ isolated      │
│           ▼                      ▼               │
│    bdp/bdh/bds/bdib       subscribe/stream       │
│    bql/bsrch/beqs         vwap/mktbar/depth      │
└─────────────────────────────────────────────────┘
  • Request workers each hold an independent Bloomberg session. Concurrent bdp/bdh/bds calls are dispatched round-robin across workers, so request_pool_size=4 allows 4 parallel Bloomberg requests.
  • Subscription sessions are isolated per session to avoid cross-contamination between topic streams. Each subscribe() call gets its own Bloomberg session from the pool.
  • Workers are pre-warmed at first use — sessions are started and services opened before your first request, eliminating cold-start latency.

EngineConfig Reference

Call configure() before any Bloomberg request to tune the engine. All fields have sensible defaults:

from xbbg import configure, EngineConfig

# Keyword arguments (most common)
configure(request_pool_size=4, subscription_pool_size=2)

# Or use an EngineConfig object
configure(EngineConfig(request_pool_size=4, subscription_pool_size=2))

Connection & Session

Parameter Default Description
host 'localhost' Bloomberg server host. Aliases: server_host, server
port 8194 Bloomberg server port. Alias: server_port
num_start_attempts 3 Retries before giving up on session start. Alias: max_attempt
auto_restart_on_disconnection True Auto-reconnect on session disconnect. Alias: auto_restart

Worker Pools

Parameter Default Description
request_pool_size 2 Number of pre-warmed request workers (parallel Bloomberg sessions for bdp/bdh/bds/etc.)
subscription_pool_size 1 Number of pre-warmed subscription sessions (isolated sessions for subscribe/stream)
warmup_services ['//blp/refdata', '//blp/apiflds'] Services to pre-open on startup

Subscription Tuning

Parameter Default Description
subscription_flush_threshold 1 Ticks buffered before flushing to Python (increase for throughput, decrease for latency)
subscription_stream_capacity 256 Backpressure buffer size per subscription stream
overflow_policy 'drop_newest' Slow consumer policy: 'drop_newest', 'drop_oldest', or 'block'

Internal Buffers

Parameter Default Description
max_event_queue_size 10000 Bloomberg SDK event queue depth
command_queue_size 256 Internal command channel capacity

Validation

Parameter Default Description
validation_mode 'disabled' Field validation: 'disabled', 'strict' (reject unknown fields), or 'lenient' (warn)
field_cache_path ~/.xbbg/field_cache.json Path for persistent field type cache. Set to customize location

Authentication (SAPI / B-PIPE)

Parameter Default Description
auth_method None Auth mode: 'user', 'app', 'userapp', 'dir', 'manual', or 'token'
app_name None Application name (required for app, userapp, manual)
user_id None Bloomberg user ID (required for manual)
ip_address None Bloomberg IP address (required for manual)
dir_property None Active Directory property (required for dir)
token None Auth token (required for token)

Auth mode examples:

# B-PIPE application auth
configure(auth_method='app', app_name='myapp:8888', host='bpipe-host')

# Manual auth (SAPI)
configure(auth_method='manual', app_name='myapp', user_id='12345', ip_address='10.0.0.1')

# Active Directory auth
configure(auth_method='dir', dir_property='mail')

Async Functions

Every sync function has an async counterpart prefixed with a — for example bdp()abdp(), bdh()abdh(), bdib()abdib(). In the v1 architecture, async implementations are the canonical source of truth and sync functions delegate via _run_sync().

In scripts (no existing event loop)

import asyncio
from xbbg import blp

async def get_data():
    df = await blp.abdp(tickers='AAPL US Equity', flds=['PX_LAST', 'VOLUME'])
    return df

async def get_multiple():
    # Concurrent requests — runs in parallel on a single thread
    results = await asyncio.gather(
        blp.abdp(tickers='AAPL US Equity', flds=['PX_LAST']),
        blp.abdp(tickers='MSFT US Equity', flds=['PX_LAST']),
        blp.abdh(tickers='GOOGL US Equity', start_date='2024-01-01'),
    )
    return results

data = asyncio.run(get_data())
multiple = asyncio.run(get_multiple())

In Jupyter notebooks

Jupyter already runs an event loop, so asyncio.run() will raise RuntimeError: asyncio.run() cannot be called from a running event loop. Use await directly in notebook cells instead:

from xbbg import blp

# Just await directly — Jupyter cells are already async
df = await blp.abdp(tickers='AAPL US Equity', flds=['PX_LAST', 'VOLUME'])

# Concurrent requests work the same way
import asyncio
results = await asyncio.gather(
    blp.abdp(tickers='AAPL US Equity', flds=['PX_LAST']),
    blp.abdp(tickers='MSFT US Equity', flds=['PX_LAST']),
)

Tip: If you don't need async, the sync functions (bdp, bdh, bdib, etc.) work everywhere — scripts, notebooks, and async contexts — without any special handling.

Benefits:

  • Non-blocking: doesn't block the event loop
  • Concurrent: use asyncio.gather() for parallel requests
  • Compatible: works with async web frameworks, Jupyter, and async codebases
  • Same API: identical parameters to sync versions (bdp, bds, bdh)

Multi-Backend Support

Starting with v0.11.0, xbbg is DataFrame-library agnostic. You can get output in your preferred format:

Supported Backends

Backend Type Output Best For
Eager Backends
pandas Eager pd.DataFrame Traditional workflows, compatibility
polars Eager pl.DataFrame High performance, large datasets
pyarrow Eager pa.Table Zero-copy interop, memory efficiency
narwhals Eager Narwhals DataFrame Library-agnostic code
modin Eager Modin DataFrame Pandas API with parallel execution
cudf Eager cuDF DataFrame GPU-accelerated processing (NVIDIA)
Lazy Backends
polars_lazy Lazy pl.LazyFrame Deferred execution, query optimization
narwhals_lazy Lazy Narwhals LazyFrame Library-agnostic lazy evaluation
duckdb Lazy DuckDB relation SQL analytics, OLAP queries
dask Lazy Dask DataFrame Out-of-core and distributed computing
ibis Lazy Ibis Table Unified interface to many backends
pyspark Lazy Spark DataFrame Big data processing (requires Java)
sqlframe Lazy SQLFrame DataFrame SQL-first DataFrame operations

Note: Lazy backends only support LONG, SEMI_LONG, LONG_TYPED, and LONG_WITH_METADATA output formats (not WIDE).

Check Backend Availability

from xbbg import get_available_backends, print_backend_status, is_backend_available

# List installed backends
print(get_available_backends())  # ['pandas', 'polars', 'pyarrow', ...]

# Check if a specific backend is available
if is_backend_available('polars'):
    print("Polars is installed!")

# Print detailed status of all backends
print_backend_status()

Usage

from xbbg import blp, Backend

# Get data as Polars DataFrame
df_polars = blp.bdp('AAPL US Equity', 'PX_LAST', backend=Backend.POLARS)

# Get data as PyArrow Table
table = blp.bdh('SPX Index', 'PX_LAST', '2024-01-01', '2024-12-31', backend=Backend.PYARROW)

# Get data as pandas (default)
df_pandas = blp.bdp('MSFT US Equity', 'PX_LAST', backend=Backend.PANDAS)

Output Formats

Control the shape of your data with the format parameter:

Format Description Use Case
long Tidy format with ticker, field, value columns Analysis, joins, aggregations
long_typed Typed value columns per data type Type-safe analysis, no casting needed
long_metadata String values with dtype column Serialization, debugging, data catalogs
semi_long One row per ticker, fields as columns Quick inspection
wide Tickers as columns (pandas only) Time series alignment, Excel-like
from xbbg import blp

# Long format (tidy data, default)
df_long = blp.bdp(['AAPL US Equity', 'MSFT US Equity'], ['PX_LAST', 'VOLUME'], format='long')

# Semi-long format (one row per ticker, fields as columns)
df_semi = blp.bdh('SPX Index', 'PX_LAST', '2024-01-01', '2024-12-31', format='semi_long')

Global Configuration

Set defaults for your entire session:

from xbbg import set_backend, Backend

# Set Polars as default backend
set_backend(Backend.POLARS)

# All subsequent calls use this default
df = blp.bdp('AAPL US Equity', 'PX_LAST')  # Returns Polars DataFrame

Why Multi-Backend?

  • Performance: Polars and PyArrow can be 10-100x faster for large datasets
  • Memory: Arrow-based backends use zero-copy and columnar storage
  • Interoperability: Direct integration with DuckDB, Spark, and other Arrow-compatible tools
  • Future-proof: Write library-agnostic code with narwhals backend

Examples

📊 Reference Data

Equity and Index Securities

from xbbg import blp

# Single point-in-time data (BDP)
blp.bdp(tickers='NVDA US Equity', flds=['Security_Name', 'GICS_Sector_Name'])
Out[2]:
               security_name        gics_sector_name
NVDA US Equity   NVIDIA Corp  Information Technology
# With field overrides
blp.bdp('AAPL US Equity', 'Eqy_Weighted_Avg_Px', VWAP_Dt='20181224')
Out[3]:
                eqy_weighted_avg_px
AAPL US Equity               148.75
# Multiple tickers and fields
blp.bdp(
    tickers=['AAPL US Equity', 'MSFT US Equity', 'GOOGL US Equity'],
    flds=['Security_Name', 'GICS_Sector_Name', 'PX_LAST']
)
Out[3a]:
                  security_name        gics_sector_name px_last
AAPL US Equity        Company A  Information Technology  150.25
GOOGL US Equity    Company B  Communication Services  165.30
MSFT US Equity   Company C  Information Technology  180.45
# Bulk/block data (BDS) - multi-row per ticker
blp.bds('AAPL US Equity', 'DVD_Hist_All', DVD_Start_Dt='20180101', DVD_End_Dt='20180531')
Out[8]:
               declared_date     ex_date record_date payable_date  dividend_amount dividend_frequency dividend_type
AAPL US Equity    2018-05-01  2018-05-11  2018-05-14   2018-05-17             0.73            Quarter  Regular Cash
AAPL US Equity    2018-02-01  2018-02-09  2018-02-12   2018-02-15             0.63            Quarter  Regular Cash

Fixed Income Securities

xbbg supports fixed income securities using standard security identifiers (ISIN, CUSIP, SEDOL). Use the /isin/{isin}, /cusip/{cusip}, or /sedol/{sedol} format as the ticker:

# Reference data using ISIN
blp.bdp(tickers='/isin/US1234567890', flds=['SECURITY_NAME', 'MATURITY', 'COUPON', 'PX_LAST'])
Out[9]:
                       security_name    maturity coupon    px_last
/isin/US1234567890  US Treasury Note  2035-05-15   4.25  101.25
# Cash flow schedule using ISIN
blp.bds(tickers='/isin/US1234567890', flds='DES_CASH_FLOW')
Out[10]:
                   payment_date  coupon_amount  principal_amount
/isin/US1234567890   2026-05-15        21250.0               0.0
/isin/US1234567890   2026-11-15        21250.0               0.0
/isin/US1234567890   2027-05-15        21250.0               0.0

Note: Fixed income securities work with bdp(), bds(), and bdh() functions. The identifier format (/isin/, /cusip/, /sedol/) is automatically passed to blpapi.

Yield & Spread Analysis (YAS)

The yas() function provides a convenient wrapper for Bloomberg's YAS calculator:

from xbbg import blp
from xbbg.api.fixed_income import YieldType

# Get yield to maturity
blp.yas('T 4.5 05/15/38 Govt')
Out[11]:
                     YAS_BOND_YLD
ticker
T 4.5 05/15/38 Govt         4.348
# Calculate yield from price
blp.yas('T 4.5 05/15/38 Govt', price=95.0)
Out[12]:
                     YAS_BOND_YLD
ticker
T 4.5 05/15/38 Govt          5.05
# Calculate price from yield
blp.yas('T 4.5 05/15/38 Govt', flds='YAS_BOND_PX', yield_=4.8)
Out[13]:
                     YAS_BOND_PX
ticker
T 4.5 05/15/38 Govt    97.229553
# Yield to call for callable bonds
blp.yas('AAPL 2.65 05/11/50 Corp', yield_type=YieldType.YTC)
Out[14]:
                          YAS_BOND_YLD
ticker
AAPL 2.65 05/11/50 Corp          5.431
# Multiple YAS analytics
blp.yas('T 4.5 05/15/38 Govt', ['YAS_BOND_YLD', 'YAS_MOD_DUR', 'YAS_ASW_SPREAD'])
Out[15]:
                     YAS_ASW_SPREAD  YAS_BOND_YLD  YAS_MOD_DUR
ticker
T 4.5 05/15/38 Govt       33.093531         4.348     9.324928

Available parameters:

  • settle_dt: Settlement date (YYYYMMDD or datetime)
  • yield_type: YieldType.YTM (default) or YieldType.YTC
  • price: Input price to calculate yield
  • yield_: Input yield to calculate price
  • spread: Spread to benchmark in basis points
  • benchmark: Benchmark bond ticker for spread calculations

Field Information and Search

# Unified field lookup (recommended)
blp.bflds(fields=['PX_LAST', 'VOLUME'])  # Get metadata for specific fields
blp.bflds(search_spec='vwap')            # Search for fields by keyword

# Convenience aliases
blp.fieldInfo(['PX_LAST', 'VOLUME'])     # Same as bflds(fields=...)
blp.fieldSearch('vwap')                  # Same as bflds(search_spec=...)

Security Lookup

# Look up securities by company name
blp.blkp('IBM', max_results=10)
# Lookup with asset class filter
blp.blkp('Apple', yellowkey='eqty', max_results=20)

Portfolio Data

# Get portfolio data (dedicated function)
blp.bport('PORTFOLIO_NAME', 'PORTFOLIO_MWEIGHT')

📈 Historical Data

# End-of-day historical data (BDH)
blp.bdh(
    tickers='SPX Index', flds=['high', 'low', 'last_price'],
    start_date='2018-10-10', end_date='2018-10-20',
)
Out[4]:
           SPX Index
                high      low last_price
2018-10-10  2,874.02 2,784.86   2,785.68
2018-10-11  2,795.14 2,710.51   2,728.37
2018-10-12  2,775.77 2,729.44   2,767.13
2018-10-15  2,775.99 2,749.03   2,750.79
2018-10-16  2,813.46 2,766.91   2,809.92
2018-10-17  2,816.94 2,781.81   2,809.21
2018-10-18  2,806.04 2,755.18   2,768.78
2018-10-19  2,797.77 2,760.27   2,767.78
# Multiple tickers and fields
blp.bdh(
    tickers=['AAPL US Equity', 'MSFT US Equity'],
    flds=['px_last', 'volume'],
    start_date='2024-01-01', end_date='2024-01-10',
)
Out[4a]:
           AAPL US Equity             MSFT US Equity            
                  px_last      volume        px_last      volume
2024-01-02         150.25  45000000.0         180.45  25000000.0
2024-01-03         151.30  42000000.0         181.20  23000000.0
2024-01-04         149.80  48000000.0         179.90  24000000.0
2024-01-05         150.10  44000000.0         180.15  22000000.0
2024-01-08         151.50  46000000.0         181.80  26000000.0
# Excel-compatible inputs with periodicity
blp.bdh(
    tickers='SHCOMP Index', flds=['high', 'low', 'last_price'],
    start_date='2018-09-26', end_date='2018-10-20',
    Per='W', Fill='P', Days='A',
)
Out[5]:
           SHCOMP Index
                   high      low last_price
2018-09-28     2,827.34 2,771.16   2,821.35
2018-10-05     2,827.34 2,771.16   2,821.35
2018-10-12     2,771.94 2,536.66   2,606.91
2018-10-19     2,611.97 2,449.20   2,550.47
# Dividend/split adjustments
blp.bdh('AAPL US Equity', 'px_last', '20140606', '20140609', adjust='all')
Out[15]:
           AAPL US Equity
                  px_last
2014-06-06          85.22
2014-06-09          86.58
# Dividend history
blp.dividend(['C US Equity', 'MS US Equity'], start_date='2018-01-01', end_date='2018-05-01')
Out[13]:
                dec_date     ex_date    rec_date    pay_date  dvd_amt dvd_freq      dvd_type
C US Equity   2018-01-18  2018-02-02  2018-02-05  2018-02-23     0.32  Quarter  Regular Cash
MS US Equity  2018-04-18  2018-04-27  2018-04-30  2018-05-15     0.25  Quarter  Regular Cash
MS US Equity  2018-01-18  2018-01-30  2018-01-31  2018-02-15     0.25  Quarter  Regular Cash
# Earnings breakdowns
blp.earnings('AMD US Equity', by='Geo', Eqy_Fund_Year=2017, Number_Of_Periods=1)
Out[12]:
                 level    fy2017  fy2017_pct
Asia-Pacific      1.00  3,540.00       66.43
    China         2.00  1,747.00       49.35
    Japan         2.00  1,242.00       35.08
    Singapore     2.00    551.00       15.56
United States     1.00  1,364.00       25.60
Europe            1.00    263.00        4.94
Other Countries   1.00    162.00        3.04

⏱️ Intraday Data

# Intraday bars (1-minute default)
blp.bdib(ticker='BHP AU Equity', dt='2018-10-17').tail()
Out[9]:
                          BHP AU Equity
                                   open  high   low close   volume num_trds
2018-10-17 15:56:00+11:00         33.62 33.65 33.62 33.64    16660      126
2018-10-17 15:57:00+11:00         33.65 33.65 33.63 33.64    13875      156
2018-10-17 15:58:00+11:00         33.64 33.65 33.62 33.63    16244      159
2018-10-17 15:59:00+11:00         33.63 33.63 33.61 33.62    16507      167
2018-10-17 16:10:00+11:00         33.66 33.66 33.66 33.66  1115523      216

Selecting bar intervals:

  • Minute-based intervals (default): Use the interval parameter to specify minutes. By default, interval=1 (1-minute bars). Common intervals:
    • interval=5 → 5-minute bars
    • interval=15 → 15-minute bars
    • interval=30 → 30-minute bars
    • interval=60 → 1-hour bars
# 5-minute bars
blp.bdib(ticker='AAPL US Equity', dt='2025-11-12', interval=5).head()

# 15-minute bars
blp.bdib(ticker='AAPL US Equity', dt='2025-11-12', interval=15).head()
  • Sub-minute intervals (seconds): Set intervalHasSeconds=True and specify seconds:
# 10-second bars
blp.bdib(ticker='AAPL US Equity', dt='2025-11-12', interval=10, intervalHasSeconds=True).head()
Out[9a]:
                          AAPL US Equity
                                   open    high     low   close volume num_trds
2025-11-12 09:31:00-05:00        150.25  150.35  150.20  150.30  25000      150
2025-11-12 09:31:10-05:00        150.30  150.40  150.25  150.35  18000      120
2025-11-12 09:31:20-05:00        150.35  150.45  150.30  150.40  22000      135

Note: By default, interval is interpreted as minutes. Set intervalHasSeconds=True to use seconds-based intervals.

# Market session filtering
blp.bdib(ticker='7974 JT Equity', dt='2018-10-17', session='am_open_30').tail()
Out[11]:
                          7974 JT Equity
                                    open      high       low     close volume num_trds
2018-10-17 09:27:00+09:00      39,970.00 40,020.00 39,970.00 39,990.00  10800       44
2018-10-17 09:28:00+09:00      39,990.00 40,020.00 39,980.00 39,980.00   6300       33
2018-10-17 09:29:00+09:00      39,970.00 40,000.00 39,960.00 39,970.00   3300       21
2018-10-17 09:30:00+09:00      39,960.00 40,010.00 39,950.00 40,000.00   3100       19
2018-10-17 09:31:00+09:00      39,990.00 40,000.00 39,980.00 39,990.00   2000       15

How the session parameter works

The session parameter is resolved by xbbg.core.config.intervals.get_interval() and xbbg.core.process.time_range() using exchange metadata from xbbg/markets/config/exch.yml:

  • Base sessions (no underscores) map directly to session windows defined for the ticker's exchange in exch.yml:

    • allday - Full trading day including pre/post market (e.g., [400, 2000] for US equities)
    • day - Regular trading hours (e.g., [0930, 1600] for US equities)
    • am - Morning session (e.g., [901, 1130] for Japanese equities)
    • pm - Afternoon session (e.g., [1230, 1458] for Japanese equities)
    • pre - Pre-market session (e.g., [400, 0930] for US equities)
    • post - Post-market session (e.g., [1601, 2000] for US equities)
    • night - Night trading session (e.g., [1710, 700] for Australian futures)

    Not all exchanges define all sessions. For example, GBP Curncy uses CurrencyGeneric which defines allday and day only.

  • Compound sessions (with underscores) allow finer control by combining a base session with modifiers (open, close, normal, exact):

    • Open windows (first N minutes of a session):
      • day_open_30 → first 30 minutes of the day session
      • am_open_30 → first 30 minutes of the am session
      • Note: open is not a base session; use day_open_30, not open_30
    • Close windows (last N minutes of a session):
      • day_close_20 → last 20 minutes of the day session
      • am_close_30 → last 30 minutes of the am session
      • Note: close is not a base session; use day_close_20, not close_20
    • Normal windows (skip open/close buffers):
      • day_normal_30_20 → skips first 30 min and last 20 min of day
      • am_normal_30_30 → skips first 30 min and last 30 min of am
    • Exact clock times (exchange-local HHMM format):
      • day_exact_2130_2230 → [21:30, 22:30] local time (marker session)
      • allday_exact_2130_2230 → [21:30, 22:30] local time (actual window)
      • allday_exact_2130_0230 → [21:30, 02:30 next day] local time
  • Resolution order and fallbacks:

    • blp.bdib / blp.bdtick call time_range(), which:
      1. Uses exch.yml + get_interval() and const.exch_info() to resolve local session times and exchange timezone.
      2. Converts that window to UTC and then to your requested tz argument (e.g., 'UTC', 'NY', 'Europe/London').
      3. If exchange metadata is missing for session and the asset, it may fall back to pandas‑market‑calendars (PMC) for simple sessions ('day' / 'allday'), based on the exchange code.
  • Errors and diagnostics:

    • If a session name is not defined for the ticker's exchange, get_interval() raises a ValueError listing the available sessions for that exchange and points to xbbg/markets/exch.yml.
    • For compound sessions whose base session doesn't exist (e.g. mis-typed am_open_30 for an exchange that has no am section), get_interval() returns SessNA and time_range() will then try the PMC fallback or ultimately raise a clear ValueError.

In practice:

  • Use simple names like session='day' or session='allday' when you just want the main trading hours.
  • Use compound names like session='day_open_30' or session='am_normal_30_30' when you need to focus on opening/closing auctions or to exclude "micro" windows (e.g. the first X minutes).
  • If you add or customize sessions, update exch.yml and rely on get_interval() to pick them up automatically.
# Using reference exchange for market hours
blp.bdib(ticker='ESM0 Index', dt='2020-03-20', ref='ES1 Index').tail()
out[10]:
                          ESM0 Index
                                open     high      low    close volume num_trds        value
2020-03-20 16:55:00-04:00   2,260.75 2,262.25 2,260.50 2,262.00    412      157   931,767.00
2020-03-20 16:56:00-04:00   2,262.25 2,267.00 2,261.50 2,266.75    812      209 1,838,823.50
2020-03-20 16:57:00-04:00   2,266.75 2,270.00 2,264.50 2,269.00   1136      340 2,576,590.25
2020-03-20 16:58:00-04:00   2,269.25 2,269.50 2,261.25 2,265.75   1077      408 2,439,276.00
2020-03-20 16:59:00-04:00   2,265.25 2,272.00 2,265.00 2,266.50   1271      378 2,882,978.25
# Tick-by-tick data with event types and condition codes
blp.bdtick(ticker='XYZ US Equity', dt='2024-10-15', session='day', types=['TRADE']).head()
Out[12]:
                          XYZ US Equity
                                   volume    typ   cond exch            trd_time
2024-10-15 09:30:15-04:00           1500  TRADE     @  NYSE  2024-10-15 09:30:15
2024-10-15 09:30:23-04:00            800  TRADE     @  NYSE  2024-10-15 09:30:23
2024-10-15 09:30:31-04:00           2200  TRADE     @  NYSE  2024-10-15 09:30:31
# Tick data with timeout (useful for large requests)
blp.bdtick(ticker='XYZ US Equity', dt='2024-10-15', session='day', timeout=1000)

Note: bdtick requests can take longer to respond. Use timeout parameter (in milliseconds) if you encounter empty DataFrames due to timeout.

Timezone handling (bdib / bdtick)

Bloomberg intraday APIs use UTC on the wire. The Rust engine accepts two optional knobs:

  • request_tz: How naive start_datetime / end_datetime (and the implicit full-day window when using dt=) are interpreted before the request. Omit or use UTC to keep the previous behavior (naive times treated as UTC wall times, matching older examples that use e.g. 14:30 for US cash open).
  • output_tz: Relabel the Arrow/Pandas time column to an IANA zone (same instants; only the timestamp type metadata changes). Omit or UTC leaves UTC.

Supported labels (case-insensitive where noted): UTC, local (machine IANA zone), exchange (resolve via the request’s security and cached/Bloomberg metadata), short aliases NY, LN, TK, HK, a reference ticker string containing a space (same as exch_info), or any IANA name (e.g. Europe/Zurich).

# Naive times in America/New_York → converted to UTC in the engine before the API call
bars = await blp.abdib(
    "SPY US Equity",
    start_datetime="2024-01-15 09:30",
    end_datetime="2024-01-15 16:00",
    interval=5,
    request_tz="America/New_York",
)

# Present tick times in the listing’s exchange zone (resolved in Rust)
ticks = await blp.abdtick(
    "SPY US Equity",
    "2024-01-15 09:30",
    "2024-01-15 10:00",
    request_tz="exchange",
    output_tz="exchange",
)
# Trading volume & turnover (currency-adjusted, in millions)
blp.turnover(['ABC US Equity', 'DEF US Equity'], start_date='2024-01-01', end_date='2024-01-10', ccy='USD')
Out[13]:
            ABC US Equity  DEF US Equity
2024-01-02        15,304        8,920
2024-01-03        18,450       12,340
2024-01-04        14,890        9,560
2024-01-05        16,720       11,230
2024-01-08        10,905        7,890
# Currency conversion for historical data
hist = blp.bdh(['GHI US Equity'], ['px_last'], '2024-01-01', '2024-01-10')
blp.convert_ccy(hist, ccy='EUR')
Out[14]:
            GHI US Equity
2024-01-02        169.66
2024-01-03        171.23
2024-01-04        170.45
2024-01-05        172.10
2024-01-08        169.46

🔍 Screening & Queries

# Bloomberg Query Language (BQL)
# IMPORTANT: The 'for' clause must be OUTSIDE get(), not inside
# Correct: get(px_last) for('AAPL US Equity')
# Incorrect: get(px_last for('AAPL US Equity'))
# blp.bql("get(px_last) for('AAPL US Equity')")  # doctest: +SKIP

# BQL Options query example - sum open interest
# blp.bql("get(sum(group(open_int))) for(filter(options('SPX Index'), expire_dt=='2025-11-21'))")  # doctest: +SKIP

# BQL Options metadata - get available expiries
# blp.bql("get(expire_dt) for(options('INDEX Ticker'))")  # doctest: +SKIP

# BQL Options metadata - get option tickers for an underlying
# blp.bql("get(id) for(options('INDEX Ticker'))")  # doctest: +SKIP

# BQL Options metadata - get option chain (expiry, strike, put/call)
# blp.bql("get(id, expire_dt, strike_px, PUT_CALL) for(filter(options('INDEX Ticker'), expire_dt=='YYYY-MM-DD'))")  # doctest: +SKIP

# ETF Holdings (BQL)
# blp.etf_holdings('SPY US Equity')  # doctest: +SKIP
# Returns:
#               holding       id_isin SOURCE POSITION_TYPE  weights  position
# 0     MSFT US Equity  US5949181045    ETF             L   0.0725   123456.0
# 1     AAPL US Equity  US0378331005    ETF             L   0.0685   112233.0
# 2     NVDA US Equity  US67066G1040    ETF             L   0.0450    88776.0

# Bloomberg Equity Screening (BEQS)
# blp.beqs(screen='MyScreen', asof='2023-01-01')  # doctest: +SKIP

# SRCH (Search) - Fixed Income example
# blp.bsrch("FI:YOURSRCH")  # doctest: +SKIP
Out[16]:
              id
0  !!ABC123 Mtge
1  !!DEF456 Mtge
2  !!GHI789 Mtge
3  !!JKL012 Mtge
4  !!MNO345 Mtge
# SRCH - Weather data with parameters
blp.bsrch(  # doctest: +SKIP
    "comdty:weather",
    overrides={
        "provider": "wsi",
        "location": "US_XX",
        "model": "ACTUALS",
        "frequency": "DAILY",
        "target_start_date": "2021-01-01",
        "target_end_date": "2021-01-05",
        "location_time": "false",
        "fields": "WIND_SPEED|TEMPERATURE|HDD_65F|CDD_65F|HDD_18C|CDD_18C|PRECIPITATION_24HR|CLOUD_COVER|FEELS_LIKE_TEMPERATURE|MSL_PRESSURE|TEMPERATURE_MAX_24HR|TEMPERATURE_MIN_24HR"
    }
)
Out[17]:
              Reported Time  Wind Speed (m/s)  Temperature (°C)  Heating Degree Days (°F)  Cooling Degree Days (°F)
0 2021-01-01 06:00:00+00:00              3.45              -2.15                   38.25                     0.0
1 2021-01-02 06:00:00+00:00              2.10              -1.85                   36.50                     0.0
2 2021-01-03 06:00:00+00:00              1.95              -2.30                   37.80                     0.0
3 2021-01-04 06:00:00+00:00              2.40              -2.65                   38.10                     0.0
4 2021-01-05 06:00:00+00:00              2.15              -1.20                   35.75                     0.0

Note: The bsrch() function uses the blpapi Excel service (//blp/exrsvc) and supports user-defined SRCH screens, commodity screens, and blpapi example screens. For weather data and other specialized searches, use the overrides parameter to pass search-specific parameters.

# Bloomberg Quote Request (BQR) - Dealer quotes with broker codes
# Emulates Excel =BQR() function for fixed income dealer quotes

# Get quotes from last 2 days
# blp.bqr('XYZ 4.5 01/15/30@MSG1 Corp', date_offset='-2d')  # doctest: +SKIP

# Using ISIN with MSG1 pricing source
# blp.bqr('/isin/US123456789@MSG1', date_offset='-2d')  # doctest: +SKIP

# With broker codes and spread data
# blp.bqr(  # doctest: +SKIP
#     'XYZ 4.5 01/15/30@MSG1 Corp',
#     date_offset='-2d',
#     include_broker_codes=True,
#     include_spread_price=True,
# )

# With explicit date range
# blp.bqr('XYZ 4.5 01/15/30@MSG1 Corp', start_date='2024-01-15', end_date='2024-01-17')  # doctest: +SKIP

# Get only trade events
# blp.bqr('XYZ 4.5 01/15/30@MSG1 Corp', date_offset='-1d', event_types=['TRADE'])  # doctest: +SKIP

```pydocstring
Out[18]:
                              ticker                 time event_type   price      size spread_price broker_buy broker_sell
0  XYZ 4.5 01/15/30@MSG1 Corp  2024-01-15 10:30:00        BID   98.75  10000000         29.0       DLRA         NaN
1  XYZ 4.5 01/15/30@MSG1 Corp  2024-01-15 10:30:05        ASK   99.00   5000000         24.1        NaN        DLRB
2  XYZ 4.5 01/15/30@MSG1 Corp  2024-01-15 11:45:00      TRADE   98.85   2500000          NaN       DLRC        DLRC

Note: The bqr() function emulates Bloomberg Excel's =BQR() formula. Use the @MSG1 pricing source suffix to get dealer-level quote attribution. Optional parameters include include_broker_codes, include_spread_price, include_yield, include_condition_codes, and include_exchange_codes.

📡 Real-time

# Real-time market data streaming (async)
# async for tick in blp.astream(['AAPL US Equity'], ['LAST_PRICE']):  # doctest: +SKIP
#     print(tick)  # doctest: +SKIP

# Subscriptions with failure isolation and health metadata
# sub = await blp.asubscribe(['AAPL US Equity'], ['LAST_PRICE'])  # doctest: +SKIP
# async for update in sub:  # doctest: +SKIP
#     print(update)  # doctest: +SKIP

# Full Bloomberg payload (e.g. INITPAINT summary fields beyond your request list):
# sub = await blp.asubscribe(['XBTUSD Curncy'], ['LAST_PRICE', 'BID', 'ASK'], all_fields=True)  # doctest: +SKIP

# Real-time VWAP streaming
# async for bar in blp.avwap(['AAPL US Equity']):  # doctest: +SKIP
#     print(bar)  # doctest: +SKIP

🔧 Utilities

# Futures ticker resolution (generic to specific contract)
blp.fut_ticker('ES1 Index', '2024-01-15', freq='ME')
Out[15]:
'ESH24 Index'
# Active futures contract selection (volume-based)
blp.active_futures('ESA Index', '2024-01-15')
Out[16]:
'ESH24 Index'
# CDX index ticker resolution (series mapping)
blp.cdx_ticker('CDX IG CDSI GEN 5Y Corp', '2024-01-15')
Out[17]:
'CDX IG CDSI S45 5Y Corp'
# Active CDX contract selection
blp.active_cdx('CDX IG CDSI GEN 5Y Corp', '2024-01-15', lookback_days=10)
Out[18]:
'CDX IG CDSI S45 5Y Corp'

Data Storage

What gets cached

Currently, only bdib() intraday bar data is cached as local Parquet files. Other functions (bdp, bds, bdh, bql, beqs, bsrch, bta, bqr) always make live Bloomberg API calls — they are not cached.

When bdib() fetches intraday bars, it will:

  1. Check the cache first — if a Parquet file exists for that ticker/date/interval, return it instead of calling Bloomberg.
  2. Save results to cache — after a successful Bloomberg fetch, save the bars as a Parquet file (only once the trading session has ended, to avoid saving incomplete data).

Exchange metadata (timezone, session hours) is also cached locally to avoid repeated lookups.

Cache location

By default, xbbg uses a platform-specific cache directory:

Platform Default location
Windows %APPDATA%\xbbg
Linux/macOS ~/.cache/xbbg or ~/.xbbg

To use a custom location, set BBG_ROOT before importing xbbg:

import os
os.environ['BBG_ROOT'] = '/path/to/your/cache/directory'

Cache structure

Intraday bar files are organized as:

{BBG_ROOT}/{asset_class}/{ticker}/{event_type}/{interval}/{date}.parq

For example, 1-minute TRADE bars for AAPL on 2024-01-15:

/path/to/cache/Equity/AAPL US Equity/TRADE/1m/2024-01-15.parq

Controlling cache behavior

# Disable cache for a specific call (always fetch from Bloomberg)
blp.bdib('AAPL US Equity', dt='2024-01-15', cache=False)

# Force reload (fetch from Bloomberg even if cached, then overwrite cache)
blp.bdib('AAPL US Equity', dt='2024-01-15', reload=True)

Bloomberg data license compliance

Local data usage must be compliant with the Bloomberg Datafeed Addendum (see DAPI<GO>):

To access Bloomberg data via the API (and use that data in Microsoft Excel), your company must sign the 'Datafeed Addendum' to the Bloomberg Agreement. This legally binding contract describes the terms and conditions of your use of the data and information available via the API (the "Data"). The most fundamental requirement regarding your use of Data is that it cannot leave the local PC you use to access the BLOOMBERG PROFESSIONAL service.

🔧 Troubleshooting

❌ Empty DataFrame Returned

Possible causes:

  • ✅ Bloomberg Terminal not running → Start Bloomberg Terminal
  • ✅ Wrong ticker format → Use 'AAPL US Equity' not 'AAPL'
  • ✅ Data not available for date/time → Check Bloomberg Terminal
  • ✅ Timeout too short → Increase: blp.bdtick(..., timeout=1000)

Quick fix:

# Verify ticker exists
blp.blkp('Apple', yellowkey='eqty')

# Check field availability
blp.fieldSearch('price')
🔌 Connection Errors

Checklist:

  • ✅ Bloomberg Terminal is running and logged in
  • ✅ Default connection is localhost:8194
  • ✅ For remote: blp.bdp(..., server='192.168.1.100', port=18194)
  • ✅ Bloomberg API (blpapi) is installed

Test connection:

from xbbg import blp
blp.bdp('AAPL US Equity', 'PX_LAST')  # Should return data
⏱️ Timeout Errors

Solutions:

# Increase timeout (milliseconds)
blp.bdtick('AAPL US Equity', dt='2024-01-15', timeout=5000)

# Break large requests into chunks
dates = pd.date_range('2024-01-01', '2024-12-31', freq='MS')
chunks = [blp.bdh('SPX Index', 'PX_LAST', start, end) for start, end in zip(dates[:-1], dates[1:])]
result = pd.concat(chunks)
🔍 Field Not Found

Find the right field:

# Search for fields
blp.fieldSearch('vwap')  # Find VWAP-related fields

# Get field info
blp.fieldInfo(['PX_LAST', 'VOLUME'])  # See data types & descriptions

# Check in Bloomberg Terminal
# Type FLDS<GO> to browse all fields
🐛 Still Stuck?

Get help fast:

When reporting issues, include:

  1. xbbg version: import xbbg; print(xbbg.__version__)
  2. Python version: python --version
  3. Error message (full traceback)
  4. Minimal code to reproduce

Development

Setup

Set up the development environment with pixi:

# Install the Bloomberg SDK into vendor/blpapi-sdk/ and let xbbg discover it
bash ./scripts/sdktool.sh               # macOS/Linux
# .\scripts\sdktool.ps1                # Windows PowerShell

# Install environment and compile the Rust extension
pixi install
pixi run install

If you already manage the SDK yourself, you can still set BLPAPI_ROOT manually.

Running Tests and Linting

pixi run test                  # run tests
pixi run lint                  # lint Python + Rust
pixi run ci                    # full sweep: fmt-check + lint + typecheck + test

For non-live application tests, xbbg.testing can mock Bloomberg-style responses:

from xbbg import blp
from xbbg.testing import create_mock_response, mock_engine

response = create_mock_response(
    service="//blp/refdata",
    operation="ReferenceDataRequest",
    data={"AAPL US Equity": {"PX_LAST": 254.23}},
)

with mock_engine([response]):
    df = blp.bdp("AAPL US Equity", "PX_LAST")

Building

pixi run build

Publishing is handled via GitHub Actions using PyPI Trusted Publishing (OIDC).

Documentation

The docs site uses Astro:

pixi run -e docs docs-install  # install npm deps
pixi run -e docs docs-dev      # local dev server
pixi run -e docs docs-build    # production build

Contributing

We welcome contributions! Please see CONTRIBUTING.md for detailed guidelines on:

  • Setting up your development environment
  • Code style and standards
  • Testing requirements
  • Pull request process
  • Community guidelines

Quick start for contributors:

# Fork and clone the repository
git clone https://github.com/YOUR-USERNAME/xbbg.git
cd xbbg

# Set up development environment
pixi install && pixi run install

# Run tests and linting
pixi run ci

Getting Help

Community Support

Resources

Links

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.


Star History

Star History Chart

Project Status

Category Badge
Docs Documentation Status
Build Actions Status
Coverage codecov
Quality Codacy Badge
CodeFactor
License GitHub license

For detailed release history, see CHANGELOG.md.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xbbg-1.0.0rc2.tar.gz (433.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

xbbg-1.0.0rc2-cp314-cp314-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.14Windows x86-64

xbbg-1.0.0rc2-cp314-cp314-manylinux_2_34_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

xbbg-1.0.0rc2-cp314-cp314-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ universal2 (ARM64, x86-64)

xbbg-1.0.0rc2-cp313-cp313-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.13Windows x86-64

xbbg-1.0.0rc2-cp313-cp313-manylinux_2_34_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

xbbg-1.0.0rc2-cp313-cp313-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

xbbg-1.0.0rc2-cp312-cp312-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.12Windows x86-64

xbbg-1.0.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

xbbg-1.0.0rc2-cp312-cp312-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

xbbg-1.0.0rc2-cp311-cp311-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.11Windows x86-64

xbbg-1.0.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

xbbg-1.0.0rc2-cp311-cp311-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

xbbg-1.0.0rc2-cp310-cp310-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.10Windows x86-64

xbbg-1.0.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

xbbg-1.0.0rc2-cp310-cp310-macosx_11_0_universal2.whl (1.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file xbbg-1.0.0rc2.tar.gz.

File metadata

  • Download URL: xbbg-1.0.0rc2.tar.gz
  • Upload date:
  • Size: 433.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2.tar.gz
Algorithm Hash digest
SHA256 9596c4ae353248890a03942920b7c06df47590c7e15d614d1f4a1c5141967070
MD5 52b51b5caf953a37ba894f117f6e5f9e
BLAKE2b-256 80f2ff4f17b09c2d2fa9f8574009199de33d06f49f543995f7f97c56893cd8b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2.tar.gz:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: xbbg-1.0.0rc2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6c4aef22e149a7c6c017cc8079b81365e2890a5d8837791eb6d13841c2667b53
MD5 df440324426b27bbf8f2b4a1493ee5ca
BLAKE2b-256 395f3150eb0f6ef5cf9aa3923a0a0097dbafa40907676243d40332825589d910

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp314-cp314-win_amd64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e5fac290df39a69fdcad4f952a75b0406bd95cd69fb1e0af00f440a3b911bc8a
MD5 88a7fb05d79776c9096fe309ed06378a
BLAKE2b-256 c2311cda2c02b3d645d96dc35c217f6b3e8d12714bd45c6057996b1bd2579047

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp314-cp314-manylinux_2_34_x86_64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 caeae81f1f14c03d18199668307884e827ca9a6dd8afc471d7179f47ba09642e
MD5 0748aa939d3631ef0f7ba36757fc9923
BLAKE2b-256 5f193c397bb2067b3f71a300c8bfe236d6dabce54b3fa31e1855e4678cf16e6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp314-cp314-macosx_11_0_universal2.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: xbbg-1.0.0rc2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 798f2c35480427cf2a9d21259816c57ec0b376d5198a90f052a01f3d882e6a90
MD5 b14fb8ca34cd02fa1850f0aa0e738ac9
BLAKE2b-256 497596d61d98c8bad339241aa6d9634dcfab86b352770da807c73784047a91e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp313-cp313-win_amd64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fc06e50b83c6d1efe4b6788e50c6fa8b5ccc1d9b89c24c07218dec2dad2c2b8c
MD5 e6c43d935272e6fe7a3e57343e4b79bf
BLAKE2b-256 2faa9a7bd4ba1df0fd34de0155afe2a41b5efd5e8fc1353b8dfa59b8a3ac62f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 3d3d0a320805ae7c66dfc8e7a2441623d415547aeb73582fb7aad1c6edad95b7
MD5 f5b77c7077387919217214f1d5cf51a5
BLAKE2b-256 75d4acbe4bbde88bb1ba73dea3491b79e028850dd8612e472bf6d628ba183629

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp313-cp313-macosx_11_0_universal2.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: xbbg-1.0.0rc2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e1d8976a6dbc9df4e8710aa2012481efea46c3fbd148ecd5df81a49c02e864c5
MD5 40dd63ce4b9195b25a82da67e3a2743e
BLAKE2b-256 34cd22a79669feac3a1d8a830b098e7f141916eb96c7995e28a5c9bdea8b68a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp312-cp312-win_amd64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fff69c268ed64d4ba0beb3324bab4e9bf6da1e07cb8f56b88276dc4633772eb9
MD5 17f38a91cee1ede9abac801a8772a02c
BLAKE2b-256 bdb7cd7d7496b03ba55579de64fa2124986adcd789be08f46b841f8d2aee9c07

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 f0242bef4b27669f60fe4c9a67cded3cec36e7293ca12e96f26b7e6038dc3e0c
MD5 22d00505539d2ffd027ed1f3e7dfb827
BLAKE2b-256 4966bbe882bff5f78204c38bcc3b03eb16142ef0d5ccf67eeaa5169f5eda5d0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: xbbg-1.0.0rc2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 868948bad564a8ef2b985822f43788697c12f72af3c646e02391ca18f924fc7d
MD5 e3db2d81e56a1cf5f8a489d14999b380
BLAKE2b-256 e19a21b605b7140bd79d915040f244453a164b25d1a718f3da495e62e8d2e90f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp311-cp311-win_amd64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b5859021f07e8515ed92b472f5db5d104b1059db30e196cdd75f3dd7ea60f870
MD5 5682a8d9f3592c0a8a3bbe6c714a9cc5
BLAKE2b-256 54537acc97e0acb65acafc61c05be47b00551f127849517d9a80f8c0af8a6283

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9102ca5d0ee7a8ecabff5a90ad039ec2ada13324e893614d573213ec54311096
MD5 1f636f7993a368c65ea2d8a9fb9c881b
BLAKE2b-256 10801e09b91a641ca7b62a2e21ee8ff096a5d60a21ef4fc1937e1ce69da44c67

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: xbbg-1.0.0rc2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xbbg-1.0.0rc2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0661046182a911b1917d935fb4584275b850c4960c464b3894e073ffb22b408a
MD5 22b28802053c66eadcc99093e50a4b0e
BLAKE2b-256 f653bec5c099cd5d6e43daf5479c4289d8b014226c25b5d29b5ff34d560255f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp310-cp310-win_amd64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2d95d9370f351fa48303dedf13d2d8026606c8e9f7e9192e709dc2e38bc33d65
MD5 99c9e60ef7f8e6dd5dc1eba68a2828eb
BLAKE2b-256 d1493f6af7127d91ffb40b2d3b84ef5880a427e9828e99b785eeb574fd04f874

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbbg-1.0.0rc2-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xbbg-1.0.0rc2-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 780d084480c8f600884da29104f759eaf7ea5ce6414710f74561e131724f31a0
MD5 d5676904d458a38b658f5c8d384c16ac
BLAKE2b-256 1b84214750d3eb672dc4d59f9c6718b9939fd6c44ab56d9c16250a26d6683ea6

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbbg-1.0.0rc2-cp310-cp310-macosx_11_0_universal2.whl:

Publisher: pypi_upload.yml on alpha-xone/xbbg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page