All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.0 - 2026-06-29
First stable release of the Market Data Java & Kotlin SDK — a single JVM artifact, idiomatic from both Java and Kotlin, covering the full v1 API surface with sync + async parity on every endpoint.
MarketDataClient— no-arg constructor (everything resolved from the configuration cascade) and a 4-arg constructor for tests/short-lived runtimes. Single sharedHttpClient(HTTP/2), 99 s request / 2 s connect timeouts,close()for resource release, andgetRateLimits().- Configuration cascade — explicit constructor parameters →
MARKETDATA_*environment variables →.envin the working directory → built-in defaults.baseUrl/apiVersionare normalized and validated at construction. - Demo mode — without a token the client omits the
Authorizationheader and serves public, read-only endpoints;validateOnStartupverifies auth on construction otherwise. - Options resource (
client.options()) —lookup,expirations,strikes,quote,quotes(per-symbol fan-out map), andchainwith the full filter surface (sealedExpirationFilter/StrikeFilter, greeks,expiration=all,countback). - Stocks resource (
client.stocks()) —candles,quote,quotesandprices(batched multi-symbol),news, andearnings.StockResolutionvalue type for open-ended resolutions; intraday windows over ~1 year are auto-split, fetched concurrently, and merged. - Markets resource (
client.markets()) —status, the exchange open/closed calendar withdate/from-to/countbackwindowing andcountryselection. - Funds resource (
client.funds()) —candles, NAV OHLC series at daily-and-up resolutions (FundResolution). - Utilities resource (
client.utilities()) — servicestatusand auth validation. - Universal parameters & formats —
dateFormat/mode/limit/offset/columnsset fluently on every resource (immutable configured copies), plus anasCsv()facet (withhuman/headersshaping) for every endpoint.columnsprojection enforces the Option A strict-decoding contract. - Reliability — retry with exponential backoff (4 total attempts,
Retry-Afterhonored), client-level and per-response rate-limit snapshots with preflight,/status/stale-while-revalidate cache gating retries, and a 50-permit async concurrency pool. - Sealed
MarketDataExceptionhierarchy — seven canonical subtypes (AuthenticationError,BadRequestError,NotFoundError,RateLimitError,ServerError,NetworkError,ParseError), each carrying support context (requestId,requestUrl,statusCode,timestamp) andgetSupportInfo(). - First-class Kotlin interop —
@NullMarked(JSpecify) on every public package, no Kotlin-stdlib or coroutines runtime dependency, SAM callbacks, and Kotlin-reserved-word-free public API. - Packaging — MIT license, SemVer, version auto-detected from the JAR
manifest, published to Maven Central as
app.marketdata:marketdata-sdk-java.