···2222- Use as much or as little from the crates as you need
232324242525-### Streaming Support
2626-2727-Jacquard supports efficient streaming for large payloads:
2828-2929-- **Blob uploads/downloads**: Stream media without loading into memory
3030-- **CAR file streaming**: Efficient repo sync operations
3131-- **Thin forwarding**: Pipe data between endpoints
3232-- **WebSocket support**: Bidirectional streaming connections
3333-3434-Enable with the `streaming` feature flag. See `jacquard-common` documentation for details.
3535-3625## Example
37263827Dead simple API client. Logs in with OAuth and prints the latest 5 posts from your timeline.
···123112- `AgentSessionExt` trait with a host of convenience methods for working with records and preferences
124113- Improvements to the `Collection` trait, code generation, and addition of the `VecUpdate` trait to enable that
125114115115+116116+## Experimental WASM Support
117117+118118+Core crates (`jacquard-common`, `jacquard-api`, `jacquard-identity`, `jacquard-oauth`) compile for `wasm32-unknown-unknown`. Traits use [`trait-variant`](https://docs.rs/trait-variant) to conditionally exclude `Send` bounds on WASM targets. DNS-based handle resolution is gated behind the `dns` feature and unavailable on WASM (HTTPS well-known and PDS resolution still work).
119119+120120+Test WASM compilation:
121121+```bash
122122+just check-wasm
123123+# or: cargo build --target wasm32-unknown-unknown -p jacquard-common --no-default-features
124124+```
125125+126126+127127+### Streaming Support
128128+129129+Jacquard supports efficient streaming for large payloads:
130130+131131+- **Blob uploads/downloads**: Stream media without loading into memory
132132+- **CAR file streaming**: Efficient repo sync operations
133133+- **Thin forwarding**: Pipe data between endpoints
134134+- **WebSocket support**: Bidirectional streaming connections
135135+136136+Enable with the `streaming` feature flag. See `jacquard-common` documentation for details.
137137+126138## Development
127139128140This repo uses [Flakes](https://nixos.asia/en/flakes)
···139151```
140152141153There's also a [`justfile`](https://just.systems/) for Makefile-esque commands to be run inside of the devShell, and you can generally `cargo ...` or `just ...` whatever just fine if you don't want to use Nix and have the prerequisites installed.
142142-143143-144144-## Experimental WASM Support
145145-146146-Core crates (`jacquard-common`, `jacquard-api`, `jacquard-identity`, `jacquard-oauth`) compile for `wasm32-unknown-unknown`. Traits use [`trait-variant`](https://docs.rs/trait-variant) to conditionally exclude `Send` bounds on WASM targets. DNS-based handle resolution is gated behind the `dns` feature and unavailable on WASM (HTTPS well-known and PDS resolution still work).
147147-148148-Test WASM compilation:
149149-```bash
150150-just check-wasm
151151-# or: cargo build --target wasm32-unknown-unknown -p jacquard-common --no-default-features
152152-```
153154154155[](./LICENSE)
-45
crates/jacquard-common/README.md
···11-# jacquard-common
22-33-Core AT Protocol types and HTTP client abstraction for Jacquard.
44-55-## Features
66-77-### `streaming` (optional)
88-99-Adds support for streaming HTTP request and response bodies:
1010-1111-- `ByteStream` / `ByteSink`: Platform-agnostic stream abstractions
1212-- `HttpClientExt`: Streaming methods for HTTP client
1313-- `StreamingResponse`: XRPC streaming response wrapper
1414-- Error types: `StreamError` with `StreamErrorKind`
1515-1616-Works on both native and WASM targets via `n0-future`.
1717-1818-**Example:**
1919-```rust
2020-use jacquard_common::http_client::{HttpClient, HttpClientExt};
2121-use futures::StreamExt;
2222-2323-let client = reqwest::Client::new();
2424-let response = client.send_http_streaming(request).await?;
2525-2626-let stream = response.into_parts().1.into_inner();
2727-futures::pin_mut!(stream);
2828-while let Some(chunk) = stream.next().await {
2929- // Process streaming chunks
3030-}
3131-```
3232-3333-### `websocket` (optional)
3434-3535-Adds WebSocket client abstraction:
3636-3737-- `WebSocketClient` trait
3838-- `WebSocketConnection` with bidirectional streams
3939-- Uses same `ByteStream`/`ByteSink` as HTTP streaming
4040-4141-Requires the `streaming` feature.
4242-4343-### `reqwest-client` (optional)
4444-4545-Implements `HttpClient` and `HttpClientExt` for `reqwest::Client`.