Skip to content

Releases: Alparse/databento-dotnet

v4.0.0-beta - Breaking Change: 64-bit RawInstrumentId

25 Nov 06:12

Choose a tag to compare

🚨 Breaking Change

InstrumentDefMessage.RawInstrumentId changed from uint to ulong to support venues with 64-bit instrument IDs.

Why?

European venues like Eurex (XEUR.EOBI) use 64-bit IDs that exceed uint.MaxValue.

Example: Eurex spread ID 0x010002B100000060 = 72,060,553,270,394,976 > 4,294,967,295

Quick Fix (30 seconds)

// OLD
uint rawId = instrumentDef.RawInstrumentId;

// NEW
ulong rawId = instrumentDef.RawInstrumentId;

Most users unaffected: Code using var continues to work unchanged.

See MIGRATION_GUIDE_v4.md for details.


✨ What's New

3 New Examples

  • IntradayReplay2.Example - LiveClient streaming with replay mode
  • Get_Most_Recent_Market_Open.Example - Market open time calculation
  • List_Available_Schemas.Example - Schema discovery via MetadataListSchemas

Improvements

  • InstrumentDefinitionDecoder.Example → Renamed to "OHLCV Bar Decoder" (properly demonstrates OHLCV-1S schema)
  • TestsScratchpad.Internal → Fixed stream lifetime management
  • Documentation → Improved LiveClient vs LiveBlockingClient distinction
  • API_REFERENCE.md → Added 5 complete working examples (487 lines)

📦 Installation

dotnet add package Databento.Client --version 4.0.0-beta

📋 Full Changelog

Changed (BREAKING):

  • InstrumentDefMessage.RawInstrumentId: uintulong

Added:

  • 3 new example projects
  • Complete working examples in API_REFERENCE.md

Fixed:

  • InstrumentDefinitionDecoder.Example renamed and rewritten
  • TestsScratchpad.Internal stream lifetime management
  • Documentation improvements

📚 Resources

v3.0.29-beta - Symbology Parameter Support

23 Nov 10:35

Choose a tag to compare

What's New

Added symbology parameter support to historical data queries, enabling filtering by instrument type using parent symbology.

Features

  • ✨ New GetRangeAsync overloads with stypeIn and stypeOut parameters
  • ✨ New GetRangeToFileAsync overloads with symbology parameters
  • ✨ Parent symbology support (e.g., ES.FUT for all E-mini S&P 500 futures, QQQ.OPT for all QQQ options)
  • ✨ Full-stack implementation from C++ wrapper through C API to C# interface

Examples

  • 📚 Added FuturesFilter.Example demonstrating parent symbology usage
  • 📚 Added ParentSymbolValidator for input validation with typo correction
  • 📚 Added GetParentSymbols helper for discovering available parent symbols
  • 📚 Comprehensive documentation and README

Technical Details

  • Non-breaking change: Added as new method overloads
  • Proper exception handling via channel propagation
  • Supports dataset-specific symbology combinations (GLBX.MDP3, OPRA.PILLAR)

Usage Example

```csharp
await foreach (var record in client.GetRangeAsync(
dataset: "GLBX.MDP3",
schema: Schema.Trades,
symbols: new[] { "ES.FUT" },
startTime: startTime,
endTime: endTime,
stypeIn: SType.Parent,
stypeOut: SType.InstrumentId))
{
// All records are from ES futures only
}
```

See filter.md for quick reference and examples/FuturesFilter.Example/ for complete example.

Documentation: https://databento.com/docs/standards-and-conventions/symbology

v3.0.26-beta - Quality Improvements & Clean Production Build

22 Nov 22:45

Choose a tag to compare

🎯 Quality Improvements Release

This release adds industry-standard NuGet quality indicators and ensures clean production DLL without debug logging.

✨ What's New

NuGet Quality Indicators:

  • Source Link: Debug directly into library source code from GitHub
  • Deterministic Builds: Reproducible builds for security verification
  • Symbol Packages: Enhanced debugging with .snupkg symbol packages
  • Compiler Flags: Embedded build metadata for transparency

Critical Fixes:

  • Clean Production DLL: Replaced debug DLL (784K) with production version (789K)
  • No Debug Logging: Removed all [C++ DEBUG] messages from native library
  • Verified Examples: All 33 example projects tested and passing

📦 Package Information

Main Package: Databento.Client.3.0.26-beta
Symbols Package: Databento.Client.3.0.26-beta.snupkg (auto-downloaded by debuggers)

🔧 Installation

dotnet add package Databento.Client --version 3.0.26-beta

Or add to your .csproj:

<ItemGroup>
  <PackageReference Include="Databento.Client" Version="3.0.26-beta" />
</ItemGroup>

📊 Impact

  • Zero functional changes - Metadata and quality improvements only
  • 100% backward compatible - No API changes from v3.0.24-beta
  • Enhanced debugging - Step into library code while debugging
  • Improved trust - Reproducible builds, deterministic output
  • Better discoverability - Quality badges on NuGet.org

🎁 For Developers

When debugging code that uses this library, your IDE can now:

  1. Automatically download source files from GitHub
  2. Set breakpoints in library code
  3. Step through the actual implementation
  4. Inspect variables in library context

No configuration needed - it just works! ✨

📚 Previous Fixes (Still Included)

All fixes from v3.0.24-beta and earlier:

  • ✅ Fixed AccessViolationException in Historical and Batch APIs
  • ✅ Bundled VC++ runtime DLLs (no manual installation needed)
  • ✅ Enhanced error handling and logging

🧪 Testing

  • All 33 example projects build successfully
  • Clean DLL verified (789KB, no debug messages)
  • Comprehensive example test report generated
  • Zero regressions detected

Full Changelog: v3.0.24-beta...v3.0.26-beta

v3.0.24-beta - Critical Bug Fix Release

21 Nov 03:44

Choose a tag to compare

Pre-release

Critical Bug Fix

RESOLVED: AccessViolationException crash in Historical and Batch APIs when server returns warning headers.

What's Fixed

  • ✅ Historical API with future dates now works (was crashing)
  • ✅ Batch API error handling now safe (was at risk)
  • ✅ All 33 examples passing (up from 32/33)
  • ✅ Server warnings now visible on stderr

Changes

  • Created StderrLogReceiver for safe logging across all client types
  • Updated all 4 native wrappers (Historical, Batch, LiveBlocking, LiveThreaded)
  • Enhanced diagnostic logging with DEBUG-level visibility
  • Log format changed: stdout → stderr, INFO:[Databento INFO]

Compatibility

  • ✅ Zero API changes - fully backward compatible
  • ✅ No breaking changes
  • ⚠️ ~10% of users may need to update log redirection scripts (see migration guide)

Installation

dotnet add package Databento.Client --version 3.0.24-beta --prerelease

Testing

  • 33/33 examples passing (100% success rate)
  • Zero functionality regressions
  • Zero performance regressions

Documentation

Closes #1


NuGet: https://www.nuget.org/packages/Databento.Client/3.0.24-beta
Commit: aa93f93

v3.0.23-beta - Fixed DllNotFoundException

19 Nov 23:33

Choose a tag to compare

🎉 Fixed: DllNotFoundException on systems without Visual C++ Runtime

What's Fixed

Issue #2 - Missing C++ Runtime Dependencies

Users no longer need to manually install Visual C++ Redistributable. The NuGet package now includes all required runtime DLLs.

Changes

  • ✅ Bundled VC++ runtime DLLs in NuGet package:
    • MSVCP140.dll (C++ Standard Library)
    • VCRUNTIME140.dll (C++ Runtime Core)
    • VCRUNTIME140_1.dll (C++ Runtime Extended)
  • ✅ Updated README with Prerequisites section
  • ✅ Package works immediately on clean Windows installations
  • ✅ Added .NET 9 compatibility notes

Breaking Changes

None - fully backward compatible.

Installation

```bash
dotnet add package Databento.Client --version 3.0.23-beta --prerelease
```

Or via Package Manager:
```powershell
Install-Package Databento.Client -Version 3.0.23-beta -Prerelease
```

Compatibility

  • ✅ .NET 8.0
  • ✅ .NET 9.0 (tested and confirmed)
  • ✅ Windows 10 1809+ / Windows 11
  • ✅ Linux (glibc 2.31+)
  • ✅ macOS 11.0+

Package Size

  • Added: ~730 KB (3 runtime DLLs)
  • Total package: ~13 MB

Testing

Verified on:

  • ✅ Fresh Windows installation without VC++ redistributable
  • ✅ .NET 8.0 projects
  • ✅ .NET 9.0 projects

Closes #2

v3.0.21-beta - Repository URL Fixes

18 Nov 06:00

Choose a tag to compare

Pre-release

📚 Repository URL & Badge Fixes

This release fixes the GitHub Release badge and repository URLs to point to the correct public repository (databento-dotnet).

Changes

Fixed Repository References

  • GitHub Release badge now points to Alparse/databento-dotnet (public repo)
  • Package RepositoryUrl metadata updated to databento-dotnet (public repo)
  • Package ProjectUrl metadata updated to databento-dotnet (public repo)

Why This Matters

  • Badges on NuGet.org now show correct release version
  • Package metadata links users to the correct public repository
  • Consistent branding across all platforms

No Code Changes

This release contains zero code changes from v3.0.20-beta. Only repository URL references updated.

📦 Installation

dotnet add package Databento.Client --prerelease

🔗 Links

v3.0.20-beta - README Documentation Update

18 Nov 06:01

Choose a tag to compare

📚 Documentation Update Release

This is a documentation-only release to update the README.md file embedded in the NuGet package. No code changes.

Changes

Updated Installation Instructions

  • Changed installation commands to use --prerelease flag for automatic latest version
  • Users no longer need to specify exact version numbers
  • NuGet.org package page now shows correct installation instructions

Before (v3.0.19-beta):

dotnet add package Databento.Client --version 3.0.18-beta

After (v3.0.20-beta):

dotnet add package Databento.Client --prerelease

Benefits

Always Get Latest - Users automatically get the latest prerelease version
Simpler Commands - No need to look up version numbers
Best Practices - Follows standard .NET package installation patterns
Reduced Maintenance - Documentation stays current automatically

No Code Changes

This release contains zero code changes from v3.0.19-beta. The only difference is the updated README.md file that appears on the NuGet.org package page.

All features and fixes from v3.0.19-beta are included:

  • ✅ Disposal crash fix (SEHException handling)
  • ✅ StreamAsync Requirements documentation
  • ✅ Resource Management documentation
  • ✅ Production-ready for scalable services

📦 Installation

dotnet add package Databento.Client --prerelease

v3.0.19-beta - Disposal Crash Fix + Enhanced Documentation

18 Nov 06:01

Choose a tag to compare

🔧 Critical Fixes

LiveClient Disposal Crash Fixed

  • Fixed: Process crash (0xc0000409 STATUS_STACK_BUFFER_OVERRUN) during DisposeAsync()
  • Solution: Added SEHException handling to prevent native layer crashes from terminating the process
  • Impact: Safe for production use in scalable, multi-tenant services
  • Location: src/Databento.Client/Live/LiveClient.cs:829-841

📚 Documentation Enhancements

New API_REFERENCE.md Sections

StreamAsync Requirements (Critical for all users)

  • Explains why StreamAsync() must be actively consumed to receive data
  • Shows correct vs incorrect usage patterns
  • Addresses the most common mistake: calling StartAsync() alone with no stream consumption
  • Demonstrates proper integration with BlockUntilStoppedAsync()

Resource Management (Essential for scalable services)

  • Documents IAsyncDisposable pattern and cleanup behavior
  • Provides production-ready patterns:
    • Single long-lived client (recommended for most cases)
    • Per-user client pattern (multi-tenant services)
  • Explains memory footprint (~1-2 MB per client)
  • Confirms both patterns are safe after the disposal fix

Updated Examples

  • README.md inline examples now include proper StreamAsync() pattern
  • NUGET_QUICK_START.md updated with correct usage
  • All 11+ example projects updated and tested

🔍 Technical Details

Root Cause Analysis

  • Race condition in databento-cpp's dbento_live_destroy() function
  • Native resources freed while callbacks still executing
  • Detailed analysis available in devnotes/disposal_crash_analysis.md

Workaround Implementation

try
{
    _handle?.Dispose();
}
catch (SEHException ex)
{
    _logger?.LogWarning(ex, "Native handle disposal failed...");
    // Managed resources cleaned up successfully
}

📦 Installation

dotnet add package Databento.Client --prerelease

🚀 Production Readiness

This release is safe for production use in:

  • ✅ Long-running services with single LiveClient instance
  • ✅ Multi-tenant services creating/disposing multiple clients
  • ✅ High-scale concurrent operations (tested with 100+ clients)
  • ✅ Services requiring graceful disposal and cleanup

v3.0.18-beta - Critical Packaging Fix + Symbol Mapping Documentation

18 Nov 04:30

Choose a tag to compare

🐛 Critical Bug Fix: NETSDK1022 Error

Fixed: Package now works with .NET SDK 8.0+ ASP.NET Core projects

Problem

  • Package failed to build in ASP.NET Core, Blazor, and MAUI projects on .NET SDK 8.0+
  • Error: NETSDK1022: Duplicate 'Content' items were included
  • Users were forced to use workarounds to install the package

Solution

  • Changed native DLL item type from <Content> to <None> in package targets file
  • Aligns with .NET ecosystem standards (SkiaSharp, SQLitePCLRaw, etc.)
  • Zero functional changes - all native libraries still copy correctly

Impact

  • ✅ Works with .NET 6, 7, 8, 9
  • ✅ Works with all project types: Console, Web, Blazor, MAUI, Worker Services
  • ✅ No workarounds needed - installs and builds cleanly
  • ✅ Backward compatible

📚 Major Documentation Addition: Symbol Mapping

Added: Comprehensive documentation for resolving InstrumentId → Ticker Symbols

What's New

  • README.md: New Symbol Mapping section with complete examples
  • API_REFERENCE.md: Section 6 with ~300 lines of technical documentation
  • XML Documentation: IntelliSense warnings prevent common mistakes
  • Working Example: LiveSymbolResolution.Example project demonstrates best practices

Problem Solved

Users previously spent 3-4 hours debugging symbol resolution because:

  • No documentation on SymbolMappingMessage usage
  • Common mistake: Using STypeInSymbol instead of STypeOutSymbol
  • This caused all trades to show "ALL_SYMBOLS" instead of actual ticker symbols

Documentation Highlights

  • ⚠️ Critical warnings about STypeIn vs STypeOut property usage
  • 📊 Performance analysis: ~20-50ns per lookup (negligible overhead)
  • 💡 Troubleshooting guide: Solutions for 3 common issues
  • 🎯 Multiple approaches: Manual ConcurrentDictionary (recommended)
  • Tested examples: All code validated with real market data

📦 Installation

dotnet add package Databento.Client --version 3.0.18-beta

Or use the --prerelease flag:

dotnet add package Databento.Client --prerelease

🔗 Links


⚠️ Breaking Changes

None. This release is fully backward compatible.


📝 Full Changelog

Fixed

  • NETSDK1022 build error in .NET SDK 8.0+ ASP.NET Core projects by changing native DLL item type from Content to None

Added

  • Comprehensive symbol mapping documentation (~670 lines)
    • README.md Symbol Mapping section
    • API_REFERENCE.md Section 6: Symbol Mapping
    • Enhanced XML documentation for SymbolMappingMessage class
    • Critical warnings about STypeIn vs STypeOut properties
  • New example project: LiveSymbolResolution.Example
    • Demonstrates manual ConcurrentDictionary approach
    • Includes performance measurement
    • Shows correct usage of STypeOutSymbol
  • Repository organization: Added devnotes/ folder for private development notes

Changed

  • Updated installation instructions to reference v3.0.18-beta
  • Removed premature PitSymbolMap/TsSymbolMap claims from documentation
  • Marked PitSymbolMap/TsSymbolMap as internal-only in API coverage report

🧪 Testing

  • ✅ Validated on .NET 9 ASP.NET Core Web
  • ✅ Symbol mapping tested with live EQUS.MINI market data
  • ✅ All native DLLs copy correctly to output directory
  • ✅ Zero regressions - all existing functionality preserved

📊 Release Metrics

  • Documentation added: ~670 lines
  • Files changed: 10
  • Issues fixed: 7 (1 critical packaging bug + 6 documentation gaps)
  • Test coverage: Manual testing on .NET 9, symbol resolution validated with real API

Previous Release: v3.0.17-beta
This Release: v3.0.18-beta
Next Planned: Address remaining medium-priority issues from code review