procwire-client 1.0.0

Rust client SDK for Procwire IPC — high-performance binary protocol for Node.js ↔ Rust communication
Documentation
# 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).

## [1.0.0] - 2026-02-03

### Added

- Initial release of `procwire-client` Rust SDK
- **Protocol Implementation**
  - 11-byte binary header format (Big Endian)
  - Full flag support: direction, response, error, stream, stream_end, ack
  - Method ID and Request ID handling
  - Reserved IDs: 0 (reserved), 0xFFFF (ABORT signal)
- **Codec System**
  - `MsgPackCodec` - MsgPack serialization using `rmp-serde` with `to_vec_named`
  - `RawCodec` - Pass-through for raw bytes (zero-copy)
- **Transport Layer**
  - Unix Domain Socket support (Linux, macOS)
  - Named Pipe support (Windows)
  - Platform-specific pipe path generation
- **Handler System**
  - Type-safe handler registration with generic request/response types
  - `RequestContext` for responding to requests
  - Response patterns: `respond()`, `ack()`, `chunk()`, `end()`, `error()`
  - Concurrent handler limit with `Semaphore`
- **Cancellation Support**
  - ABORT signal handling (method_id=0xFFFF)
  - `CancellationToken` integration
  - `RequestContext::is_cancelled()`, `cancelled()`, `cancellation_token()`
- **Performance Optimizations**
  - Writer Task pattern (eliminates Mutex bottleneck)
  - `write_vectored` / scatter-gather I/O for batching
  - Backpressure handling with configurable timeout
  - Zero-copy frame buffer using `bytes::BytesMut`
- **Client Builder**
  - Fluent API for configuration
  - Method and event handler registration
  - Configurable concurrent handler limit
  - Configurable backpressure timeout
- **Control Plane**
  - `$init` message builder with JSON-RPC format
  - Schema serialization with method/event IDs

### Technical Details

- Wire format: `[methodId:2][flags:1][requestId:4][payloadLength:4][payload:N]`
- All multi-byte integers in Big Endian
- MsgPack uses struct-as-map format for Node.js compatibility
- STREAM_END frames always have empty payload

[1.0.0]: https://github.com/SebastianWebdev/procwire-client-rs/releases/tag/v0.1.0