You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The cgo bridge between Rust's C ABI and Go's runtime carries
per-call overhead that masks the upstream throughput this SDK is
engineered for. Users who need Go bindings can build their own cgo
wrapper against the unchanged C ABI in `crates/ffi/` — header at
`sdks/cpp/include/thetadx.h`, all FFI types and free fns exported as
`tdx_*` symbols.
Removes:
- `sdks/go/` (entire directory: 30 source files)
- Per-Go build_support modules + templates: `ticks/go.rs`,
`fpss_events/go_structs.rs`, `sdk_surface/go.rs`,
`endpoints/render/go.rs`, `endpoints/render/go_validate.rs`, all
`templates/go/`, `templates/validate_go/`, `templates/go_structs/`
- Go-specific `tick_schema.toml` render rows (`go_struct`,
`go_converter`) on every `[types.X.render]` block
- Go-specific `sdk_surface.toml` targets (`go_fpss`, `go`) and the
entire `[[go_ffi.tls_reader_markers]]` SSOT block
- `MethodTarget::GoFpss`, `UtilityTarget::Go`, `GoFfiSpec`,
`TlsReaderMarker`, plus every Go-only helper in
`endpoints/helpers.rs` and `sdk_surface/common.rs`
- CI Go SDK jobs in `ci.yml` and `live.yml` (`actions/setup-go`,
cgo wrapper steps), Go module from `dependabot.yml`, and the
`sdks/go/` rules in `.gitattributes`
Extracts shared `(size, align, offset)` math used by the C++ and
tdbe layout-assert emitters into a neutral `ticks/layout.rs` module.
Refreshes README, CONTRIBUTING, ROADMAP, the docs-site, and the
in-repo `docs/` tree. Mirrors `CHANGELOG.md` -> `docs-site/docs/changelog.md`.
The C ABI in `crates/ffi/` is unchanged — third-party cgo / Swift /
Zig wrappers continue to work against the same `extern "C"` surface.
Closes#481.
`thetadatadx` is a native Rust SDK for [ThetaData](https://thetadata.us) market data. It connects directly to ThetaData's three public surfaces — MDDS (historical request/response over gRPC), FPSS (real-time streaming over TCP), and FLATFILES (whole-universe daily blobs over the legacy MDDS port) — decodes ticks in-process, and exposes a typed API across Rust, Python, TypeScript, Go, and C++ from a single Rust core. No JVM, no subprocess, no IPC serialization.
13
+
`thetadatadx` is a native Rust SDK for [ThetaData](https://thetadata.us) market data. It connects directly to ThetaData's three public surfaces — MDDS (historical request/response over gRPC), FPSS (real-time streaming over TCP), and FLATFILES (whole-universe daily blobs over the legacy MDDS port) — decodes ticks in-process, and exposes a typed API across Rust, Python, TypeScript, and C++ from a single Rust core. No JVM, no subprocess, no IPC serialization. Go consumers can build a thin cgo wrapper against the unchanged C ABI in [`ffi/`](ffi/) — header at [`sdks/cpp/include/thetadx.h`](sdks/cpp/include/thetadx.h), all FFI types and free fns exported as `tdx_*` symbols.
14
14
15
15
> [!IMPORTANT]
16
16
> A valid [ThetaData](https://thetadata.us) subscription is required. The SDK authenticates against ThetaData's Nexus API using your account credentials.
17
17
18
18
## Highlights
19
19
20
-
-**Typed everywhere.** 61 ThetaData endpoints exposed as typed methods across all five SDKs; no raw JSON or protobuf on the public surface.
20
+
-**Typed everywhere.** 61 ThetaData endpoints exposed as typed methods across all four SDKs; no raw JSON or protobuf on the public surface.
-**SPKI-pinned FPSS TLS.** Public-key pinning on the FPSS streaming handshake.
23
23
-**FIT decoder + SPSC ring buffer** on the FPSS path. Decode cost is measured in the benchmarks under `crates/thetadatadx/benches/`.
24
-
-**Shared FFI layer.**Go, C++, and Node.js go through the same `extern "C"` layer; the Python wheel uses PyO3 ABI3 directly.
24
+
-**Shared FFI layer.** C++ and Node.js go through the same `extern "C"` layer; the Python wheel uses PyO3 ABI3 directly. The C ABI is also the supported integration path for any third-party Go/C/other-language consumer that wants to roll their own wrapper.
25
25
-**Covers all three public surfaces.** MDDS gRPC endpoints, FPSS wire format with reconnect semantics, and the FLATFILES daily-blob protocol — every transport speaks directly to ThetaData's production servers from a single client. See the [parity checklist](docs/java-parity-checklist.md) and the [vendor flat-file reference](https://http-docs.thetadata.us/operations/get-v2-flat-file-getting-started.html).
26
26
-**FLATFILES daily blobs.** Pull whole-universe `(sec_type, req_type, date)` blobs over the legacy MDDS port; decode to vendor-byte CSV, JSONL, or a typed `Vec<FlatFileRow>` in memory. Cross-language coverage is tracked under the binding issues; the Rust core is shipped today.
27
27
@@ -100,32 +100,6 @@ for (const t of tdx.stockHistoryEOD('AAPL', '20240101', '20240301')) {
The Rust SDK exposes `thetadatadx::utils::{conditions, exchange, sequences}` for post-processing tick records. The Python, TypeScript, Go, and C++ SDKs do **not** currently expose any of these helpers. Tracked in issue #424.
171
+
The Rust SDK exposes `thetadatadx::utils::{conditions, exchange, sequences}` for post-processing tick records. The Python, TypeScript, and C++ SDKs do **not** currently expose any of these helpers. Tracked in issue #424.
173
172
174
173
-[ ]**Python** — bind `thetadatadx.utils.{conditions, exchange, sequences}` via PyO3.
175
174
-[ ]**TypeScript** — bind via napi-rs under the same `utils.*` namespace.
176
-
-[ ]**Go** — flat helper functions `thetadatadx.UtilsConditionName(code)`, etc.
177
175
-[ ]**C++** — header at `sdks/cpp/include/thetadx_utils.h` with `extern "C"` bindings plus thin C++ wrappers.
178
176
179
177
### MDDS endpoint coverage on subscription-tier-blocked rows
@@ -193,7 +191,7 @@ The 7 SKIP rows in the MDDS validator are subscription-blocked on the current te
193
191
194
192
### Cross-SDK parity validation
195
193
196
-
-[ ] Run the validator matrix through the Python, TypeScript, Go, and C++ SDKs and compare row-for-row against the Rust artifact. Locks in the contract that all four bindings return identical data for every endpoint.
194
+
-[ ] Run the validator matrix through the Python, TypeScript, and C++ SDKs and compare row-for-row against the Rust artifact. Locks in the contract that all three bindings return identical data for every endpoint.
0 commit comments