Releases: Alparse/databento-dotnet
v5.3.3
What's Changed
Fixed
- NOMINMAX guards on native wrappers — prevents
<windows.h>min/max macro conflicts that could cause compilation failures (Issue #24)
Changed
- Thread safety documentation — added class-level and method-level thread safety remarks to
ILiveClientandILiveBlockingClientdocumenting the databento-cpp calling convention: complete all Subscribe calls before StartAsync, await each call sequentially - README thread safety callout — added thread safety guidance between LiveClient and LiveBlockingClient API reference sections
- Coding agent guide — added pitfall #6 documenting concurrent Subscribe call risks with correct/incorrect code examples
Full Changelog: v5.3.2...v5.3.3
v5.3.2
What's Changed
Fixed
- Pin databento-cpp to v0.58.0 — prevents builds from pulling broken intermediate states from main branch (#24)
- Fix FormUrlEncodedContent disposal in retry loops — content was created outside the retry lambda, causing ObjectDisposedException on retry attempts in Reference API methods (PR #28)
- Fix XML doc comments — escape S&P as S&P, qualify BatchSubmitJobAsync cref (PR #25)
- Fix CA1826 — replace FirstOrDefault() with direct indexer in FileDataSource (PR #27)
Changed
- Deprecate caching API — WithMemoryCache(), WithDiskCache(), and related types marked [Obsolete] with guidance to use WithFileSource() (Issue #29)
- PlaybackController implements IDisposable — disposes internal SemaphoreSlim; called automatically during data source disposal (Issue #29)
- StreamAsync XML documentation — detailed docs explaining live mode vs backtest mode behavior (Issue #30)
- Add ConfigureAwait(false) across Reference API methods (PR #28)
- Remove CA1805 default initializations across 10 files (PR #26)
- Remove dead _apiKey field from LiveClient and ReferenceClient (PR #31)
Testing
- 427 tests passing across 13 test suites
- Verified against both project references and NuGet package
v5.3.0
Breaking Change
SchemaDateRange.Start and .End changed from string to DateTimeOffset (Issue #21)
DatasetRange already used DateTimeOffset for its Start/End properties, but SchemaDateRange (used in DatasetRange.RangeBySchema) was using raw strings. This inconsistency meant consumers had to manually parse dates to do comparisons or arithmetic.
What changed
SchemaDateRange.Start:string→DateTimeOffsetSchemaDateRange.End:string→DateTimeOffset- Added
SchemaDateRange.Durationcomputed property (matchesDatasetRange.Duration)
How to fix if affected
If your code assigned SchemaDateRange.Start or .End to a string variable:
// Before (v5.2.x)
string start = schemaRange.Start;
// After (v5.3.0)
string start = schemaRange.Start.ToString("o"); // ISO 8601
// Or better — just use DateTimeOffset directly
DateTimeOffset start = schemaRange.Start;Other changes
[JsonIgnore]added toDurationon bothDatasetRangeandSchemaDateRangeto prevent serialization leakage- Cleaned up .sln file: removed 23 gitignored project references that showed as absent for public repo clones (Issue #19 follow-up)
v5.2.3
Fixes & Features
Issue #18: Fix native DLL loading failures (debug builds)
- Root cause:
libcrypto-3-x64.dll,libssl-3-x64.dll,zstd.dll,legacy.dllwere debug builds requiringVCRUNTIME140D.dll/ucrtbased.dll(only available with Visual Studio) - All native DLLs rebuilt as Release configuration
- Removed unused
zlib1.dll - Improved
NativeLibraryLoaderdiagnostics with debug-build detection
Issue #19: Fix build-native.ps1 vcpkg/FetchContent conflict
- Added
vcpkg.jsonmanifest so CMake FetchContent properly installs OpenSSL/zstd via vcpkg - Build script now requires vcpkg and validates no debug dependencies in shipped DLLs
Issue #20: Add stype_in to Live API subscribe methods
- New overloads for
SubscribeAsync,SubscribeWithReplayAsync,SubscribeWithSnapshotAsyncon bothILiveClientandILiveBlockingClient - Enables continuous symbols (e.g.,
"MNQ.v.0"withSType.Continuous) - Fully backward compatible — existing overloads default to
SType.RawSymbol
Install
dotnet add package Databento.Client --version 5.2.3v5.2.2
Fix DllNotFoundException for native libraries (Issue #17)
Changes
- Rewrite
.targetsfile — Use explicit<Copy>tasks instead of fragile<None>+CopyToOutputDirectoryfor reliable native DLL deployment from NuGet packages - Add
buildTransitivesupport — Transitive package consumers now also get native DLLs copied to output - Improved diagnostics —
NativeLibraryLoadernow throwsDllNotFoundExceptionwith detailed search path info, OS/arch, and dependency status instead of silently failing
Install
dotnet add package Databento.Client --version 5.2.2v5.2.0
What's New
New Feature: keepZip option for BatchDownloadAsync (Issue #15)
Added a new overload to BatchDownloadAsync that creates a zip archive of downloaded files:
// Download and create a zip archive
var paths = await client.BatchDownloadAsync(outputDir, jobId, keepZip: true);
var zipPath = paths[0]; // Returns path to {jobId}.zipBehavior:
- Downloads all files from the batch job
- Creates a local
{jobId}.ziparchive containing all files - Deletes the extracted files after zipping
- Returns the path to the zip file
Non-Breaking Change
This release uses default interface implementation (C# 8+), so existing code that implements IHistoricalClient will continue to work without modification.
Documentation
- Updated API_REFERENCE.md with new method signature and examples
- Updated API_Classification.md with method details
- Added
BatchDownloadKeepZip.Exampledemonstrating the feature
Full Changelog: v5.1.4...v5.2.0
v5.1.1
v5.1.0
Release v5.1.0: Fix SecurityMasterRecord JSON Deserialization
Bug Fixes
Fixed JSON deserialization errors in SecurityMasterRecord when calling ReferenceClient.SecurityMaster.GetLastAsync():
| Field | Before | After | Reason |
|---|---|---|---|
LotSize |
int? |
decimal? |
API returns Number (can be 1.0) |
VotePerSec |
int? |
decimal? |
API returns Number (can be 1.0) |
SharesOutstanding |
long? |
string? |
API returns String |
SharesOutstandingDate |
DateOnly? |
string? |
API returns String |
Installation
dotnet add package Databento.Client --version 5.1.0v4.3.0: Fix BlockUntilStoppedAsync and StopAsync behavior
What's New
Bug Fixes
- Fixed
BlockUntilStoppedAsyncandStopAsyncbehavior (#9)BlockUntilStoppedAsync()now correctly blocks untilStopAsync()is calledBlockUntilStoppedAsync(timeout)properly waits for the specified timeout duration- Implemented TaskCompletionSource-based signaling matching C++
BlockForStopbehavior
Documentation
- Added Client Lifecycle section clarifying that clients cannot be restarted after stopping
- Added BlockUntilStoppedAsync usage examples for event-based streaming patterns
- Updated API Reference and AI Coding Agents guide
Changes
LiveClient.cs- Added_stoppedTcsTaskCompletionSource field and updatedStopAsync/BlockUntilStoppedAsyncBacktestingClient.cs- Applied same pattern for consistency
Installation
dotnet add package Databento.Client --version 4.3.0Full Changelog
v4.1.1 - Documentation Overhaul
What's Changed
Documentation Overhaul
- API_REFERENCE.md: Simplified from 3,723 → 364 lines (90% reduction) - now serves as quick-start guide
- API_Classification.md: Updated for v4.1.1, added resilience methods, architecture diagram shows .NET 8.0/9.0
- README.md: Complete symbol mapping examples for Live, LiveBlocking, and Historical clients
Details
- Added
WithKeyFromEnv()to all builder tables - Added resilience methods to LiveClientBuilder documentation:
WithAutoReconnect(bool)WithRetryPolicy(RetryPolicy)WithHeartbeatTimeout(TimeSpan)WithResilienceOptions(ResilienceOptions)
NuGet Package: https://www.nuget.org/packages/Databento.Client/4.1.1