Skip to main content
Changes to the official Radion SDKs. See the SDKs overview for the current API.
Entries tagged Breaking require changes to existing integrations.
v0.6.0
July 6, 2026 · TypeScript, Python & Rust
The pending feed moved from a mempool. channel prefix to a confirmed boolean, and the pending payload now carries per-order detail.

Changed (Breaking)

  • The mempool. channel prefix is removed. To subscribe to the pending feed, set confirmed: false on the subscription (default true) with the bare channel name — e.g. { id, channel: "trading", confirmed: false }. In Rust, SubscribableChannel::Mempool(Channel::Trading) is gone; use Subscription::new(id, Channel::Trading).pending().
  • Event frames are unified: confirmed is now a boolean on the frame envelope, and channel is always the bare name for both feeds. Route pending vs confirmed on event.confirmed, not on a mempool.-prefixed channel string. ChannelPayloadMap (TS) and the on_channel mempool. overloads (Python) drop their mempool.-prefixed keys.
  • The pending-transaction payload dropped its inner confirmed field (now on the envelope).
  • The decoded call object renames usd to notional_usd.

Added

  • The decoded call object gains an orders array for exchange trades: each entry has maker, taker (nullable), token_id, side (buy/sell), maker_amount, and taker_amount. Empty for non-trade calls. No derived price yet — compute it from the amounts.
  • A mempool_unavailable warning frame is sent right after a confirmed: false subscribe when the upstream node exposes no pending stream, so the subscription no longer goes silently empty.
min_usd keeps its name on both feeds, but the confirmed feed measures the filled amount while the pending feed measures the order’s intended fill (call.notional_usd).
v0.4.2
July 5, 2026 · TypeScript, Rust & Python
Realtime payload types now cover every field each channel’s events carry.

Fixed

  • Channel docs now document all 77 confirmed events, and each channel’s typed payload is the union of its events’ fields.
  • Corrected wrong field names: fees uses receiver / tokenId / amount; resolution uses payoutNumerators / result; the transfers batch uses ids / amounts.
  • Added previously-missing fields (asset ids, UMA question parameters, neg-risk / combinatorial / bridge fields, accounts id / implementation, and more), and dropped stray fields no event carries.
Non-breaking. Topic-channel payloads keep their loose, all-optional shape (Rust fields are Option), so existing code keeps working — there are just more fields available.
v0.4.1
July 5, 2026 · TypeScript, Rust & Python
The CLOB order-book feed is now a first-class, typed channel family.

Added

  • CLOB channels are now subscribable directly: clob.book, clob.prices, clob.last_trade, clob.midpoint, clob.tick_size, clob.best_bid_ask. Each has a typed payload, requires a token_ids filter, has no data.type discriminator, and has no mempool. companion.
clob.prices is the CLOB price-change feed — a separate family from the topic channels, unrelated to the derived last-trade prices channel removed in v0.4.0.
v0.4.0
July 4, 2026 · TypeScript & Python v0.4.0, Rust v0.3.0
The realtime channel taxonomy was redesigned. Every decoded event now routes to exactly one of nine topic channels, plus the two cross-cutting filter channels (wallets, markets).

Changed (Breaking)

  • trades is renamed to trading. Exchange fees it carried moved to the new fees channel. TradesPayload is now TradingPayload; in Rust, Payload::Trades is now Payload::Trading.
  • Removed the global, activity, large_trades, prices, and collateral channels, along with the ActivityPayload, CollateralPayload, and PricesPayload types (and their Rust variants). Migrate:
    • global → subscribe to the specific channels you need
    • activitypositions and combos
    • large_tradestrading with a min_usd filter
    • pricestrading (fills carry the price)
    • collateralpositions

Added

  • New confirmed channels fees, resolution, positions, transfers, and accounts, each with a typed payload (FeesPayload, ResolutionPayload, PositionsPayload, TransfersPayload, AccountsPayload) and its own data.type discriminator set. Each gains a mempool. companion.
v0.3.0
June 25, 2026 · TypeScript, Python, Rust
Mempool channels now carry the same typed payload as their confirmed channel across all three SDKs. All changes are backward compatible.

Changed

  • TypeScriptonChannel / offChannel narrow event.data for mempool. channels. mempool.trading now yields TradingPayload instead of AnyChannelPayload. ChannelPayloadMap is derived from the new ConfirmedChannelPayloadMap and includes the mempool. keys.
  • Pythonon_channel gains @overload signatures for every mempool. companion, so handlers narrow to the channel’s payload type (e.g. ChannelHandlerFor[TradingPayload]).
  • Rust — no API change; the SDK already decoded mempool. events into the typed Payload enum. Version bumped to stay in lockstep.
v0.2.1
June 25, 2026 · Rust SDK
The official Rust SDK ships as radion-sdk on crates.io (imported as radion_sdk), at feature parity with the TypeScript and Python SDKs.

Added

  • radion-sdk — async-first Rust SDK built on tokio. Requires Rust 1.85+.
  • Unified Radion client with a builder; the realtime surface is reached as radion.realtime.
  • Stream-based, fully-typed events: subscribe(...) returns a Stream of that subscription’s events, with events() and lifecycle() for the firehose and connection events. Each event’s data is the typed Payload enum; unknown channels and event types are preserved as Payload::Other.
  • Auto-reconnect with exponential backoff and jitter, subscription replay, and heartbeat / stale-connection detection — matching the other SDKs’ defaults.
  • Cargo features: realtime (default), rustls (default), native-tls, and tracing.
v0.2.0
June 25, 2026 · End-to-end type safety
Every frame, channel, and payload is now fully typed in both SDKs, validated at the parse boundary.

Added

  • Typed event payloads for every channel — event.data is the channel’s payload type, with every data.type discriminator enumerated. Handlers registered with client.onChannel("<channel>", …) receive event.data narrowed to that channel’s payload.
  • Typed channels and mempool. companions, plus per-channel filter validation — subscribe now rejects a subscription that omits a required filter (e.g. wallets or markets).
  • Runtime frame validation at the parse boundary — zod (TypeScript) and msgspec (Python). Malformed frames are dropped; event types added server-side are forwarded untouched.
  • Typed error frames, including skipped on a lagged error.

Changed (Breaking)

  • ChannelEvent.data is now the channel’s typed payload instead of unknown (TypeScript) / Any (Python). Code that treated it as untyped may need to narrow on data.type.
  • Subscription.channel is typed to the known channel set (confirmed or mempool.-prefixed).
  • The overloaded realtime on / off are replaced by intent-specific methods. TypeScript: onChannel / offChannel, onAnyChannel / offAnyChannel (formerly on("event")), and onLifecycle / offLifecycle (open, close, reconnect, error). Python uses the same names in snake_case. Migrate on("<channel>", h)onChannel("<channel>", h), on("event", h)onAnyChannel(h), and on("open"|"close"|"reconnect"|"error", h)onLifecycle(…, h).
  • TypeScript adds zod and Python adds msgspec — both SDKs keep a minimal dependency footprint.
v0.1.0
June 25, 2026 · Official TypeScript and Python SDKs
Official Radion SDKs are now available — @radion-app/sdk and radion-sdk, one typed client per language, one API key.

Added

  • @radion-app/sdk — TypeScript SDK, ships ESM + CJS and its own type definitions. Requires Node.js 18+.
  • radion-sdk — async-first Python SDK (imported as radion). Requires Python 3.10+.
  • Unified Radion client: one entry point per language, holding a single API key. The realtime (WebSocket) API is available under radion.realtime.
  • Realtime client with a subscription model — { id, channel, filters } — plus automatic reconnect with exponential backoff, heartbeats, and subscription restore after reconnect.
  • Server-side filters: wallets, market_ids, token_ids, min_usd. Channels may carry a mempool. prefix.
  • Typed channels, frames, and a structured error hierarchy (RadionError, RadionConnectionError, RadionServerError).
Last modified on July 5, 2026