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.

[0.1.0] - 2026-09-08

Added

  • Session management over WebSocket (TLCP 2.5.0): Lightstreamer.connect/2, subscribe/2, unsubscribe/2, close/1, and child_spec/1 for supervision trees. No global state, no application config — everything is a per-call option.
  • MERGE-mode subscriptions delivering updates as plain messages to a configurable owner pid: merged current field state plus the set of fields changed by each event, with correct decoding of the TLCP delta wire format (unchanged / null / empty / ^n skip). Owner processes are monitored and auto-unsubscribed on death.
  • Connection resilience: transparent LOOP rebinds preserving per-item state; keepalive watchdog on the server's authoritative interval plus a configurable grace; on connection loss, rebind first then full re-create with capped exponential backoff, re-issuing subscriptions with state reset so each item starts from a fresh snapshot. CONERR code 1 (bad credentials) is never retried; reconnect: :never opts out of recovery.
  • Outbound heartbeats when :inactivity_millis is advertised.
  • ^P/^T diff values are refused at session creation (LS_supported_diffs=) and kill the affected subscription with an explicit error if ever received — never a silently wrong value.
  • Pure, fully unit-tested protocol codec (Lightstreamer.Protocol, .Protocol.Frame, .Protocol.Update) usable without any process — the test tables transcribe the TLCP 2.5.0 specification's example stream verbatim.
  • Swappable transport behaviour (Lightstreamer.Transport) with a Mint/Mint.WebSocket production implementation; runtime dependencies are exactly mint, mint_web_socket and castore.