Skip to content

Commit b91bf41

Browse files
userFRMclaude
andauthored
v4.5.0: repr(C) FFI, DST timezone fix, audit findings (#43)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 80d6dfb commit b91bf41

11 files changed

Lines changed: 50 additions & 13 deletions

File tree

CHANGELOG.md

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [4.5.0] - 2026-04-02
9+
10+
### Breaking Changes
11+
12+
- **FFI: `#[repr(C)]` typed struct arrays replace JSON** -- all 60 data endpoints now return native struct arrays across the FFI boundary. C++ and Go SDKs read fields directly, zero JSON serialization. FPSS streaming events remain JSON (variable schemas).
13+
- C++ `OptionContract` now uses `std::string root` (was `const char*`)
14+
- Go SDK gains 9 previously missing Greeks endpoints
15+
16+
### Added
17+
18+
- **DST-aware timezone conversion** -- `eastern_offset_ms()` correctly handles EST/EDT transitions using US Energy Policy Act 2005 rules. Historical data from November-March now has correct ms_of_day values. (#32)
19+
- **gRPC flow control config** -- `DirectConfig` gained `mdds_window_size_kb` and `mdds_connection_window_size_kb`, wired into tonic channel builder. (#36)
20+
- Go SDK: `OptionSnapshotGreeksFirstOrder`, `OptionSnapshotGreeksSecondOrder`, `OptionSnapshotGreeksThirdOrder`, `OptionHistoryGreeksFirstOrder/SecondOrder/ThirdOrder`, `OptionHistoryTradeGreeksFirstOrder/SecondOrder/ThirdOrder` (#39)
21+
- Go SDK: `SnapshotTradeTick` type and converter
22+
- Go SDK: `Vera` field on `GreeksTick`
23+
- FFI: 13 typed tick array types (`TdxEodTickArray`, `TdxOhlcTickArray`, etc.) with `from_vec`/`free`
24+
- FFI: `TdxStringArray` for list endpoints, `TdxOptionContractArray` for contracts
25+
- C++ header: `thetadx.h` with all `#[repr(C)]` struct definitions and function signatures
26+
27+
### Fixed
28+
29+
- **Timezone hardcoded UTC-4** -- was producing ms_of_day shifted +1 hour for all Nov-Mar historical data. Now DST-aware with 5 unit tests. (#32)
30+
- **EOD parser divergent alias system** -- unified to shared `find_header()`. (#34)
31+
- **reconnect_wait_ms** -- changed from 1000 to 2000 to match Java terminal. (#35)
32+
- **C++ OptionContract use-after-free** -- root string was dangling after array free. Now deep-copies to `std::string`. (#39)
33+
- **Active subscriptions not cleared on explicit shutdown** -- `shutdown()` clears, involuntary disconnect preserves for reconnect. (#38)
34+
- Mermaid diagram syntax in architecture.md (#30)
35+
36+
### Documented
37+
38+
- Price type per-row variation as known limitation in jvm-deviations.md (#37)
39+
- FPSS ring buffer capacity monitoring as known limitation
40+
41+
## [4.4.0] - 2026-04-02
42+
843
## [4.3.0] - 2026-04-02
944

1045
### Added
@@ -470,7 +505,9 @@ See [TODO.md](TODO.md) for the production readiness checklist and performance ro
470505
- FIT decoder uses i64 accumulator with i32 saturation (no silent overflow)
471506
- Price type range enforced with `assert!` in release builds
472507

473-
[Unreleased]: https://github.com/userFRM/ThetaDataDx/compare/v4.3.0...HEAD
508+
[Unreleased]: https://github.com/userFRM/ThetaDataDx/compare/v4.5.0...HEAD
509+
[4.5.0]: https://github.com/userFRM/ThetaDataDx/compare/v4.4.0...v4.5.0
510+
[4.4.0]: https://github.com/userFRM/ThetaDataDx/compare/v4.3.0...v4.4.0
474511
[4.3.0]: https://github.com/userFRM/ThetaDataDx/compare/v4.2.0...v4.3.0
475512
[4.2.0]: https://github.com/userFRM/ThetaDataDx/compare/v4.1.2...v4.2.0
476513
[4.1.2]: https://github.com/userFRM/ThetaDataDx/compare/v4.1.1...v4.1.2

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ No-JVM ThetaData Terminal - native Rust SDK for direct market data access.
4242

4343
```toml
4444
[dependencies]
45-
thetadatadx = "4.2"
45+
thetadatadx = "4.5"
4646
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
4747
```
4848

crates/thetadatadx/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thetadatadx"
3-
version = "4.4.0"
3+
version = "4.5.0"
44
edition = "2021"
55
rust-version = "1.85"
66
authors = ["userFRM"]

docs-site/docs/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ description: Install ThetaDataDx, configure credentials, and run your first quer
1111
```toml [Rust]
1212
# Add to your Cargo.toml
1313
[dependencies]
14-
thetadatadx = "4.2"
14+
thetadatadx = "4.5"
1515
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
1616
```
1717
```bash [Python]

ffi/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thetadatadx-ffi"
3-
version = "4.4.0"
3+
version = "4.5.0"
44
edition = "2021"
55
description = "C FFI layer for thetadatadx — used by Go and C++ SDKs"
66
license = "GPL-3.0-or-later"

sdks/python/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thetadatadx-py"
3-
version = "4.4.0"
3+
version = "4.5.0"
44
edition = "2021"
55
description = "Python bindings for thetadatadx — native ThetaData SDK powered by Rust"
66

sdks/python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "maturin"
44

55
[project]
66
name = "thetadatadx"
7-
version = "4.4.0"
7+
version = "4.5.0"
88
description = "No-JVM ThetaData Terminal — native Rust SDK for direct market data access (Python bindings)"
99
readme = "README.md"
1010
requires-python = ">=3.9"

tools/cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thetadatadx-cli"
3-
version = "4.4.0"
3+
version = "4.5.0"
44
edition = "2021"
55
description = "CLI for ThetaDataDx — query ThetaData from your terminal"
66
license = "GPL-3.0-or-later"

tools/mcp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thetadatadx-mcp"
3-
version = "4.4.0"
3+
version = "4.5.0"
44
edition = "2021"
55
description = "MCP server for ThetaDataDx — gives LLMs instant access to ThetaData market data"
66
license = "GPL-3.0-or-later"

0 commit comments

Comments
 (0)