Packages

Lightstreamer TLCP client (WebSocket) for Elixir

Current section

Files

Jump to
lightstreamer CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [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`.