···11# Changelog
2233+## [0.6.0] - 2025-10-18
44+55+### Added
66+77+**HTTP streaming support** (`jacquard-common`, `jacquard`)
88+- `HttpClientExt` trait for streaming HTTP requests/responses
99+- `send_http_streaming()` for streaming response bodies
1010+- `send_http_bidirectional()` for streaming both request and response
1111+- `StreamingResponse` wrapper type with parts + `ByteStream`
1212+- `XrpcResponseStream<R>` for typed XRPC streaming responses
1313+- `ByteStream` / `ByteSink` platform-agnostic stream wrappers (uses n0-future)
1414+- `StreamError` concrete error type with kind enum (Transport, Closed, Protocol)
1515+- Native support via reqwest's `bytes_stream()` and `Body::wrap_stream()`
1616+- WASM compatibility via n0-future (no Send bounds required)
1717+1818+1919+**WebSocket subscription support** (`jacquard-common`)
2020+- Full XRPC WebSocket subscription infrastructure
2121+- `SubscriptionResp` trait for defining subscription message/error types
2222+- `XrpcSubscription` trait for subscription parameters
2323+- `SubscriptionStream<S>` typed wrapper with automatic message decoding
2424+- `SubscriptionClient` stateful trait + `TungsteniteSubscriptionClient` implementation
2525+- `SubscriptionExt` for stateless subscription calls
2626+- Support for both JSON and DAG-CBOR message encodings
2727+- Custom path support via `CUSTOM_PATH` constant for non-XRPC endpoints
2828+- WebSocket integration into `Agent` struct (agents can now subscribe)
2929+- `into_stream()`, `into_raw_data_stream()`, `into_data_stream()` methods for different deserialization modes
3030+3131+**Framed DAG-CBOR message decoding** (`jacquard-common`, `jacquard-api`, `jacquard-lexicon`)
3232+- Two-stage deserialization for AT Protocol event streams (header + body)
3333+- `EventHeader` struct and `parse_event_header()` function
3434+- `decode_framed()` methods generated for all DAG-CBOR subscription message enums
3535+- `decode_message()` override in `SubscriptionResp` trait for custom decoding
3636+- `UnknownEventType` variant in `DecodeError` for unknown discriminators
3737+- Fixes "TrailingData" errors when consuming subscribeRepos and subscribeLabels
3838+3939+**Jetstream support** (`jacquard-common`)
4040+- Full typed support for Jetstream JSON firehose
4141+- `JetstreamMessage` enum with `Commit`, `Identity`, `Account` variants
4242+- `JetstreamCommit`, `JetstreamIdentity`, `JetstreamAccount` detail structs
4343+- `CommitOperation` enum for create/update/delete operations
4444+- `JetstreamParams` with filtering options (collections, DIDs, cursor, compression)
4545+- Uses proper AT Protocol types (`Did`, `Handle`, `Datetime`, `Data`)
4646+4747+**Zstd compression** (`jacquard-common`)
4848+- Optional `zstd` feature for Jetstream message decompression
4949+- Automatic detection and decompression of zstd-compressed binary frames
5050+- Includes official Bluesky Jetstream zstd dictionary
5151+- Transparent fallback to uncompressed when zstd unavailable
5252+- Works across all JSON stream methods (`into_stream()`, `into_raw_data_stream()`, `into_data_stream()`)
5353+5454+**Typed AT URI wrapper** (`jacquard-common`, `jacquard-api`, `jacquard-lexicon`)
5555+- `AtUri<'a>` newtype wrapper for `at://` URIs with proper validation
5656+- Generated `fetch_uri()` method on all record types for fetching by AT URI
5757+- `AtUri::from_parts()` constructor for building URIs from components
5858+- Proper Display and FromStr implementations
5959+6060+**Memory-based credential session** (`jacquard`)
6161+- `MemoryCredentialSession` for in-memory session storage
6262+- Useful for short-lived applications or testing
6363+- No file I/O required
6464+6565+**Collection record fetching improvements** (`jacquard-api`, `jacquard-lexicon`)
6666+- Generated `fetch_record()` convenience method on all record types
6767+- Fetches owned record without turbofish syntax: `Post::fetch_record(agent, uri).await`
6868+- Simplifies common pattern of fetching + converting to owned
6969+7070+**Axum improvements** (`jacquard-axum`)
7171+- `XrpcError` now implements `IntoResponse` for better error handling
7272+- Proper typed error responses without manual conversion
7373+- Better integration with Axum's response system
7474+7575+**Examples**
7676+- `subscribe_repos.rs`: Subscribe to PDS firehose with typed DAG-CBOR messages
7777+- `subscribe_jetstream.rs`: Subscribe to Jetstream with typed JSON messages and optional compression
7878+- `stream_get_blob.rs`: Download blobs using HTTP streaming
7979+- `app_password_example.rs`: App password authentication example
8080+8181+**CID deserialization improvements** (`jacquard-common`)
8282+- Fixed `Cid` type to properly deserialize CBOR tag 42 via `IpldCid::deserialize`
8383+- Separate handling for JSON (string) vs CBOR (tag 42) formats
8484+- `CidLink` correctly delegates to `Cid` for both formats
8585+8686+### Changed
8787+8888+**Default features** (`jacquard-common`)
8989+- Added `zstd` to default features for better Jetstream experience
9090+- Jetstream compression enabled by default when using the full feature set
9191+9292+**Generated code** (`jacquard-lexicon`, `jacquard-api`)
9393+- All DAG-CBOR subscriptions (subscribeRepos, subscribeLabels) now use framed decoding
9494+- Generated `decode_framed()` implementations match on event type discriminator
9595+- Override `decode_message()` in trait impls to use framed decoding
9696+- All record types now have `fetch_uri()` and `fetch_record()` methods generated
9797+9898+**Dependencies** (`jacquard-axum`)
9999+- Disabled default features for `jacquard` dependency to reduce bloat
100100+101101+### Fixed
102102+103103+**Blob upload** (`jacquard`)
104104+- Fixed `upload_blob()` authentication issues
105105+- Properly authenticates while allowing custom Content-Type headers
106106+107107+**XRPC client** (`jacquard-common`, `jacquard-oauth`, `jacquard`)
108108+- Added `send_with_options()` method for per-request option overrides
109109+- Stateful clients can now override options while preserving internal auth
110110+111111+112112+---
31134114## `jacquard-api` [0.5.5], `jacquard-lexicon` [0.5.4] - 2025-10-16
5115