Changelog
This page is generated from the repository root CHANGELOG.md during docs builds.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog 1.1.0, and this project adheres to Semantic Versioning 2.0.0.
xbbg-mcplocal MCP server: Added a stdio Bloomberg MCP application underapps/xbbg-mcpwith tool surfaces forbdp,bdh,bds,bdib,bql,bsrch,bflds, and generic request execution. Responses are bounded structured JSON with Arrow schema metadata for coding agents.- GitHub-release MCP distribution path: Added release packaging for
xbbg-mcp, a Unix launcher wrapper (scripts/xbbg-mcp), and a convenience installer (scripts/install-xbbg-mcp.sh) so Claude Code and OpenCode users can install a local MCP binary without cloning or compiling the repo first.
- Incorrect value types in
bdp/bdhlong format (issue #280): The default long format (LongMode::String) was converting all Bloomberg values to strings, ignoring resolvedfield_types. Now the Rust engine computes a common Arrow type from the field type hints at construction time — when all fields are numeric, thevaluecolumn isFloat64instead ofUtf8. Mixed-type queries (e.g., numeric + string fields) gracefully fall back to string. The fix is zero-copy:Valueis moved into the Arrow builder instead of being stringified and re-parsed. - macOS/Linux:
import xbbg._corefails withLibrary not loaded: @rpath/libblpapi3_64.so(issue #276): The pyo3 cdylib ships with zeroLC_RPATHentries on macOS, so dyld had nowhere to look forlibblpapi3_64.soat import time. Previously only Windows had pre-import SDK setup in__init__.py. Now_prepare_sdk_for_core_import()dispatches per-platform: Windows keeps the existingadd_dll_directorypath, while macOS and Linux preloadlibblpapi3_64.soviactypes.CDLL(..., RTLD_GLOBAL)so dyld/ld.so resolves the@rpathreference via install-name / already-loaded image matching. This mirrors the idiom Bloomberg’s ownblpapi/internals.pyuses for itsffiutilsextension (which also ships with no rpath). All four SDK sources (xbbg.set_sdk_path(),blpapipackage, DAPI,BLPAPI_ROOT) are now honored on every platform. The friendlyImportErrorwrapper also recognizes macOS dlopen error strings (Library not loaded,image not found). - Incorrect timestamp in
parse_rfc3339_utctest: Fixed hardcoded expected value from1717242600to1717252200(correct UTC epoch for2024-06-01T14:30:00+00:00).
1.0.0 - 2026-03-31
Section titled “1.0.0 - 2026-03-31”- Subscription event timestamps (issue #273):
asubscribe(..., tick_mode=True)and raw subscription batches now expose the eventtimestampcolumn as UTC-aware Arrow/Python datetimes instead of naive UTC values. This fixes incorrect.timestamp()conversions on non-UTC hosts.
1.0.0rc4 - 2026-03-30
Section titled “1.0.0rc4 - 2026-03-30”Changed
Section titled “Changed”- PyPI classifiers: Added
Development Status :: 5 - Production/Stable,Intended Audience :: Financial and Insurance Industry,Intended Audience :: Science/Research,Topic :: Office/Business :: Financial,Programming Language :: Rust, andTyping :: Typed. - README: Fixed all documentation links from defunct ReadTheDocs to Starlight site (
alpha-xone.github.io/xbbg), updated the latest-release marker to rc4, removed stale Codecov/Codacy/CodeFactor badges, replaced deadAuto CIbuild badge withci-rust.yml, and removed “beta” language in project description. - Issue templates: Updated documentation links and environment version examples for v1.
- CONTRIBUTING.md: Corrected minimum Rust version from 1.70 to 1.75.
- Bloomberg SDK ABI compatibility check: New
scripts/abi-check.shand CI job that verifies every C symbol xbbg-core depends on exists across SDK versions (oldest supported through latest). Minimum supported SDK version defined indefs/bloomberg.toml(min_sdk_version). - SECURITY.md: Restored security policy with vulnerability reporting instructions and hardening notes.
- GitHub Pages deploy workflow: Added
deploy-docs.ymlfor automated Starlight docs deployment on push to main. - Documentation: Wrote complete content for all guide and reference pages (migration, streaming, async, backends, output formats, configuration, type mappings).
- Shutdown panic (issue #270): Fixed tokio worker thread panic (
Python::attachafterPy_Finalize) when Python exits with active subscriptions. Root cause:signal_shutdown()didn’t close the data path to__anext__, leaving tokio futures alive during interpreter teardown. Fix addsEngine::shutdown_signal(watch channel) that immediately wakes pending__anext__futures, andshutdown_safe_futurewrapper that preventsfuture_into_pyfrom delivering results to a dead interpreter. Affects all async methods (requests, subscriptions, recipes). - Engine startup race condition (issue #272):
configure()no longer raisesRuntimeErrorif the engine was auto-created with defaults before configuration (e.g., by a health check or background thread in FastAPI). It now shuts down the default engine with aRuntimeWarningand stores the new config for the next request. Also added thread safety to_get_engine()(double-checked locking) and clear error messages when sync wrappers (bdp,bdh, etc.) are called inside async contexts. - Type checking: Resolved all 178
tyerrors to zero. Exception classes properly subclassed in Python instead of monkey-patching__init__on Rust classes. Added exception stubs to_core/__init__.pyi. Remaining 6type: ignorecomments are all upstream stub gaps (narwhals, stdlib, platform-specific). - Unused
pandasimport: Removed leftoverTYPE_CHECKINGimport ofpandasinblp.pyafterFormat.WIDEremoval. - Exception hierarchy:
BlpRequestError,BlpSecurityError,BlpFieldError, andBlpValidationErrorare now proper Python subclasses of the Rust base classes with typed__init__signatures, replacing fragile__init__monkey-patching.
Security
Section titled “Security”- Pygments ReDoS (CVE): Upgraded Pygments 2.19.2 to 2.20.0, fixing a regular expression denial of service in GUID matching.
Removed
Section titled “Removed”OverflowPolicy::DropOldest: Removed unimplemented overflow policy that silently behaved asDropNewest. Will be reintroduced in a future release with correct ring-buffer semantics. Use'drop_newest'(default) or'block'.Format.WIDE: Removed the deprecated wide output format. UseFormat.SEMI_LONGfor field-as-column output, or call.pivot()onFormat.LONGresults.asset_config(): Removed the deprecated market config helper. Usemarket_info(ticker)instead.
1.0.0rc3 - 2026-03-26
Section titled “1.0.0rc3 - 2026-03-26”- BQL error handling: Parse Bloomberg’s
responseExceptionsfor actionable error messages (e.g. “Undefined item: CUR_YLD”) instead of opaque “missing ‘results’ field” errors. Null results with no exceptions now return an empty DataFrame. Partial exceptions with valid results log warnings instead of failing. corporate_bonds()cross-market support: Switched frombondsuniv+TICKER==filter (US-only) todebt()universe, matching the approach used bypreferreds(). Now accepts full equity tickers (e.g. “9984 JT Equity”) and works across all markets.- CDX on-the-run indicator: Accept
'true'(returned by Bloomberg for CDX generic tickers) in addition to'Y'forON_THE_RUN_CURRENT_BD_INDICATOR, fixing false warnings on CDX instruments. is_connected()checks real session health: Now queries actual Bloomberg worker health viarequest_pool_health()instead of just checking if the Python engine object exists.fieldExceptionslogging: Downgraded from WARN to DEBUG and now includes actual field names and error messages (e.g. “MATURITY: Field not applicable to security”) instead of just a count.
1.0.0rc2 - 2026-03-23
Section titled “1.0.0rc2 - 2026-03-23”- Subscription field exposure (#265):
all_fieldsonasubscribe,astream, andstream(andPyEngine.subscribe/subscribe_with_options). WhenFalse(default), batches include only requested fields plusMKTDATA_EVENT_TYPEandMKTDATA_EVENT_SUBTYPE. WhenTrue, each batch includes every top-level scalar field Bloomberg sends (e.g. fullSUMMARY/INITPAINTsnapshots), with the schema growing as new fields appear. The same flag is available onavwap,amktbar,adepth, andachainsfor consistency across streaming services.
1.0.0rc1 - 2026-03-23
Section titled “1.0.0rc1 - 2026-03-23”- Intraday timezone controls (
request_tz/output_tz):abdib/bdib,abdtick/bdtick,arequest, and RustRequestParamsaccept optionalrequest_tz(interpret naivestart_datetime/end_datetimebefore Bloomberg) andoutput_tz(relabel Arrowtimeto an IANA zone). Supported labels includeUTC,local,exchange,NY/LN/TK/HK, reference tickers, and explicit IANA names. Implemented inxbbg-async(chrono-tz,iana-time-zone) with nested RefData calls routed throughrequest_without_intraday_transformto avoid recursion. - Pixi environment management: Added
pixi.tomlwith 11 environments (default, test, lint, benchmark, docs, py310–py314), 21 tasks, and conda-forge deps for Rust, libclang, and pyarrow. Singlepixi install && pixi run installreplaces manual toolchain setup. - mimalloc allocator: PyO3 extension now uses mimalloc by default (feature-gated) for improved Rust-side allocation performance.
tytype checking: Lint environment includes Astral’stytype checker alongside ruff; CI lint job now runs type checking automatically.- SOCKS5 proxy support (#180): Route Bloomberg connections through a SOCKS5 proxy via
socks5_hostandsocks5_portkwargs onconfigure()andEngine(). Uses the Bloomberg SDK’sSocks5ConfigAPI (no auth, hostname + port only). - Enterprise-friendly request middleware context:
RequestContextnow carries a read-onlyRequestEnvironmentsnapshot so middleware can inspect engine source, host/port, server list, auth method, app/user context, and validation mode without reaching into private globals.
Changed
Section titled “Changed”- Workspace default build scope: Root
Cargo.tomlsets[workspace].default-membersto excludecrates/datamockandcrates/datamock-sys, so plaincargo build/cargo testat the repo root does not compile the C++ mock stack. Usecargo test -p datamockorcargo build --workspacewhen working on mocks. ThemockCargo feature onxbbg-sysand downstream crates remains optional and off by default. - Standardised on
BLPAPI_ROOT: RemovedXBBG_DEV_SDK_ROOTenv var across the codebase (build.rs, scripts, docs). SDK discovery now usesBLPAPI_ROOTonly (set by pixi activation or.cargo/config.toml). No hardcoded SDK version — build.rs scans versioned subdirs automatically. - Removed
BLPAPI_LINK_LIB_NAME: Library name is now always auto-detected bydetect_link_lib_name()based on target platform. - Build profiles cleaned up: Removed redundant
[profile.release.package.xbbg_core]; added[profile.dev.package."*"] opt-level = 2so all deps are optimised in dev builds;pixi run installusestarget-cpu=nativefor local builds. - Migrated from uv to pixi for dev tooling: Removed
[dependency-groups],[tool.uv.*]from pyproject.toml; deleteduv.lock; pre-commit hooks use bareruffinstead ofuvx ruff; README dev instructions updated to pixi commands. - Consolidated config files: Merged
.coveragercintopyproject.toml[tool.coverage.*]; deleted.env(pixi activation replaces it); un-gitignored.cargo/config.toml(now contains only project-standardBLPAPI_ROOT). - CI lint job uses pixi:
lint-pythonjob now usesprefix-dev/setup-pixiwith the lightweightlintenvironment, replacinguvx ruff. - Request tracing is more consistent: Python request middleware now sees the generated
request_idin bothRequestContext.request_idandRequestContext.params_dict, centralized request logs include the request ID, and the Rust request path forwards it as the Bloomberg request label for better audit/debug correlation. - Bindgen/libclang toolchain aligned: All Rust FFI crates now use
bindgen 0.72.1with runtime loading, and the pixi environment now requireslibclang >=22. This fixes incorrect Bloomberg SDKblpapi_ManagedPtr_t_generation under newer libclang releases and removes the need for correlation-ID layout workarounds.
Removed
Section titled “Removed”XBBG_DEV_SDK_ROOTenv var: UseBLPAPI_ROOTinstead. The.envfile fallback inblpapi-sys/build.rshas been removed.BLPAPI_LINK_LIB_NAMEenv var: Auto-detection covers all platforms.uv.lock: Replaced bypixi.lock..coveragerc: Configuration moved topyproject.toml.
- datamock C API (
datamock_c_api.cpp):datamock_Message_typeStringanddatamock_Element_nameStringreturnedconst char*into temporaries (Namedestroyed at end of full-expression). Pointers are now stable via thread-local string copies before returning. - datamock tests: C API integration tests moved to
crates/datamock/tests/c_api.rs; message/field strings decoded with lossy UTF-8 (mock data is not always valid UTF-8); tests serialized behind a mutex to avoid races on C++ global state;build.rspasses-Wno-unused-parameterfor stub-heavy sources. - datamock C++ warnings: Safer null/empty check in
Nameequality vs C string;ServiceRefDatamarksname/createRequestwithoverride;SchemaTypeDefinitiondestructor matches throwing body withnoexcept(false). - De-duplicated Rust recipe helpers: Extracted
array_value_as_string,date32_to_naive,as_string_colinto sharedxbbg-recipes/src/utils.rs. - De-duplicated Python code: Consolidated
_to_pandas_wide(was in bothinfo.pyandbloomberg.py); unified_FUTURES_MONTH_CODESto use Rust-sourcedext_get_futures_months(); extracted_apply_settle_overridehelper replacing 5 repeated blocks inbonds.py.
1.0.0b7 - 2026-03-18
Section titled “1.0.0b7 - 2026-03-18”- Python type stubs for
xbbg._coreviapyo3-stub-gen: auto-generated.pyifiles provide full IDE autocompletion and type-checker support forEngineConfig,Engine,Subscription, and all Rust-backed functions. Includespy.typedPEP 561 marker. - macOS ARM64 wheel builds in CI and release workflows. Wheels are now built and tested for Linux x86_64, Windows x86_64, and macOS ARM64 across Python 3.10–3.14.
- CI auto-regeneration of type stubs: stubs are regenerated and auto-committed after all CI checks pass, ensuring
.pyifiles stay in sync with Rust annotations. Engineclass for non-global multi-engine routing. Create independent engine instances and scope them viawith engine:(sync) orasync with engine:(async). The globalconfigure()+blp.bdp()API is unchanged —Engineis fully opt-in.- TLS support for encrypted B-PIPE connections:
tls_client_credentials,tls_trust_material,tls_handshake_timeout_msonEngineConfigandconfigure(). - Identity lifecycle FFI:
Session.generate_token(),Session.send_authorization_request(),Session.subscribe_with_identity()for multi-user entitlement flows. - Runtime SDK version:
get_sdk_info()now includesruntime_versionfield reporting the linked Bloomberg C SDK version viablpapi_getVersionInfo()(e.g.,"3.26.2.1"). Also available asxbbg._core.sdk_version()→(major, minor, patch, build)tuple. - Async request cancellation: cancelling the Python task for any async Bloomberg request now propagates to the Bloomberg SDK via
Session::cancel(correlationId). The worker drops local request state immediately after a successful cancel and remains usable for subsequent requests. - Reconnect resilience (Phases 1–3) for the Rust engine (#245):
- Fail-fast on session death: request workers now immediately drain all in-flight requests with an error on
SessionTerminated/SessionConnectionDowninstead of letting callers hang indefinitely. Workers are markedDeadand restored toHealthyonSessionConnectionUp. - Service re-open before re-subscribe:
recover_active_subscriptions()now re-opens all previously opened services before re-issuing subscriptions after reconnect, fixing a critical gap where recovery could silently fail. - Health-aware dispatch: request pool round-robin skips
Deadworkers; returnsAllWorkersDownimmediately if the entire pool is dead. - Retry with exponential backoff:
RetryPolicyonEngineConfig(retry_max_retries,retry_initial_delay_ms,retry_backoff_factor,retry_max_delay_ms) enables automatic retry of transient request failures. - Recovery limits:
max_recovery_attemptsandrecovery_timeout_mscap subscription recovery to prevent infinite loops. - Lifecycle events:
ConnectionLost,Reconnected, andRecoveryFailedevents emitted to subscription status for observability. - New error variants:
BlpAsyncError::SessionLostandAllWorkersDownmapped to PythonBlpSessionError. - Python surface: all new config fields exposed in
EngineConfig,configure(), andEngine();engine.worker_health()returns per-worker health status.
- Fail-fast on session death: request workers now immediately drain all in-flight requests with an error on
- Multi-server failover via
serverskwarg (#250). Pass a list of(host, port)tuples for automatic Bloomberg SDK failover usingsetServerAddress(host, port, index). Existinghost/portkwargs unchanged for single-server use. - ZFP over leased lines via
zfp_remotekwarg (#255). Set to"8194"or"8196"with TLS credentials to connect via Bloomberg Zero Footprint without a local Terminal. UsesZfpUtil::getOptionsForLeasedLinesfrom the SDK. - Identity entitlement checking (#252):
Identity.is_authorized(service),Identity.has_entitlements(service, eids), andIdentity.seat_type()for B-PIPE multi-user entitlement verification. - Bloomberg SDK logging bridge (#253):
enable_sdk_logging(level)andEngineConfig.sdk_log_levelroute native BLPAPI internal logs intoxbbg-logtracing targetxbbg.sdk. Default is off; registration happens before session start when enabled.
Changed
Section titled “Changed”- Engine Architecture & EngineConfig documentation: README now includes a full reference for all 20+
EngineConfigfields (worker pools, subscription tuning, buffers, validation, auth), an ASCII architecture diagram, and auth mode examples. - API surface updated to v1: README function tables, examples, and Connection Options section now reflect v1 names (
blkp,bport,earnings,convert_ccy,configure(),subscribe/stream, etc.) and remove stale v0.x references (lookupSecurity,exchange_tz,set_format,Formatenum). - Dev setup and contributing guides updated for v1 project structure (
py-xbbg/srcpaths, Astro docs,uv syncdependency-groups).
- cargo-deny advisory ignores for unmaintained
unic-*crates (transitive deps ofrustpython-parserviapyo3-stub-gen, build-time only).
1.0.0b6 - 2026-03-16
Section titled “1.0.0b6 - 2026-03-16”Changed
Section titled “Changed”- Internal correlation ID dispatch overhaul: The async engine no longer uses raw Bloomberg integer correlation IDs as direct slab indexes. All request and session dispatch now routes through an explicit dispatch-key layer at the session boundary, preventing ID collisions between auth subscriptions and user requests and aligning lifecycle tracking with Bloomberg SDK semantics.
- Logging levels better match the quiet-by-default workflow: Request roundtrip telemetry and Python subscription lifecycle messages now emit at
DEBUGinstead ofINFO, while exchange metadata fetch failures that cleanly fall back now emit atWARNINGinstead ofERROR, keeping normal control-flow noise out of default logs without hiding real request telemetry.
- SAPI authentication fails with
BLPAPI_ERROR_DUPLICATE_CORRELATIONID(#248):CorrelationId::default()returnedInt(0), which is a valid explicit correlation ID. WhensetSessionIdentityOptionsregisteredInt(0)for the auth flow, subsequentsendRequestcalls with the same default ID were rejected as duplicates (rc=131077). The default is nowCorrelationId::Unset(maps toBLPAPI_CORRELATION_TYPE_UNSETin the FFI struct), matching the official Pythonblpapibehavior where the SDK auto-generates unique IDs. Affects all SAPI authentication modes (app,user,userapp,dir,token).
1.0.0b5 - 2026-03-12
Section titled “1.0.0b5 - 2026-03-12”- Rust-backed Bloomberg session authentication for v1: Added structured auth support across the Rust core, async engine, and PyO3 bindings for
user,app,userapp,dir,manual, andtokenauth modes, enabling SAPI/B-PIPE session configuration from the v1 Python API. - Request middleware chain for telemetry and wrappers: Added
RequestContextplus middleware registration helpers aroundarequest()so callers can layer centralized request instrumentation, logging, caching, and wrapper behavior without patching individual endpoint functions.
Changed
Section titled “Changed”configure()is now the canonical engine/session setup surface: Connection/auth setup now flows throughconfigure()with support for legacy aliases such asserver_host,server_port,max_attempt, andauto_restart, while the temporaryconnect()/disconnect()wrappers were removed before release.
- Auth/session startup failures now propagate with context: Request and subscription workers now wait for Bloomberg startup/auth events before proceeding, so failed authentication and session-start problems surface as actionable errors instead of being swallowed or masked by later service-open failures.
- Rust/Python CI regressions in the new auth path: Cleaned release-blocking lint and formatting issues in the new auth/middleware code paths so the full Linux/Windows CI matrix passes with the beta 5 changes.
1.0.0b4 - 2026-03-10
Section titled “1.0.0b4 - 2026-03-10”Changed
Section titled “Changed”- Subscription failure isolation for mixed-topic streams: Real-time subscriptions now treat Bloomberg
SubscriptionFailureand unexpectedSubscriptionTerminatedevents as per-ticker status instead of fatal stream errors when other topics remain healthy. Mixed subscriptions keep delivering data for valid tickers while exposing failed topics through subscription metadata. - Subscription lifecycle observability: Real-time subscriptions now retain bounded status/event history for topic lifecycle transitions, session connectivity, service readiness, slow-consumer/data-loss signals, and reconnect recovery attempts so callers can inspect operational state without scraping logs.
- Non-fatal disconnect handling with opt-in recovery:
SessionConnectionDownno longer tears down healthy subscriptions by default. Callers can opt intorecovery_policy="resubscribe"to issue reconnect-time recovery subscribes while tracking attempts, successes, and last recovery errors through subscription status metadata.
- Subscription failure metadata: Python subscriptions now expose
failed_tickersandfailuresso callers can inspect which topics Bloomberg rejected or terminated, along with the reported reason and failure kind. - Subscription health/status surfaces: Python subscriptions now expose
status,events,topic_states,session_status,admin_status,service_status,all_failed, and expandedstatsfields including data-loss counters, last-message timestamps, and effective overflow policy.
1.0.0b3 - 2026-03-06
Section titled “1.0.0b3 - 2026-03-06”- Backend enum and availability checks (#234): Ported
Backendenum and backend availability infrastructure fromrelease/0.xintopy-xbbg/src/xbbg/backend.py. The canonicalBackendenum now has all 13 backends (addedCUDF,MODIN,DASK,IBIS,PYSPARK,SQLFRAME). New public helpers:is_backend_available(),check_backend(),get_available_backends(),print_backend_status(),validate_backend_format(),is_format_supported(),get_supported_formats(),check_format_compatibility(). IncludesMIN_VERSIONS,PACKAGE_NAMES,MODULE_NAMES, andSUPPORTED_FORMATSdicts for version validation and actionable install instructions.
Changed
Section titled “Changed”- Subscription mutation synchronization: Refactored subscription worker ownership to split the single-owner pool lease from a cloneable command handle, allowing subscription
add()/remove()paths in bothxbbg-asyncand PyO3 to drop metadata locks before awaiting Bloomberg command dispatch while still serializing mutations safely.
- Additional GIL release coverage in PyO3 bindings: Released the GIL around synchronous cache-save calls, Arrow pivot/format inspection helpers, and subscription metadata snapshots so Python threads are not blocked during disk I/O, pure Rust Arrow work, or waits on subscription state locks.
- Reduced avoidable Arrow-path copies: Removed intermediate string allocations for borrowed Bloomberg string/enum values and stopped cloning field-name/subfield-name vectors in
refdata,histdata, andbulkdataextraction paths before the existing zero-copy PyArrow export boundary. - Removed unused
liefdependency: Droppedlief>=0.17from core[project.dependencies]; the package was never imported anywhere in the codebase.
1.0.0b2 - 2026-03-05
Section titled “1.0.0b2 - 2026-03-05”- Field-validation toggle for refdata/histdata requests: Added optional
validate_fieldsrequest parameter inrequest()/arequest()and typed wrappers (abdp/bdp,abdh/bdh,abds/bds). This supports per-request strict validation override while still honoring engine-levelvalidation_modedefaults. - Engine-side field-validation enforcement:
xbbg-asyncnow validates requested fields forReferenceDataRequestandHistoricalDataRequestbefore dispatch when validation is enabled, returning configuration errors for unknown Bloomberg fields in strict mode. - Live validation toggle smoke script: Added
py-xbbg/tests/live/field_validation_toggle_smoke.pyto verify on/off behavior against a connected Bloomberg session. - Request-plumbing coverage for
validate_fields: Addedpy-xbbg/tests/test_validate_fields_toggle.pyto verify Python parameter serialization and forwarding through async/sync wrappers.
Changed
Section titled “Changed”- Canonical exception exports:
xbbg.exceptionsnow re-exports Rust_coreexception classes (BlpError,BlpRequestError, etc.) as the single source of truth, with Python-only exceptions remaining additive. - Validation helper compatibility: Preserved
BlpValidationError.from_rust_error(...)by attaching the compatibility classmethod to the canonical Rust-backed validation exception. - Generated sync wrapper metadata:
blp.pygenerated sync wrappers now derive__doc__and__annotations__from async templates directly; remaining manual generated sync wrapper boilerplate was removed. - Integration logging expectations: Updated logging integration assertions to match centralized
arequestrequest logging (bloomberg ... ReferenceDataRequest) instead of deprecated endpoint-specific debug strings. - Optional pandas integration paths: Updated pandas-dependent integration tests to use
pytest.importorskip("pandas"), avoiding hard failures when pandas is not installed.
except BlpErrorcatchability gap: Runtime exceptions raised by Rust (for exampleBlpRequestError) are now catchable viaxbbg.exceptions.BlpErrorimport paths because both now point to the same canonical Rust exception hierarchy.
1.0.0b1 - 2026-03-03
Section titled “1.0.0b1 - 2026-03-03”- Endpoint-factory regression tests: Added focused coverage for generated
abflds/bfldsandabqr/bqrrouting, validation, and reshape behavior inpy-xbbg/tests/test_endpoint_factory_bflds.pyandpy-xbbg/tests/test_endpoint_factory_bqr.py
Changed
Section titled “Changed”- Template endpoint generation in
blp.py: Migrated clean-fit wrappers to generated async/sync endpoints backed by_GeneratedEndpointSpecand_EndpointPlan, includingabdp/bdp,abdh/bdh,abds/bds,abdib/bdib,abdtick/bdtick,abql/bql,abqr/bqr,absrch/bsrch,abeqs/beqs,ablkp/blkp,abport/bport,abcurves/bcurves,abgovts/bgovts, andabflds/bflds
bqrpandas dependency regression: Removed unconditionalto_pandas()conversion in BQR postprocessing; quote requests now use Arrow-native checks/reshape and run without requiring pandas for standard flows
1.0.0a3 - 2026-02-27
Section titled “1.0.0a3 - 2026-02-27”bqr()/abqr()Bloomberg Quote Request: Tick-level dealer quotes withdate_offset(-2d,-1w,-3h),start_date/end_datedate ranges, and optionalinclude_broker_codes,include_spread_price,include_yield,include_condition_codes,include_exchange_codesparameters. Generic extractor fallback reshaped via_reshape_bqr_generic()bflds()/abflds()unified field metadata lookup: Single function for both field info (fields=[...]) and keyword search (search_spec='...').bfld/abfldprovided as backward-compatible aliases. Convenience wrappersfieldInfo()/fieldSearch()preservedinclude_security_errorsoption forbdp()/arequest(): Optionally surface per-security failures as rows in the result DataFrame instead of silently dropping them- Extension modules (
xbbg.ext):bonds(6 functions),options(6 functions + 5 enums),cdx(8 functions) for fixed income, equity options, and credit default swap index analytics - Streaming performance enhancements: Per-subscription config (
flush_threshold,overflow_policy,stream_capacity), observability metrics via shared atomics,tick_modesupport - Live integration tests: 69 tests across
test_ext_bonds.py(21),test_ext_options.py(20),test_ext_cdx.py(22) covering all ext module functions - Streaming tests: Tests for
tick_mode, per-subscription config, and observability metrics - Rust exchange/session APIs: Added low-level exchange resolution support with
ExchangeInfometadata, runtime exchange overrides, session timezone conversion utilities, andmarket_timinghelpers in the Rust layer (xbbg-ext,xbbg-async,pyo3-xbbg) - Live exchange smoke test: Added
py-xbbg/tests/live/test_exchange_resolution.pycovering override precedence, UTC session conversion, liveresolve_exchange,fetch_market_info, andmarket_timing
Changed
Section titled “Changed”- README: Updated API reference tables with
bflds(), expanded BQR section with spread/yield/broker parameters and examples - Futures resolver: Aligned with
release/0.xchain methodology (FUT_CHAIN_LAST_TRADE_DATES) - CDX resolver: Aligned methodology with
release/0.x
Removed
Section titled “Removed”- Legacy
xbbg/Python package directory: Fully removed; all code now lives inpy-xbbg/src/xbbg/
- Empty
RecordBatchconstruction: Handle empty ordered RecordBatch inxbbg-asyncwithout panic - Security failure surfacing:
refdataextractor now properly surfaces per-security errors instead of silently dropping them FIELD_SEARCHextractor: Corrected to useExtractorHint.FIELD_INFOinstead of generic extractor- Unused
loggingimport inext/options.py: Removed to pass ruff lint - Test imports:
BlpInternalErrorimported from_core(Rust) instead ofexceptions(Python) - CI fixes: Resolved 4 Python test failures, clippy warnings (
too_many_arguments,SubscriptionMetricsre-export), ruff check/format violations, cargo fmt formatting, module path fortest_markets.py, Linux test runtime setup - Exchange refdata parsing shape support:
resolve_exchangenow handles both WIDE and LONG refdata responses by mapping(field, value)rows when Bloomberg returns long-shape metadata
1.0.0a2 - 2026-02-19
Section titled “1.0.0a2 - 2026-02-19”Changed
Section titled “Changed”- README: Comprehensive rewrite with full API reference tables, comparison matrix, multi-backend documentation, detailed intraday session guide, fixed income/options/CDX analytics examples, troubleshooting section, and data storage documentation
1.0.0a1 - 2026-02-19
Section titled “1.0.0a1 - 2026-02-19”- Rust-powered engine: Complete ground-up rewrite delivering up to 10x faster data retrieval with zero-copy Arrow transfer between Rust and Python. The engine spans 11 purpose-built crates: safe FFI bindings with SIMD-accelerated parsing (
blpapi-sys,xbbg-core), an async worker pool engine with state machines for every Bloomberg request type (xbbg-async), Rust ports of extension and recipe logic (xbbg-ext,xbbg-recipes— all 12 recipes exposed via PyO3), zero-GIL tracing (xbbg-log), CI/test stubs (xbbg-sys), and PyO3 Python bindings (pyo3-xbbg) - New Python package (
py-xbbg/): Complete v1 API powered by the Rust backend, replacing the pure-Pythonxbbg/package. Lazy-loaded via__getattr__for near-instant import - Streaming APIs:
vwap()/avwap()for VWAP streaming (//blp/mktvwap),mktbar()/amktbar()for market bar streaming,depth()/adepth()for market depth (B-PIPE),chains()/achains()for option/futures chain streaming (B-PIPE) — all with async variants - New Bloomberg API functions:
bcurves()/abcurves()for yield curve lookup,bgovts()/abgovts()for government securities lookup,bflds()/abflds()for field search (replacingfieldInfo/fieldSearch) - Generic request API:
request()/arequest()— direct access to any Bloomberg service and operation with schema-driven kwargs routing. Power users can hit any Bloomberg endpoint without a dedicated wrapper - Schema introspection:
bops()/abops()to list service operations,bschema()/abschema()for full service schema,get_schema()/aget_schema(),list_operations()/alist_operations(),get_enum_values()/aget_enum_values(),list_valid_elements()/alist_valid_elements()— all with async variants.generate_stubs()andconfigure_ide_stubs()for IDE auto-completion generated from live Bloomberg schemas - Test without a Bloomberg Terminal:
datamockanddatamock-syscrates — a C++ BEmu port with C API and Rust FFI bindings for deterministic testing of reference, historical, intraday bar, intraday tick, and market data requests - Field type cache:
FieldTypeCache,FieldInfo,resolve_field_types()/aresolve_field_types(),cache_field_types(),get_field_info(),clear_field_cache()for caching and resolving Bloomberg field metadata - Engine lifecycle management:
shutdown(),reset(),is_connected()for explicit Rust engine control EngineConfig: Rust-native engine configuration (PyO3PyEngineConfig) — subscription pool size, request pool size, flush thresholds, auto-restart on disconnection- Auto-restart on disconnection: Subscription sessions automatically reconnect after network interruptions via
setAutoRestartOnDisconnection Time64Microsvalue type: Microsecond-precision time-of-day extraction from BloombergDatetimefields, with ArrowTime64Microstype support in generic, histdata, and refdata state handlersBlpBPipeErrorexception: New exception class for B-PIPE-specific errors, added to the existing exception hierarchy- Technical Analysis improvements:
ta_study_params()to inspect study parameters,generate_ta_stubs()for IDE auto-completion of TA study names - Logging control:
set_log_level(),get_log_level()to control Rust-side tracing verbosity without Python overhead - Bloomberg SDK message receive time:
Message::receive_time()for latency measurement and diagnostics - Service definitions:
Service,Operation,OutputMode,RequestParams,ExtractorHintenums for type-safe Bloomberg service configuration - Extension modules (
py-xbbg/src/xbbg/ext/):currency,fixed_income,futures,historical— ported to work with the Rust backend in LONG format - Markets module (
py-xbbg/src/xbbg/markets/):bloomberg,info,overrides,resolvers,sessions— exchange metadata, market timing, and override normalization - Data definition files:
defs/bloomberg.tomlanddefs/exchanges.tomlfor data-driven Bloomberg and exchange configuration - Starlight documentation site: Full rewrite from Sphinx to Astro Starlight — API reference (
blp.md,exceptions.md,schema.md,services.md), getting started guides (installation.mdx,introduction.mdx,quickstart.mdx), async/streaming/migration/output-format guides, and configuration reference - Benchmark suites: Rust benchmarks via Criterion (
xbbg-bench— allocation profiling, datetime/name micro-benchmarks, cached response parsing, livebdp/subscription benchmarks) and Python benchmarks (benchmarks/—bdp,bdh,bdib,bdtick,bql, rawblpapiwith version-based result tracking) - Comprehensive test suites:
py-xbbg/tests/with unit tests for imports, backends, blp API, backend conversion, currency conversion, exceptions, futures validation, integration, markets, and yield types. Live test suite (py-xbbg/tests/live/) for API, engine, subscription lifecycle, and subscription fixes - CI infrastructure:
ci-rust.ymlfor multi-platform Rust CI (clippy, rustfmt, unit tests, integration tests,cargo-audit,cargo-deny, semver-checks),ci-docker.ymlfor reusable container image builds, Docker containers for Rust CI and manylinux wheel builds - Codegen tool (
codegen/generate.py): Python code generator for service definitions, includingSEMI_LONGoutput format support fromrelease/0.x - SDK setup script (
scripts/sdktool.ps1): PowerShell script for Bloomberg SDK vendor layout management cargo-denyconfiguration (deny.toml): License and security policy for all Rust dependencies- Future language binding scaffolds:
bindings/napi-xbbg/(Node.js N-API),bindings/dotnet-xbbg/(.NET),apps/xbbg-cli/(CLI),apps/xbbg-server/(server), andjs-xbbg/(npm package) vendor/blpapi-sdk/README.md: Instructions for vendoring the Bloomberg C++ SDK locally
Changed
Section titled “Changed”- Build system: Switched to
setuptools-rust(PyO3) withsetuptools_scmversioning.pyproject.tomlnow builds the Rust extension viasetuptools.build_meta - Python package source location: Moved from
xbbg/(in-tree) topy-xbbg/src/xbbg/for the Rust-backed package layout. The native extension is compiled asxbbg._core - Runtime dependencies:
pandasis no longer required — now onlynarwhals>=1.30,pyarrow>=22.0.0,lief>=0.17. Removedblpapi,tomli, and all other previous hard dependencies - Python version support: Added Python 3.14 to classifiers (
>=3.10,<3.15) pypi_upload.ymlworkflow: Completely rewritten forsetuptools-rustwheel builds with Bloomberg SDK detection, replacing the pure-Python sdist/wheel workflowpre-commit-config.yaml: Updated hooks for the Rust+Python monorepo — addedcargo fmt,cargo clippy, and scoped ruff topy-xbbg/andxbbg/.gitignore: Expanded for Rust build artifacts (target/), native extension outputs, SDK vendor directory, benchmark results, and IDE files- README.md: Rewritten for v1.0 — concise project description, Rust-powered backend highlights, installation and quick start replacing the extensive v0.x documentation
- CONTRIBUTING.md: Rewritten for the Rust+Python development workflow
- LICENSE: Updated to Apache-2.0 with revised copyright
- Maximum-performance release builds:
lto = "fat",codegen-units = 1,panic = "abort",strip = "symbols"for production;opt-level = 3forxbbg-core,opt-level = 2for dev - Subscription pool default: Reduced from 4 to 1 worker, consolidated into
EngineConfig - Legacy
xbbg/package: Minor cleanups — addedfrom __future__ import annotationsacross all__init__.pyfiles, normalized docstring quotes from single to double, removed# noqalint suppression comments, replacedlambda: []withlistin pipeline factory registry default resolvers
Removed
Section titled “Removed”xbbg/__init__.py: Top-level package init replaced bypy-xbbg/src/xbbg/__init__.pywith Rust backendxbbg/blp.py: 178-line deprecation compatibility layer — all functions now live inpy-xbbg/src/xbbg/blp.pybacked by Rustxbbg/const.py: 187-line constants module — constants moved to Rust crates anddefs/*.tomlxbbg/core/__init__.py: 35-line core package init — core functionality replaced by Rust enginexbbg/core/process.py: 787-line Bloomberg message processing module — replaced byxbbg-asyncRust engine state machinesxbbg/utils/pipeline.py: 336-line pipeline utilities — replaced by Rust engine pipelinexbbg/io/__init__.py: IO module init removed (module gutted in v0.12.0)xbbg/markets/__init__.py: 76-line markets package init — replaced bypy-xbbg/src/xbbg/markets/xbbg/markets/resolvers.py: Futures/CDX resolvers moved toxbbg-extRust crateexamples/feeds/pub.pyandexamples/feeds/sub.py: Legacy feed examples- Sphinx documentation:
docs/conf.py,docs/index.rst(1,293 lines),docs/Makefile,docs/make.bat,docs/docstring_style.rst— replaced by Starlight .readthedocs.yaml: ReadTheDocs configuration (docs now use Starlight)MANIFEST.in: No longer needed with thesetuptools-rustbuild systemSECURITY.md: Security policy document_config.yml: Jekyll configurationcodecov.yml: Codecov configuration- 9 CI workflows:
auto_ci.yml,ci_docs.yml,codeql-analysis.yml,publish_docs.yml,publish_testpypi.yml,pypi_build_test.yml,release_assets.yml,update_index_on_release.yml,update_readme_on_release.yml— consolidated intoci-rust.yml,ci-docker.yml, and rewrittenpypi_upload.yml
- Clippy 1.93 lints: Resolved
map_orand doc indentation warnings across all Rust crates - Windows LLVM/
LIBCLANG_PATHsetup: Fixed detection and configuration forbindgenon Windows CI - Linux
LIBCLANG_PATHdetection: Fixedlibclang-devpath resolution on Linux CI - Non-ASCII characters in comments: Replaced em dashes with ASCII equivalents to pass CI source checks
- Subscription slab key reuse race: Prevented key reuse on subscription removal in
xbbg-asyncthat could cause events to route to wrong handlers - Subscription error propagation: Subscription errors now propagate as Python exceptions via PyO3 instead of being silently swallowed
- Subscription pipeline rewrite: Multi-type support, error propagation, and event time tracking in
xbbg-async Datetimefield zeroed date parts: Added parts bitmask check to correctly handle BloombergDatetimefields with zeroed date components- DLL search path setup (Windows): Moved SDK DLL search path configuration to module level in
py-xbbgto fixfrom xbbg._core import Xfailures Request::set_bool: UsesetElementStringfor Bool elements in Bloomberg requests (Bloomberg API quirk)- TA study requests: Wired through
elementsinstead of unusedjson_elementspath WIDEformat compatibility: Produces 0.7.7-compatible DataFrame structure from the Rust backend- Backend double-conversion bug: Fixed duplicate conversion when Rust backend returns data that is then converted again by Python
0.12.0 - 2026-02-18
Section titled “0.12.0 - 2026-02-18”- Async-first architecture: All Bloomberg API functions (
bdp,bds,bdh,bdib,bdtick,bql,beqs,bsrch,bqr,bta) now have async counterparts (abdp,abds,abdh, etc.) as the source of truth; sync wrappers delegate via_run_sync()(#218) - Bond analytics module (
xbbg.ext.bonds): 6 new functions for fixed income analytics —bond_info(reference metadata and ratings),bond_risk(duration, convexity, DV01),bond_spreads(OAS, Z-spread, I-spread, ASW),bond_cashflows(cash flow schedule),bond_key_rates(key rate durations and risks),bond_curve(multi-bond relative value comparison) - Options analytics module (
xbbg.ext.options): 6 new functions and 5 enums for equity option analytics —option_info(contract metadata),option_greeks(Greeks and implied volatility),option_pricing(value decomposition and activity),option_chain(chain viaCHAIN_TICKERSwith overrides),option_chain_bql(chain via BQL with rich filtering),option_screen(multi-option comparison). Enums:PutCall,ChainPeriodicity,StrikeRef,ExerciseType,ExpiryMatch - CDX analytics (
xbbg.ext.cdx): 8 new functions for credit default swap index analytics —cdx_info,cdx_defaults,cdx_pricing,cdx_risk,cdx_basis,cdx_default_prob,cdx_cashflows,cdx_curve.cdx_pricing/cdx_risksupportCDS_RRrecovery rate override YieldTypeexpanded: AddedYTW(Yield to Worst),YTP(Yield to Put),CFY(Cash Flow Yield) toYieldTypeenumworkout_dtparameter foryas(): Workout date for yield-to-worst/call calculations, maps toYAS_WORKOUT_DTBloomberg override. Acceptsstr(YYYYMMDD) ordatetimetzparameter forbdib()/abdib(): Controls output timezone for intraday bar data. Defaults toNone(exchange local timezone, matching v0.7.x behavior). Settz='UTC'to keep UTC timestamps, or pass any IANA timezone string (e.g.,'Europe/London')exchange_tz()helper: Returns the IANA timezone string for any Bloomberg ticker (e.g.,blp.exchange_tz('AAPL US Equity')->'America/New_York'). Exported viablp.exchange_tz()- LONG_TYPED output format: New
_to_long_typed()function produces typed value columns (value_f64,value_i64,value_str,value_bool,value_date,value_ts) with exactly one populated per row based on the Arrow type of each field - LONG_WITH_METADATA output format: New
_to_long_with_metadata()function produces(ticker, date, field, value, dtype)wherevalueis stringified anddtypecontains the Arrow type name (e.g.double,int64,string) - CI non-ASCII source check: New
auto_ci.ymlstep rejects non-ASCII characters in Python source files (allows CJK for ticker tests) - Comprehensive test coverage: 55+ new tests including bond analytics (7), CDX analytics (8), options analytics, timezone conversion (13),
ovrdsdict normalization (7),_events_to_table()(16),bdtickformat variants (5), mixed-type BDP (2), and output format tests (12)
Changed
Section titled “Changed”- Unified I/O layer: All Bloomberg requests now flow through a single
arequest()async entry point inconn.py, replacing scattered session/service management across modules (#218) - Futures resolution uses
FUT_CHAIN_LAST_TRADE_DATES(#223): Replaced manual candidate generation (FUT_GEN_MONTH+ batchbdp) with Bloomberg-nativeFUT_CHAIN_LAST_TRADE_DATESvia singlebds()call. ~2x faster (0.25-0.30s vs 0.53-0.72s) sync_apidecorator: Replaces 13 hand-written sync wrappers across API modules (screening.py,historical.py,intraday.py, etc.) with a singlesync_api(async_fn)call- Table-driven deprecation wrappers: 23 manual wrapper functions in
blp.pyreplaced by dict + loop pattern; 24warn_*functions indeprecation.pyreplaced by_DEPRECATION_REGISTRY+get_warn_func()lookup - Market session rules extracted to TOML (
markets/config/sessions.toml): All MIC and exchange code rules moved fromsessions.pyinto data-driven TOML config, reducingsessions.pyfrom 364 to 168 lines (54% reduction) - Pipeline factory registry (
pipeline_factories.py): Centralized factory dispatch replaces scattered conditionals - CDX ticker format corrected: Version is now a separate space-delimited token (e.g.,
CDX HY CDSI S45 V2 5Y Corpinstead ofS45V2) tomliconditional dependency added:tomli>=2.0.1for Python < 3.11 (TOML parsing forsessions.toml)- Net reduction of ~1,346 lines across 27 files from codegen and table-driven optimizations
Removed
Section titled “Removed”xbbg/io/db.py: SQLite database helper module (zero imports across codebase) (#218)xbbg/io/param.py: Legacy parameter/configuration module (zero imports across codebase) (#218)xbbg/io/files.py: File path utility module (zero imports after replacing 6 usages incache.pyandconst.pywithpathlib.Path) (#218)regression_testing/: Standalone v0.7.7 regression test directory; all scenarios covered bytest_live_endpoints.py(#218)MONTH_CODE_MAPand futures candidate generation helpers: Superseded byFUT_CHAIN_LAST_TRADE_DATESchain resolution (#223)- Stale files:
pmc_cache.json,xone.db, empty__init__files,test_param.py(#218)
bdtickformat parameter was completely non-functional: All five output formats (LONG, SEMI_LONG, WIDE, LONG_TYPED, LONG_WITH_METADATA) were broken due to MultiIndex column wrapping, killed index name, and mixed-type Arrow conversion errorsbdibtimezone regression: The Arrow pipeline rewrite (v0.11.0) dropped the UTC-to-exchange local timezone conversion that existed in v0.7.x. Restored with configurabletzparameterArrowInvalidon multi-field BDP calls: Bloomberg returns different Python types for different fields. New_events_to_table()builds Arrow tables with automatic type coercion fallback (#219)create_requestcrashed whenovrdspassed as dict: Now normalizes dict to list of tuples before iteration (SO#79880156)- Case-sensitive
backendandformatparameters: Added_missing_classmethod toBackendandFormatenums for case-insensitive lookup (#221) - Mock session leak in tests: Added autouse
_reset_session_managerfixture to preventMagicMockpersistence across test modules (#213) intervalparameter leaked as Bloomberg override: Added toPRSV_COLSso it stays local (#145)StrEnumPython 3.10 compatibility: Added polyfill for Python < 3.11- Non-ASCII characters in source: Replaced with ASCII equivalents for CI compliance
Security
Section titled “Security”- Bump
cryptographyfrom 46.0.4 to 46.0.5: Fixes CVE-2026-26007 (#217)
0.12.0b3 - 2026-02-16
Section titled “0.12.0b3 - 2026-02-16”- Bond analytics module (
xbbg.ext.bonds): 6 new functions for fixed income analytics —bond_info(reference metadata and ratings),bond_risk(duration, convexity, DV01),bond_spreads(OAS, Z-spread, I-spread, ASW),bond_cashflows(cash flow schedule),bond_key_rates(key rate durations and risks),bond_curve(multi-bond relative value comparison) - Options analytics module (
xbbg.ext.options): 6 new functions and 5 enums for equity option analytics —option_info(contract metadata),option_greeks(Greeks and implied volatility),option_pricing(value decomposition and activity),option_chain(chain viaCHAIN_TICKERSwith overrides),option_chain_bql(chain via BQL with rich filtering),option_screen(multi-option comparison). Enums:PutCall,ChainPeriodicity,StrikeRef,ExerciseType,ExpiryMatch - CDX analytics (
xbbg.ext.cdx): 8 new functions for credit default swap index analytics —cdx_info,cdx_defaults,cdx_pricing,cdx_risk,cdx_basis,cdx_default_prob,cdx_cashflows,cdx_curve.cdx_pricing/cdx_risksupportCDS_RRrecovery rate override YieldTypeexpanded: AddedYTW(Yield to Worst),YTP(Yield to Put),CFY(Cash Flow Yield) toYieldTypeenumworkout_dtparameter foryas(): Workout date for yield-to-worst/call calculations, maps toYAS_WORKOUT_DTBloomberg override. Acceptsstr(YYYYMMDD) ordatetimetzparameter forbdib()/abdib(): Controls output timezone for intraday bar data. Defaults toNone(exchange local timezone, matching v0.7.x behavior). Settz='UTC'to keep UTC timestamps, or pass any IANA timezone string (e.g.,'Europe/London')exchange_tz()helper: Returns the IANA timezone string for any Bloomberg ticker (e.g.,blp.exchange_tz('AAPL US Equity')->'America/New_York'). Exported viablp.exchange_tz()tzfield onDataRequestandRequestBuilder: Propagates timezone control through the pipeline.RequestBuildergains.tz()builder method- CI non-ASCII source check: New
auto_ci.ymlstep rejects non-ASCII characters in Python source files (allows CJK for ticker tests) - Live endpoint tests: 7 tests for bond analytics, 8 tests for CDX analytics, plus options analytics coverage in
test_live_endpoints.py - 13 unit tests for timezone conversion (
test_intraday_timezone.py): Covers default exchange tz, explicit UTC, explicit timezone, Japanese equities, empty exchange info, empty tables, column renaming, and DataRequest/RequestBuilder propagation - 7 regression tests for
ovrdsdict normalization (test_overrides.py): Covers dict crash, correct element setting, multiple overrides, list-of-tuples backward compat, and None/empty edge cases
Changed
Section titled “Changed”- Futures resolution uses
FUT_CHAIN_LAST_TRADE_DATES(#223): Replaced manual candidate generation (FUT_GEN_MONTH+ batchbdp) with Bloomberg-nativeFUT_CHAIN_LAST_TRADE_DATESvia singlebds()call. ~2x faster (0.25-0.30s vs 0.53-0.72s). RemovedMONTH_CODE_MAP,_get_cycle_months,_construct_contract_ticker sync_apidecorator: Replaces 13 hand-written sync wrappers across API modules (screening.py,historical.py,intraday.py, etc.) with a singlesync_api(async_fn)call- Table-driven deprecation wrappers: 23 manual wrapper functions in
blp.pyreplaced by dict + loop pattern; 24warn_*functions indeprecation.pyreplaced by_DEPRECATION_REGISTRY+get_warn_func()lookup - Market session rules extracted to TOML (
markets/config/sessions.toml): All MIC and exchange code rules moved fromsessions.pyinto data-driven TOML config, reducingsessions.pyfrom 364 to 168 lines (54% reduction) - Pipeline factory registry (
pipeline_factories.py): Centralized factory dispatch replaces scattered conditionals - Wildcard imports in
__init__.pyfiles: 9__init__.pyfiles simplified to use wildcard imports with explicit__all__lists - CDX ticker format corrected: Version is now a separate space-delimited token (e.g.,
CDX HY CDSI S45 V2 5Y Corpinstead ofS45V2) tomliconditional dependency added:tomli>=2.0.1for Python < 3.11 (TOML parsing forsessions.toml)- Net reduction of ~1,346 lines across 27 files from codegen and table-driven optimizations
Removed
Section titled “Removed”update_readme_on_release.ymlworkflow: Inline changelog in README replaced by link toCHANGELOG.mdMONTH_CODE_MAPand futures candidate generation helpers: Superseded byFUT_CHAIN_LAST_TRADE_DATESchain resolution (#223)
bdibtimezone regression: The Arrow pipeline rewrite (v0.11.0) dropped the UTC-to-exchange local timezone conversion that existed in v0.7.x. Intraday bar timestamps were returned in UTC instead of exchange local time. Restored the conversion inIntradayTransformer.transform()with configurabletzparametercreate_requestcrashed whenovrdspassed as dict:create_request(ovrds={"PRICING_SOURCE": "BGN"})raisedValueError: too many values to unpackbecause iterating a dict yields keys (strings), not (key, value) tuples. Now normalizes dict to list of tuples before iteration. Also updated type annotation to acceptdict[str, Any](SO#79880156)- Case-sensitive
backendandformatparameters:Backend("POLARS")andFormat("WIDE")raisedValueErrorbecause enum values are lowercase. Added_missing_classmethod to bothBackendandFormatenums for case-insensitive lookup (#221) StrEnumPython 3.10 compatibility: AddedStrEnumpolyfill in options module for Python < 3.11 whereenum.StrEnumdoes not exist- Python 3.10 mock patching: Fixed
patch.object()usage for Python 3.10 compatible mock patching in tests by exposing submodules and patching at source - Non-ASCII characters in source: Replaced checkmarks, em dashes, and arrows with ASCII equivalents across the codebase for CI compliance
- Ruff lint errors: Fixed import sorting (I001) and docstring formatting issues
0.12.0b2 - 2026-02-13
Section titled “0.12.0b2 - 2026-02-13”- 16 unit tests for
_events_to_table()(test_events_to_table.py): covers basic contract, mixed-type columns (float+str, int+str, float+date, kitchen sink), null handling, non-uniform dict keys, and pipeline integration (#219) - 2 live regression tests for mixed-type BDP (
test_live_endpoints.py):test_bdp_mixed_type_fieldsandtest_bdp_mixed_type_multiple_tickersexercise the exact bug scenario withES1 Index/NQ1 IndexusingFUT_CONT_SIZE+FUT_VAL_PT(#219)
ArrowInvalidon multi-field BDP calls: Bloomberg returns different Python types for different fields (e.g.,floatforFUT_CONT_SIZE,strforFUT_VAL_PT). When both land in the same Arrow value column,pa.array()raisedArrowInvalid. New_events_to_table()builds Arrow tables directly from event dicts with automatic type coercion fallback — stringify onArrowInvalid/ArrowTypeError, preserving nulls (#219)- Post-transform
pa.Table.from_pandas()mixed-type failure: Protected the secondary Arrow conversion (after narwhals transform) with the same stringify fallback for object columns (#219)
0.12.0b1 - 2026-02-12
Section titled “0.12.0b1 - 2026-02-12”Changed
Section titled “Changed”- Async-first architecture: All Bloomberg API functions (
bdp,bds,bdh,bdib,bdtick,bql,beqs,bsrch,bqr,bta) now have async counterparts (abdp,abds,abdh, etc.) as the source of truth; sync wrappers delegate via_run_sync()(#218) - Unified I/O layer: All Bloomberg requests now flow through a single
arequest()async entry point inconn.py, replacing scattered session/service management across modules (#218) - Pipeline and process modules: Adapted
pipeline_core,process, andrequest_builderto work with the asyncarequest()foundation (#218) - Top-level async exports: All async API variants (
abdp,abds,abdh,abdib,abdtick,abql,abeqs,absrch,abqr,abta) exported fromxbbg.blp(#218) - IO module cleanup: Removed dead code and fixed type annotations across
xbbg/io/(#218) - Test coverage expanded: 571 tests total (up from 543), covering all connection-related GitHub issues and all previously untested paths in
conn.py
Removed
Section titled “Removed”xbbg/io/db.py: SQLite database helper module (zero imports across codebase) (#218)xbbg/io/param.py: Legacy parameter/configuration module (zero imports across codebase) (#218)xbbg/io/files.py: File path utility module (zero imports after replacing 6 usages incache.pyandconst.pywithpathlib.Path) (#218)xbbg/tests/test_param.py: Tests for deletedparammodule (7 tests) (#218)xbbg/markets/cached/pmc_cache.json: Stale pandas-market-calendars cache file (pmc dependency removed in v0.11.0) (#218)xbbg/tests/__init__.py,examples/feeds/__init__.py: Empty__init__files (#218)xbbg/tests/xone.db: Stale SQLite test database (#218)regression_testing/: Standalone v0.7.7 regression test directory (6 files); all 9 test scenarios already covered byxbbg/tests/test_live_endpoints.pywith stricter assertions (#218)
- Mock session leak in tests: Added autouse
_reset_session_managerfixture inconftest.pyto preventMagicMocksessions from persisting in theSessionManagersingleton across test modules, which caused infinite__getattr__→_get_child_mockrecursion and stack overflow on Windows (#213) intervalparameter leaked as Bloomberg override:intervalwas not inPRSV_COLS, causing it to be sent to Bloomberg as an override field instead of being used locally for bar sizing (#145)- README Data Storage section: Clarified that only
bdib()(intraday bars) has caching viaBarCacheAdapter; all other functions always make live Bloomberg API calls (#215) - README async example for Jupyter: Fixed
asyncio.run()example that fails in notebooks (which already have a running event loop) by addingawait-based andnest_asyncioalternatives (#216) - Unused imports in tests: Removed
import osfromtest_intraday_api.pyandimport pytestfromtest_logging.pythat caused Ruff F401 lint failures in CI
Security
Section titled “Security”- Bump
cryptographyfrom 46.0.4 to 46.0.5: Fixes CVE-2026-26007 — subgroup attack due to missing validation for SECT binary elliptic curves (#217)
0.11.4 - 2026-02-06
Section titled “0.11.4 - 2026-02-06”bdtickArrow conversion failure: Object columns containingblpapi.Nameinstances causedpa.Table.from_pandas()to fail; now stringified before conversionadjust_ccyfield name mismatch: Looked for"Last_Price"butbdhreturns lowercase"last_price"since v0.11.1, causingKeyErroractive_futurestwo failures: Usednw.coalesce()with a column (last_tradeable_dt) not present in SEMI_LONG format, and called.height(not valid on narwhals DataFrame) instead of.shape[0]- Live test assertions: Updated 10 tests in
test_live_endpoints.pyto match WIDE format default (active since v0.7.x)
0.11.3 - 2026-02-06
Section titled “0.11.3 - 2026-02-06”- Duplicate
portkeyword argument:bbg_service()andbbg_session()used.get()to extractportthen forwarded**kwargsstill containing it, causingTypeError: got multiple values for keyword argument 'port'on non-default ports (e.g., B-Pipe connections) (#212) - Session resource leak:
clear_default_session()set_default_session = Nonewithout callingsession.stop(), leaking OS file descriptors over repeated connect/disconnect cycles (#211) - Wrong session removed on retry:
send_request()retry path calledremove_session(port=port)withoutserver_host, always targeting//localhost:{port}even for remote hosts - Inconsistent
server_hostextraction:get_session()/get_service()checkedserver_hostbeforeserver, butconnect_bbg()did the opposite, causing different code paths to resolve different hosts when both keys were present - Resource leak on start failure:
connect_bbg()did not stop the session before raisingConnectionErrorwhen.start()failed, leaking C++ resources allocated by theSession()constructor
0.11.2 - 2026-02-05
Section titled “0.11.2 - 2026-02-05”- Extended multi-backend support: Added 6 new backends matching narwhals’ full backend support:
- Eager backends:
cudf(GPU-accelerated via NVIDIA RAPIDS),modin(distributed pandas) - Lazy backends:
dask(parallel computing),ibis(portable DataFrame expressions),pyspark(Apache Spark),sqlframe(SQL-based DataFrames) - Total: 13 backends (6 eager + 7 lazy)
- Eager backends:
- Backend availability checking: New functions to check and validate backend availability with helpful error messages:
is_backend_available(backend)- Check if a backend package is installedcheck_backend(backend)- Check availability with version validation, raises helpful errorsget_available_backends()- List all currently available backendsprint_backend_status()- Diagnostic function showing all backend statuses
- Format compatibility checking: New functions to validate format support per backend:
is_format_supported(backend, format)- Check if a format works with a backendget_supported_formats(backend)- Get set of supported formats for a backendcheck_format_compatibility(backend, format)- Validate with helpful errorsvalidate_backend_format(backend, format)- Combined validation for API functions
xbbg.extmodule: New extension module for v1.0 migration containing helper functions that will be removed fromblpnamespacexbbg.ext.currency-adjust_ccy()for currency conversionxbbg.ext.dividends-dividend()for dividend historyxbbg.ext.earnings-earning()for earnings breakdownsxbbg.ext.turnover-turnover()for trading volumexbbg.ext.holdings-etf_holdings(),preferreds(),corporate_bonds()BQL helpersxbbg.ext.futures-fut_ticker(),active_futures()for futures resolutionxbbg.ext.cdx-cdx_ticker(),active_cdx()for CDX index resolutionxbbg.ext.yas-yas(),YieldTypefor fixed income analytics
- New v1.0-compatible import path:
from xbbg.ext import dividend, fut_ticker, ...(no deprecation warnings) - Pandas removed as required dependency:
xbbg.extmodules now use only stdlib datetime and narwhals, making pandas fully optional
Changed
Section titled “Changed”- Backend enum reorganized: Backends now categorized as eager (full API) vs lazy (deferred execution)
- Format restrictions: WIDE format only available for eager backends (pandas, polars, pyarrow, narwhals, cudf, modin); lazy backends limited to LONG and SEMI_LONG
- Version requirements updated: Minimum versions now match narwhals requirements (duckdb>=1.0, dask>=2024.1)
xbbg/markets/resolvers.pynow re-exports fromxbbg.ext.futuresandxbbg.ext.cdxfor backwards compatibility- Internal implementations moved to
xbbg/ext/module; old import paths still work with deprecation warnings
- BDS output format: Restored v0.10.x backward compatibility for
bds()output format (#209)- Default
format='wide'now returns single data column with ticker as index (pandas) or column (other backends) - Field column dropped for cleaner output matching v0.10.x behavior
- Users can opt-in to new 3-column format with
format='long'
- Default
- ibis backend: Updated to use
ibis.memtable()instead of deprecatedcon.read_in_memory() - sqlframe backend: Fixed import path to use
sqlframe.duckdb.DuckDBSession
0.11.1 - 2026-02-05
Section titled “0.11.1 - 2026-02-05”- Field names now lowercase: Restored v0.10.x behavior where
bdp(),bdh(), andbds()return field/column names as lowercase (#206)
0.11.0 - 2026-02-02
Section titled “0.11.0 - 2026-02-02”- Arrow-first pipeline: Complete rewrite of internal data processing using PyArrow for improved performance
- Multi-backend support: New
Backendenum supporting narwhals, pandas, polars, polars_lazy, pyarrow, duckdb - Output format control: New
Formatenum with long, semi_long, wide options - bta(): Bloomberg Technical Analysis function for 50+ technical indicators (#175)
- bqr(): Bloomberg Quote Request function emulating Excel
=BQR()for dealer quote data with broker attribution (#22) - yas(): Bloomberg YAS (Yield Analysis) wrapper for fixed income analytics with
YieldTypeenum - preferreds(): BQL convenience function to find preferred stocks for an equity ticker
- corporate_bonds(): BQL convenience function to find active corporate bonds for a ticker
set_backend(),get_backend(),set_format(),get_format()configuration functionsget_sdk_info()as replacement for deprecatedgetBlpapiVersion()- v1.0-compatible exception classes (
BlpError,BlpSessionError,BlpRequestError, etc.) EngineConfigdataclass andconfigure()function for engine configurationServiceandOperationenums for Bloomberg service URIs- Treasury & SOFR futures support: TY, ZN, ZB, ZF, ZT, UB, TN, SFR, SR1, SR3, ED futures (#198)
- Comprehensive logging improvements across critical paths with better error traceability
- CONTRIBUTING.md and CODE_OF_CONDUCT.md for community standards
Changed
Section titled “Changed”- All API functions now accept
backendandformatparameters - Internal pipeline uses PyArrow tables with narwhals transformations
- Removed pytz dependency (using stdlib
datetime.timezone) - Intraday cache now includes interval in path (#80) - different bar intervals cached separately (breaking: existing cache will miss)
- Internal class renames with backward compatible aliases (
YamlMarketInfoProvider→MetadataProvider) - Logging level adjustments:
BBG_ROOT not setpromoted to WARNING, cache timing demoted to DEBUG
Deprecated
Section titled “Deprecated”connect()/disconnect()- engine auto-initializes in v1.0getBlpapiVersion()- useget_sdk_info()insteadlookupSecurity()- will becomeblkp()in v1.0fieldInfo()/fieldSearch()- will merge intobfld()in v1.0bta_studies()- renamed tota_studies()in v1.0getPortfolio()- renamed tobport()in v1.0- Helper functions (
dividend(),earning(),turnover(),adjust_ccy()) moving toxbbg.extin v1.0 - Futures/CDX utilities (
fut_ticker(),active_futures(),cdx_ticker(),active_cdx()) moving toxbbg.extin v1.0
Removed
Section titled “Removed”- Trials mechanism: Eliminated retry-blocking system that caused silent failures after 2 failed attempts
- pandas-market-calendars dependency: Exchange info now sourced exclusively from Bloomberg API with local caching
- Import without blpapi installed: Fixed
AttributeErrorwhen importing xbbg without blpapi (#200) - Japan/non-US timezone fix for bdib: Trading hours now correctly converted to exchange’s local timezone (#198)
- stream() field values: Subscribed field values now always included in output dict (#199)
- Slow Bloomberg fields: TIMEOUT events handled correctly; requests wait for response with
slow_warn_secondswarning (#193) - Pipeline data types: Preserve original data types instead of converting to strings (#191)
- Futures symbol parsing: Fixed
market_info()to correctly parse symbols likeTYH6→TY(#198) - get_tz() optimization: Direct timezone strings recognized without Bloomberg API call
- bdtick timezone fix: Pass exchange timezone to fix blank results for non-UTC exchanges (#185)
- bdtick timeout: Increased from 10s to 2 minutes for tick data requests
- Extended BDS test date range to 120 days for quarterly dividends
- Helper functions now work correctly with LONG format output
- Logging format compliance fixes (G004, G201)
0.11.0b5 - 2026-01-25
Section titled “0.11.0b5 - 2026-01-25”Changed
Section titled “Changed”- Internal class renames with backward compatible aliases (
YamlMarketInfoProvider->MetadataProvider)
Removed
Section titled “Removed”- Trials mechanism: Eliminated retry-blocking system that caused silent failures after 2 failed attempts
- pandas-market-calendars dependency: Exchange info now sourced exclusively from Bloomberg API with local caching
- Import without blpapi installed: Fixed
AttributeErrorwhen importing xbbg without blpapi (#200) - Japan/non-US timezone fix for bdib: Bloomberg returns trading hours in EST; now correctly converted to exchange’s local timezone (#198)
- get_tz() improvement: Direct timezone strings recognized without Bloomberg API call
0.11.0b4 - 2026-01-24
Section titled “0.11.0b4 - 2026-01-24”- yas(): Bloomberg YAS (Yield Analysis) wrapper for fixed income analytics with
YieldTypeenum (#202) - Treasury and SOFR futures support: TY, ZN, ZB, ZF, ZT, UB, TN, SFR, SR1, SR3, ED futures (#198)
- stream() field values: Subscribed field values now always included in output dict (#199)
- Futures symbol parsing: Fixed
market_info()to correctly parse symbols likeTYH6->TY(#198)
0.11.0b3 - 2026-01-21
Section titled “0.11.0b3 - 2026-01-21”- bqr(): Bloomberg Quote Request function emulating Excel
=BQR()for dealer quote data with broker attribution (#22)
- Slow Bloomberg fields: TIMEOUT events handled correctly; requests wait for response with
slow_warn_secondswarning (#193) - Pipeline data types: Preserve original data types instead of converting to strings (#191)
0.11.0b2 - 2026-01-20
Section titled “0.11.0b2 - 2026-01-20”- preferreds(): BQL convenience function to find preferred stocks for an equity ticker
- corporate_bonds(): BQL convenience function to find active corporate bonds for a ticker
- bdtick timezone fix: Pass exchange timezone to fix blank results for non-UTC exchanges (#185)
- bdtick timeout: Increased from 10s to 2 minutes for tick data requests
0.11.0b1 - 2026-01-10
Section titled “0.11.0b1 - 2026-01-10”- Arrow-first pipeline: Complete rewrite of data processing using PyArrow internally
- Multi-backend support: New
Backendenum supporting narwhals, pandas, polars, polars_lazy, pyarrow, duckdb - Output format control: New
Formatenum with long, semi_long, wide options - bta(): Bloomberg Technical Analysis function for 50+ technical indicators
set_backend(),get_backend(),set_format(),get_format()configuration functionsget_sdk_info()as replacement for deprecatedgetBlpapiVersion()- v1.0-compatible exception classes (
BlpError,BlpSessionError, etc.) EngineConfigdataclass andconfigure()functionServiceandOperationenums for Bloomberg service URIs
Changed
Section titled “Changed”- All API functions now support
backendandformatparameters - Internal pipeline uses PyArrow tables with narwhals transformations
- Removed pytz dependency (using stdlib
datetime.timezone)
Deprecated
Section titled “Deprecated”connect()/disconnect()- engine auto-initializes in v1.0getBlpapiVersion()- useget_sdk_info()lookupSecurity()- will becomeblkp()in v1.0fieldInfo()/fieldSearch()- will merge intobfld()in v1.0
0.10.3 - 2025-12-29
Section titled “0.10.3 - 2025-12-29”Changed
Section titled “Changed”- Re-enabled futures and CDX resolver tests
- Updated live endpoint tests for LONG format output
- Code style improvements using contextlib.suppress instead of try-except-pass
- Extended BDS test date range to 120 days for quarterly dividends
- Helper functions now work correctly with LONG format output
0.10.2 - 2025-12-29
Section titled “0.10.2 - 2025-12-29”Changed
Section titled “Changed”- CI/CD improvements with reusable workflows (workflow_call) for release automation
- Separated pypi_upload workflow for trusted publisher compatibility
0.10.1 - 2025-12-29
Section titled “0.10.1 - 2025-12-29”Changed
Section titled “Changed”- Trigger release workflows via release event instead of workflow_dispatch
- Removed Gitter badge (replaced by Discord)
- Added Discord community link and badge
- Persist blp.connect() session for subsequent API calls (#165)
0.10.0 - 2025-12-25
Section titled “0.10.0 - 2025-12-25”- Updated polars-bloomberg support for BQL, BDIB and BSRCH (#155)
- Add identifier type prefix to B-Pipe subscription topics (#156)
- Remove pandas version cap to support Python 3.14 (#161)
- Resolve RST formatting warning in index.rst (#162)
- Update Japan equity market hours for TSE trading extension (#163)
0.9.1 - 2025-12-11
Section titled “0.9.1 - 2025-12-11”Changed
Section titled “Changed”- Add blank lines around latest-release markers in index.rst
- Remove redundant release triggers from workflows
- Trigger release workflows explicitly from semantic_version
- Fix BQL returning only one row for multi-value results (#152)
0.9.0 - 2025-12-02
Section titled “0.9.0 - 2025-12-02”- Add etf_holdings() function for retrieving ETF holdings via BQL (#147)
- Add multi-day support to bdib() (#148)
- Add multi-day cache support for bdib() (#149)
- Resolve RST duplicate link targets and Sphinx build warnings
0.8.2 - 2025-11-19
Section titled “0.8.2 - 2025-11-19”- Fix BQL options chain metadata issues (#146)
0.8.1 - 2025-11-17
Section titled “0.8.1 - 2025-11-17”Changed
Section titled “Changed”- CI/CD workflow improvements for trusted publisher compatibility
0.8.0 - 2025-11-16
Section titled “0.8.0 - 2025-11-16”- bsrch(): Bloomberg SRCH queries for fixed income, commodities, and weather data (#137)
- Fixed income securities support: ISIN/CUSIP/SEDOL identifiers for bdib (#136)
- Server host parameter: Connect to remote Bloomberg servers via
serverparameter (#138) - Interval parameter for subscribe()/live(): Configurable update intervals for real-time feeds
- Semantic versioning workflow for automated releases
- Support for GY (Xetra), IM (Borsa Italiana), and SE (SIX) exchanges (#140)
- Comprehensive bar interval selection guide for bdib function
Changed
Section titled “Changed”- Comprehensive codebase cleanup and restructuring (#144)
- Improved logging with blpapi integration and performance optimizations (#135)
- Enhanced BEQS timeout handling with configurable
timeoutandmax_timeoutsparameters - Updated README with comparison table, quickstart guide, and examples
- Fix BQL syntax documentation and error handling (#141, #142)
- Remove 1-minute offset for bare session names in bdtick (#139)
- Resolve Sphinx build errors and RST formatting issues
0.8.0rc1 - 2025-11-17
Section titled “0.8.0rc1 - 2025-11-17”Changed
Section titled “Changed”- Comprehensive codebase cleanup and restructuring (#144)
0.8.0b2 - 2025-11-14
Section titled “0.8.0b2 - 2025-11-14”- Fix BQL syntax documentation and error handling (#141, #142)
0.8.0b1 - 2025-11-14
Section titled “0.8.0b1 - 2025-11-14”- BQL support: Bloomberg Query Language with QueryRequest and result parsing
- Sub-minute intervals for bdib: 10-second bars via
intervalHasSeconds=Trueflag - bsrch(): Bloomberg SRCH queries for fixed income, commodities, and weather data (#137)
- Fixed income securities support: ISIN/CUSIP/SEDOL identifiers for bdib (#136)
- Server host parameter: Connect to remote Bloomberg servers via
serverparameter (#138) - Interval parameter for subscribe()/live(): Configurable update intervals for real-time feeds
- Support for GY (Xetra), IM (Borsa Italiana), and SE (SIX) exchanges (#140)
Changed
Section titled “Changed”- Standardized Google-style docstrings across codebase
- Migrate to uv for development with PEP 621 pyproject.toml
- Improved logging with blpapi integration and performance optimizations (#135)
- Enhanced BEQS timeout handling with configurable
timeoutandmax_timeoutsparameters
- Remove 1-minute offset for bare session names in bdtick (#139)
0.7.11 - 2025-11-12
Section titled “0.7.11 - 2025-11-12”- BQL support: Bloomberg Query Language with QueryRequest and result parsing
- Sub-minute intervals for bdib: 10-second bars via
intervalHasSeconds=Trueflag - pandas-market-calendars integration for exchange session resolution
Changed
Section titled “Changed”- Standardized Google-style docstrings across codebase
- Migrate to uv for development with PEP 621 pyproject.toml
- Switch to PyPI Trusted Publishing (OIDC)
- Exclude tests from wheel and sdist distributions
- Fix BQL to use correct service name and handle JSON response format
- Normalize UX* Index symbols; fix pandas ‘M’ deprecation to ‘ME’ in fut_ticker
0.7.10 - 2025-11-05
Section titled “0.7.10 - 2025-11-05”- Enhanced Bloomberg connection handling with alternative connection methods
- Market resolvers for active futures and CDX tickers
Changed
Section titled “Changed”- Replace flake8 with ruff for linting
- Update Python version requirements and dependencies
- Clean up CI workflows and documentation
0.7.9 - 2025-04-15
Section titled “0.7.9 - 2025-04-15”Changed
Section titled “Changed”- Add exchanges support
- CI/CD configuration updates
- Corrected typo (thanks to @ShiyuanSchonfeld)
- Pin pandas version due to pd.to_datetime behaviour change in format_raw
- Fix TLS Options typo when creating a new connection
0.7.8a2 - 2022-12-03
Section titled “0.7.8a2 - 2022-12-03”- Additional exchanges support (#83)
Changed
Section titled “Changed”- CI/CD configuration improvements
0.7.7 - 2022-06-19
Section titled “0.7.7 - 2022-06-19”- Custom config usage in bdib (contributed by @hceh)
- Options in
blp.live(contributed by @swiecki)
Changed
Section titled “Changed”- Pandas options handling in doctest
- CI/CD configuration updates
0.7.7a4 - 2022-05-25
Section titled “0.7.7a4 - 2022-05-25”Changed
Section titled “Changed”- Pandas options handling in doctest
0.7.7a3 - 2021-12-31
Section titled “0.7.7a3 - 2021-12-31”- Typo fix
0.7.7a2 - 2021-12-20
Section titled “0.7.7a2 - 2021-12-20”- Custom config and reference exchange support (contributed by @hceh)
0.7.7a1 - 2021-07-13
Section titled “0.7.7a1 - 2021-07-13”- Options in
blp.live(contributed by @swiecki)
0.7.6 - 2021-07-05
Section titled “0.7.6 - 2021-07-05”- Log folder creation handling
- Alternative connection method support
- Custom session argument for Bloomberg connections
bdtickwith custom time range support
Changed
Section titled “Changed”- Update asset universe
- Exchange info corrections
- No manual conversion of timezones
- BDS fix for edge cases
- blpapi install URL correction
0.7.6a8 - 2021-04-17
Section titled “0.7.6a8 - 2021-04-17”- Log folder creation bug
0.7.6a7 - 2021-04-02
Section titled “0.7.6a7 - 2021-04-02”Changed
Section titled “Changed”- Update asset universe
0.7.6a6 - 2021-03-27
Section titled “0.7.6a6 - 2021-03-27”- Exchange info corrected
0.7.6a5 - 2021-03-05
Section titled “0.7.6a5 - 2021-03-05”Changed
Section titled “Changed”- No manual conversion of timezones
0.7.6a4 - 2021-03-05
Section titled “0.7.6a4 - 2021-03-05”bdtickwith custom time range support
0.7.6a3 - 2021-02-10
Section titled “0.7.6a3 - 2021-02-10”- Bug fixes for BDS and blpapi install URL
0.7.6a2 - 2021-02-07
Section titled “0.7.6a2 - 2021-02-07”- Alternative connection method
0.7.6a1 - 2021-02-03
Section titled “0.7.6a1 - 2021-02-03”- Add
sessas argument for custom Bloomberg session
0.7.5 - 2021-01-31
Section titled “0.7.5 - 2021-01-31”- Currency adjusted turnover function
- Useful fields for live feeds
- More examples in documentation
Changed
Section titled “Changed”- Standardize IO operations
- Log levels adjustment
- Replace
os.pathwith pathlib - Performance function improvements
- Default args of live feeds
- CCY adjust fix
- Bug in finding exchange info
0.7.5b2 - 2021-01-30
Section titled “0.7.5b2 - 2021-01-30”Changed
Section titled “Changed”- Log levels adjustment
0.7.5b1 - 2021-01-13
Section titled “0.7.5b1 - 2021-01-13”- New methods included in
__all__
- CCY adjust fix
0.7.5a9 - 2021-01-12
Section titled “0.7.5a9 - 2021-01-12”- Currency adjusted turnover function
0.7.5a09 - 2021-01-12
Section titled “0.7.5a09 - 2021-01-12”- Currency adjusted turnover function
0.7.5a8 - 2021-01-11
Section titled “0.7.5a8 - 2021-01-11”- Fix bug in finding exchange info
0.7.5a7 - 2021-01-07
Section titled “0.7.5a7 - 2021-01-07”Changed
Section titled “Changed”- Default args of live feeds
0.7.2 - 2020-12-16
Section titled “0.7.2 - 2020-12-16”- Logo image for project branding
Changed
Section titled “Changed”- Use
asyncfor live data feeds - Speed up by caching files
- Change logic of exchange lookup and market timing
- Push all values from live subscription
- Support for Python 3.8
- Proper caching implementation
0.7.0 - 2020-08-02
Section titled “0.7.0 - 2020-08-02”Changed
Section titled “Changed”bdhpreserves column orders (both tickers and flds)timeoutargument is available for all queriesbdtickusually takes longer to respond - can usetimeout=1000for example if keep getting empty DataFrame
0.6.7 - 2020-05-17
Section titled “0.6.7 - 2020-05-17”- Add flexibility to use reference exchange as market hour definition
- No longer necessary to add
.ymlfor new tickers, provided that the exchange was defined in/xbbg/markets/exch.yml
Changed
Section titled “Changed”- Switch CI from Travis to GitHub Actions
0.6.0 - 2020-01-23
Section titled “0.6.0 - 2020-01-23”- Tick data availability via bdtick()
Changed
Section titled “Changed”- Speed improvements by removing intermediate layer of generator for processing Bloomberg responses
0.5.0 - 2020-01-08
Section titled “0.5.0 - 2020-01-08”Changed
Section titled “Changed”- Rewritten library to add subscription, BEQS, simplify interface and remove dependency of
pdblp
0.1.22 - 2019-09-15
Section titled “0.1.22 - 2019-09-15”Security
Section titled “Security”- Remove PyYAML dependency due to security vulnerability
0.1.17 - 2019-07-01
Section titled “0.1.17 - 2019-07-01”- Add
adjustargument inbdhfor easier dividend / split adjustments