NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #3937 most downloaded on pub.dev
Core library for XRPC communication. This is a wrapped HTTP client for AT Protocol.
Last release 2 months ago
22 Jul 2026
Ships unpredictably
gaps range from 8 days to 10 months
Nearly every release is documented
notes for 47 of 47 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
49 releases · first in 2023
One column per quarter.
chore: bump at_primitives to ^1.2.0.
at_primitives to ^1.2.0.docs: rewrote the README example, which imported non-existent atproto.Session/atproto.CurrentSession and used fictional NSIDs; it now matches the work
atproto.Session/atproto.CurrentSession and used fictional NSIDs; it now matches the working example/example.dart (server.atproto.com/createSession/getSession, no atproto import).subscribe<T> returning an XRPCResponse<Subscription<T>>) with a minimal usage snippet.at_primitives to ^1.1.1.fix: procedure/record request bodies no longer drop legitimately empty collections (e.g. threadgate.allow: []); only null values are stripped. Query p
threadgate.allow: []); only null values are stripped. Query parameters are unchanged. This now also covers the http.post body path (previously it still pruned empty []/{}).subscribe propagates backpressure and cancellation to the underlying WebSocket, preventing unbounded buffering on slow consumers (firehose) and socket leaks.subscribe no longer drains the WebSocket before a consumer listens — the underlying subscription starts paused and resumes on the first listen, so a consumer that delays or never listens cannot buffer firehose frames unboundedly.RateLimit.waitUntilReset() caps its delay at 60s, so a hostile or misconfigured far-future Retry-After HTTP-date can no longer hang the caller indefinitely.200 response body with a to converter now yields EmptyData instead of throwing a raw FormatException.application/octet-stream (was */*) when the content type cannot be sniffed.fix: subscribe() now closes its StreamController, propagates WebSocket errors via addError, and always delivers done, so a server disconnect no longer
subscribe() now closes its StreamController, propagates WebSocket errors via addError, and always delivers done, so a server disconnect no longer hangs await for forever or leaks the controller.502 from a proxy or an empty 429) fall back to a typed exception instead of throwing a FormatException, so typed errors and retries keep working.409 Conflict is no longer treated as a success and its body is no longer parsed as a data model.520) map to HttpStatus.unknown instead of throwing UnsupportedError while building the error response._buildWsUri now uses the Uri builder (percent-encoding, repeated list params, ISO8601 UTC), so multi-valued subscription params produce a valid URL.tryParse, unlimited fallback), so a malformed header no longer turns a successful response into a crash.RateLimit.fromHeaders now honors the Retry-After header (delta-seconds and HTTP-date forms) when usable ratelimit-* headers are absent, so isExceeded and waitUntilReset() respect the backoff of a 429 relayed by a proxy that strips the ratelimit-* headers.ratelimit-policy header is no longer required to parse rate limit info; responses carrying only ratelimit-limit/ratelimit-remaining/ratelimit-reset are now parsed instead of being treated as unlimited.http.Client for connection reuse (non-breaking), plus a procedure adaptor param and subscribe protocol param.at_primitives to ^1.1.0.MIGRATION: Updated to use the consolidated at_primitives package for AT Protocol primitive types.
at_primitives package for AT Protocol primitive types.Fix SDK constraint to '">=3.8.0 <4.0.0"'.
- chore: optimized docs.
Nothing published for this version
Bump SDK constraint to '^3.8.0'.
Nothing published for this version
Use web_socket_channel: ^3.0.0.
web_socket_channel: ^3.0.0.Add parameter headerBuilder on query and procedure functions.
headerBuilder on query and procedure functions.Just return the response when the status code is 409.
Bump SDK constraint to '^3.3.0'.
Improved redundant error messages. Now it shows like GET https://bsky.social/xrpc/com.atproto.identity.resolveHandle 400 Error: Params must have the p
GET https://bsky.social/xrpc/com.atproto.identity.resolveHandle 400 Error: Params must have the property "handle". (#1253)parameters arg on .post and .procedure. (#1252).upload from xrpc. You can upload from .procedure and pass bytes to body. (#1252)From ResponseAdaptor to ResponseDataAdaptor
To to ResponseDataBuilderResponseAdaptor to ResponseDataAdaptor- Upgrade NSID.
NSID. (#1159)- Upgrade dependencies.
- Don't remove empty list.
- Upgraded nsid.
nsid. (#1112)Use bsky.network as default when service is missing for .subscribe function.
.post function. (#999)bsky.network as default when service is missing for .subscribe function.Added HTTP specific function and exposed as http/http.
http/http. (#989)
.getYou can specify Uint8List as a type parameter.
Uint8List as a type parameter.Fixed field names for rate limits.
- Improved documents.
Drop support for null unsafe Dart, bump SDK constraint to '^3.0.0'.
Supported RateLimit. You can access this property from XRPCResponse.rateLimit. If there is no rate limits, then it's always null.
Allows Map to be specified for generics, allowing response data to be retrieved as JSON.
Map<String, dynamic> to be specified for generics, allowing response data to be retrieved as JSON. (#563)Added homepage in pubspec.yaml.
Added ResponseAdaptor and removed JsonConverter and Decoder.
ResponseAdaptor and removed JsonConverter and Decoder. (#495)Removed cbor dependency and car_decoder, moved to atproto_core.
cbor dependency and car_decoder, moved to atproto_core. (#473)Added decoder parameter in subscribe and delegate data decoding to the responsibility of the app that uses xrpc.
decoder parameter in subscribe and delegate data decoding to the responsibility of the app that uses xrpc. (#472)Added converter parameter in subscribe.
converter parameter in subscribe. (#446)Updated SDK to ">=2.17.0 <4.0.0".
">=2.17.0 <4.0.0". (#406)Supported subscription function as subscribe.
subscribe. (#318)Supported protocol options in query, procedure, upload. You can choose http as a protocol for your test locally. Defaults to https.
protocol options in query, procedure, upload. You can choose http as a protocol for your test locally. Defaults to https. (#269)- Fixed upload.
upload. (#249)- Fixed upload.
upload. (#249)- Fixed structures.
- Fixed build config.
- Added upload function.
upload function. (#249)Downgrade meta to make this package compatible with Flutter.
meta to make this package compatible with Flutter. (#242)Fix to pass null if body is null during POST.
Fixed XRPCResponse to XRPCResponse in XRPCException.
XRPCResponse to XRPCResponse<XRPCError> in XRPCException. (#177)Allow String to be set to data in XRPCResponse.
XRPCResponse. (#174)- Fixed internal structures.
service and getClient/postClient are now nullable.
service and getClient/postClient are now nullable. (#146)- First Release.
- Let's start.
Your coding agent can read these notes before it upgrades. Set up the MCP server →