atproto
The most famous and powerful Dart/Flutter library for AT Protocol.
2.5.0
5.6K downloads/mo
#3672 most downloaded on pub.dev
myConsciousness/atproto.dart
What this package is like to depend on
Last release 15 days ago
09 Aug 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 124 of 125 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
136 releases · first in 2023
29 releases in the last 12 months
see the full history below
Release timeline
136 releases · Mar 2023 to Aug 2026Releases
latest 60 of 136-
2.5.009 Aug 2026Release notes
Open source →- feat: added
Firehose, a durablecom.atproto.sync.subscribeReposconsumer. It connects, hands each decoded message to a handler, reconnects with exponential backoff and jitter when the relay drops the connection, and — the part that was missing — persists how far it got so a restart resumes instead of skipping to the live edge.subscribeReposAsMessagesis unchanged;Firehoseis a layer on top of it, not a replacement. - feat: added
CursorStore(with anInMemoryCursorStoredefault), the injection point for durable cursor storage, matching theOAuthStateStore/OAuthSessionStore/DPoPNonceCachepattern.delete()is part of the interface because a relay answers a cursor that is ahead of its own stream withFutureCursoron every reconnect: without a way to discard the cursor, a consumer that has read past its relay never recovers. - feat:
Firehosetakes a handler rather than exposing aStream. A stream can only report when a message was delivered, never when the consumer finished with it, so advancing the cursor on delivery would lose everything in flight when a process dies — the exact loss a persisted cursor exists to prevent. The completion of the handler's future is the only evidence a message was handled, so delivery is at-least-once and handlers should be idempotent. - feat: cursor writes are batched (
flushEveryEvents, default 100;flushEveryInterval, default 5s) because the full-network firehose runs at hundreds to thousands of events per second and a write per message would put the store on the hot path. The replay window after a crash is bounded by those same settings, and a flush is forced before every reconnect and onstop(). - feat: an
#infoOutdatedCursoris surfaced throughonErrorasFirehoseOutdatedCursorExceptioninstead of passing silently. It means the relay no longer holds the requested cursor and resumed from the oldest event it does hold, so events have already been lost — without the signal the caller has no way to notice the gap.
- feat: added
-
2.4.208 Aug 2026Release notes
Open source →- fix:
ATProto.fromOAuthSessionpasses itstimeoutthrough to theOAuthSessionManagerit builds, so a hung restore or refresh is bounded by the timeout the caller asked for instead of running unbounded.
- fix:
-
2.4.129 Jul 2026Release notes
Open source →- feat: added
com.atproto.server.describeServer.output.blobUploadLimit - chore: regenerated from synced lexicons
- feat: added
-
2.4.026 Jul 2026Release notes
Open source →- chore: bump
atproto_coreto^2.4.0, picking up thedecodeCarCAR-header validation, the true 5xx status code onRetryContext, the stale-401 refresh short-circuit andServiceContext.withAdditionalHeaders.
- chore: bump
-
2.3.026 Jul 2026Release notes
Open source →- feat: added
ATProto.actorDid, surfacingServiceContext.actorDidso callers can ask which actor a client is authenticated as without branching on the auth kind. NamedactorDidrather thanrepo, which is already thecom.atproto.repo.*service on this class. - docs:
fromOAuthnow records that one sharedOAuthSessionManageris what makes several clients share a session, andfromOAuthSessionthat it mints a fresh manager per call. Two managers restored from oneOAuthSessiondo not merely fail to share: because a rotating refresh token is only honoured once, they revoke each other, surfacingOAuthSessionRevokedExceptionfrom a session that was valid. - chore: bump
atproto_coreto^2.3.0.
- feat: added
-
2.2.122 Jul 2026 -
2.2.021 Jul 2026Release notes
Open source →- feat: added
ATProto.onSessionUpdated, surfacingServiceContext.onSessionUpdatedso callers can re-persist credentials rotated by an automatic refresh. Without it an app that persists the session it constructed the client with ends up storing a spent refresh token, since refresh tokens are single-use. - chore: bump
atproto_coreto^2.1.0.
- feat: added
-
2.1.021 Jul 2026Release notes
Open source →- feat: added
ATProto.ctx, exposing theServiceContextthat backs every service. A wrapping client can now drive its own services from the same context instead of constructing a second one, which is required for correct session refresh because refresh tokens are single-use.
- feat: added
-
2.0.116 Jul 2026Release notes
Open source →- docs: documented OAuth authentication in the README —
ATProto.fromOAuth(OAuthSessionManager),ATProto.fromOAuthSession(session, {oauthClient}), and the renamedoAuthSessionManagergetter. - docs: the Firehose section now shows the recommended typed
atproto.sync.subscribeReposAsMessages()API, keeping the rawsubscribeRepos()+SyncSubscribeReposAdaptorpath as the advanced alternative. - docs: noted that
retryConfigaccepts anyRetryStrategy, withRetryStrategy/RetryContext/RetryReasonre-exported fromcore.dart. - chore: bump
atproto_coreto^2.0.1andxrpcto^1.1.2.
- docs: documented OAuth authentication in the README —
-
2.0.016 Jul 2026Release notes
Open source →- feat!:
ATProto.fromOAuth(OAuthSessionManager).fromOAuthSession(session, {oauthClient})now wraps a manager (passoauthClientfor auto-refresh); theoAuthSessiongetter is replaced byoAuthSessionManager. - fix: export
Subscription,SyncServiceImpl, andWebSocketChannelFactoryso subscription/sync return types are usable without a directatproto_core/xrpcdependency. - fix: automatic session refresh preserves
email/emailConfirmed/emailAuthFactor. - feat: the
retryConfigparameter now accepts anyRetryStrategy, not onlyRetryConfig, so callers can fully customize backoff and which failures retry.RetryStrategy/RetryContext/RetryReasonare re-exported. By default a procedure (POST) is no longer retried after an ambiguous failure the server may already have applied (seeatproto_core).
- feat!:
-
1.7.013 Jul 2026Release notes
Open source →- feat: added
atproto.sync.subscribeReposAsMessages(), a Firehose subscription that yields already-decoded, typedUSyncSubscribeReposMessages (CBOR/CAR-decodedblocks, normalizedops/commit/prevDataCID links) instead of rawUint8Listframes. The existingsubscribeRepos()(raw bytes) is unchanged, and a frame that fails to decode surfaces as a stream error without terminating the subscription. - feat:
package:atproto/firehose.dartnow re-exports thecom.atproto.sync.subscribeReposmessage types, so a single import provides the adaptors, the typedUSyncSubscribeReposMessage, and itsisCommit/commitaccessors.
- feat: added
-
1.6.013 Jul 2026Release notes
Open source →- feat: automatic access-token refresh in
ATProto.fromSession(wired throughcom.atproto.server.refreshSession);atproto.sessionreflects the new credentials.fromOAuthSessionis untouched, and all new parameters are optional (non-breaking). - fix!: hardened the Firehose against hostile input — removed the
refint-list heuristic incid_linksthat allowed any network user to crash every Firehose consumer by publishing a record containing"ref": [1,2,3](A-3). - fix:
#commitprevData/prevCID links are now converted, so sync v1.1 commits no longer degrade tounknown(A-1). - fix:
#syncframe blocks are decoded into a typedSyncevent (account migration/recovery) (A-2). - fix: Firehose error frames (
op == -1, e.g.FutureCursor/ConsumerTooSlow) now surface as a typedFirehoseErrorException, and text frames raise a typedFirehoseFrameExceptioninstead of aTypeError(A-8/A-10). - fix: CAR decode failures are surfaced instead of being silently turned into an empty map (A-9).
- fix:
protocolis now forwarded increate/refresh/deleteSession(A-7). - chore: removed dead, unexported repo adaptors (A-5/A-6/A-12) and regenerated services from the fixed
lex_gen($typeinjection, UTC datetime, required+nullable serialization). - chore: removed the internal, unexported
convertCidLinksno-op (and its call in the firehose adaptor) — CID links and byte strings are already normalized bydecodeCarinatproto_core. - fix!: regenerated from the fixed
lex_gen— a string field with bothknownValuesand adefaultis now non-nullable and carries its spec default instead of reportingnull:com.atproto.label.defs#labelValueDefinition.defaultSetting(warn) andcom.atproto.admin.getInviteCodes.sort(recent). The correspondinghasX/hasNotXgetters were removed (G-18). - chore: bump
atproto_coreto^1.3.0.
- feat: automatic access-token refresh in
-
1.5.110 Jul 2026 -
1.5.009 Jul 2026 -
1.4.325 May 2026 -
1.4.220 May 2026 -
1.4.120 Feb 2026 -
1.4.019 Feb 2026 -
1.3.020 Dec 2025 -
1.2.409 Nov 2025Release notes
Open source → -
1.2.319 Oct 2025 -
1.2.230 Sep 2025Release notes
Open source →- FIX: Fixed type compatibility issues with AtUri parameters
- Corrected service method calls to properly handle AtUri objects instead of strings
- Improved type safety in API parameter handling
- FIX: Fixed type compatibility issues with AtUri parameters
-
1.2.130 Sep 2025Release notes
Open source →- IMPROVEMENT: Enhanced union type classes with sealed class implementation
- Union type classes are now generated as
sealedclasses instead ofabstractclasses - Enabled Dart's exhaustiveness checking for switch statements on union types
- Improved compile-time safety by ensuring all union cases are handled
- Prevents runtime errors from unhandled union variants through static analysis
- Union type classes are now generated as
- IMPROVEMENT: Enhanced union type classes with sealed class implementation
-
1.2.025 Sep 2025Release notes
Open source →- feat: Added Admin and Lexicon services to ATProto
- Added AdminService for
com.atproto.admin.*endpoints - Added LexiconService for
com.atproto.lexicon.*endpoints - Enhanced AT Protocol service coverage with comprehensive admin and lexicon functionality
- Added AdminService for
- feat: Added Admin and Lexicon services to ATProto
-
1.1.125 Sep 2025Release notes
Open source →- MIGRATION: Updated to use the consolidated
at_primitivespackage for all AT Protocol primitive types. - IMPROVEMENT: Simplified dependency management by adopting unified primitive types from
at_primitives.
- MIGRATION: Updated to use the consolidated
-
1.1.011 Sep 2025Release notes
Open source →- feat: Version bump to v1.1.0 to reflect enhanced AT Protocol capabilities
- Minor version bump appropriate for new
com.atproto.temp.dereferenceScopeendpoint - Maintains compatibility while signaling new functionality
- Minor version bump appropriate for new
- feat: Version bump to v1.1.0 to reflect enhanced AT Protocol capabilities
-
1.0.1011 Sep 2025Release notes
Open source →- chore: Update source files automatically (#2117)
- Added new
com.atproto.temp.dereferenceScopeendpoint for temporary scope dereferencing operations - Generated corresponding service methods, input/output types, and documentation
- Enhanced AT Protocol temporary service capabilities
- Added new
- chore: Update source files automatically (#2117)
-
1.0.907 Sep 2025Release notes
Open source →- BREAKING CHANGE: Enhanced lexicon known values naming with proper camelCase convention
- Enum values now use consistent namespaced naming (e.g.,
reasonAppeal→toolsOzoneReportDefsReasonAppeal) - Improved code generation for lexicon fragments and full URIs
- Updated test cases to match new enum naming convention
- Enum values now use consistent namespaced naming (e.g.,
- feat: Added support for lexicon fragment-only values (starting with '#')
- feat: Enhanced lexicon generation with context-aware naming based on lexicon ID
- fix: Improved enum naming consistency across all generated lexicon types
- BREAKING CHANGE: Enhanced lexicon known values naming with proper camelCase convention
-
1.0.802 Sep 2025 -
1.0.710 Aug 2025 -
1.0.610 Aug 2025Release notes
Open source →- chore: fix
WARNING: The annotation 'JsonSerializable.new' can only be used on classes..
- chore: fix
-
1.0.509 Aug 2025Release notes
Open source →- Add service functions. Endpoints can be easily called as functions like
comAtprotoIdentityResolveDid - Expose
ServiceContextfromcorelibrary.
- Add service functions. Endpoints can be easily called as functions like
-
1.0.406 Aug 2025Release notes
Open source →- chore: Removed outdated processes.
- fix: Use
@JsonSerializable(includeIfNull: false)for lex gen objects. - Add accessors that are useful when using records.
- supports
get,list,create,putanddeleteoperations for each record.
- supports
-
1.0.330 Jul 2025 -
1.0.230 Jul 2025 -
1.0.128 Jul 2025Release notes
Open source →- Improved firehose conversion process. Use
SyncSubscribeReposAdaptorto convert byte data fromsubscribeRepos. - Now the endpoint argument
$unknowncannot override a known field. (#2068)
- Improved firehose conversion process. Use
-
1.0.1-legacy28 Jul 2025 pre-releaseNothing published for this version
-
1.0.018 Jul 2025Release notes
Open source →- Bump SDK constraint to '^3.8.0'.
- Fully replaced with objects generated based on lexicons.
-
1.0.0-preview.419 Sep 2024 pre-releaseNothing published for this version
-
1.0.0-preview.304 Sep 2024 pre-releaseNothing published for this version
-
1.0.0-preview.222 Aug 2024 pre-releaseNothing published for this version
-
1.0.0-preview.109 Jul 2024 pre-releaseNothing published for this version
-
1.0.0-preview.004 Jul 2024 pre-releaseNothing published for this version
-
1.0.0-legacy24 Jul 2025 pre-releaseNothing published for this version
-
0.13.307 Dec 2024 -
0.13.227 Nov 2024 -
0.13.119 Nov 2024Release notes
Open source →- Retry if a DPoP nonce error occurs during the execution of
OAuthClient.refresh. - Add
restoreOAuthSessionfunction.
- Retry if a DPoP nonce error occurs during the execution of
-
0.13.016 Nov 2024Release notes
Open source →- Expose
atproto_oauthpackage. - Add
.fromOAuthSessionconstructor onATProto. - Rename
AuthTokentoJwt.- Change type of
scopefrom enum toString - Rename
subjecttosub - Rename
expiresAttoexp - Rename
issuedAttoiat
- Change type of
- Rename extended getters on
Session- From
accessTokentoaccessTokenJwt - From
refreshTokentorefreshTokenJwt
- From
- Expose
-
0.12.804 Nov 2024Release notes
Open source →- Bump
atproto_core. - Add
serviceparameter onATProto.getandATProto.post. (#1783) - Add
expandlxmparameters onServerService.getServiceAuth.
- Bump
-
0.12.703 Jul 2024 -
0.12.602 Jul 2024 -
0.12.501 Jul 2024Release notes
Open source →- Expose
.atprotoPdsEndpointfrom as an extension ofSession. You can get specific pds endpoint based on did document.
- Expose
-
0.12.401 Jul 2024 -
0.12.301 Jul 2024Release notes
Open source →- Change the type
.collectionproperty fromStringtoNSIDonAtUri. You need to do.collection.toString()when you want a string of collection. (#1551) - The package was refactored as follows.
package:bluesky/atproto.dart=> atproto featurespackage:bluesky/core.dart=> core features
- Change the type
-
0.12.209 Jun 2024Release notes
Open source →- The
serviceis automatically resolved from the DID Document of the givenSession. (#1543)- If no authentication is performed and no
Sessionis passed, the defaultbsky.socialis used. - If the user passes a specific
service, it always respects the value of the user'sservice. - If something wrong happens for some reason, it uses
bsky.socialas default.
- If no authentication is performed and no
- The
-
0.12.106 Jun 2024 -
0.12.003 Jun 2024Release notes
Open source →- Add
.activeand.statusproperties onSessionandCurrentSessionobjects. (#1516) - Move
BlobConverter,Blob,BlobReffromatprotopackage toatproto_core. - Add
.activeand.statusproperties onRepoobject. (#1517) - Add
.getRepoStatusmethod onSyncService. (#1517) - Applied naming convention based on lexicons on following objects.
SubscribedRepoCommit->CommitSubscribedRepoIdentity->IdentitySubscribedRepoHandle->HandleSubscribedRepoMigrate->MigrateSubscribedRepoTombstone->TombstoneSubscribedRepoInfo->InfoAccount->CreateAccountOutput
- Add
accountevent onSyncService.subscribeRepos. (#1517)
- Add
-
0.12.0-preview.301 Feb 2024 pre-releaseNothing published for this version
-
0.12.0-preview.229 Jan 2024 pre-releaseNothing published for this version
-
0.12.0-preview.122 Jan 2024 pre-releaseNothing published for this version