bluesky
The most famous and powerful Dart/Flutter library for Bluesky Social.
2.6.4
8.1K downloads/mo
#3199 most downloaded on pub.dev
myConsciousness/atproto.dart
What this package is like to depend on
Last release 3 days ago
20 Aug 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 210 of 210 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
232 releases · first in 2023
48 releases in the last 12 months
see the full history below
Release timeline
232 releases · Mar 2023 to Aug 2026Releases
latest 60 of 232-
2.6.420 Aug 2026Release notes
Open source →- feat: added
app.bsky.feed.defs#knownLikers - feat: added
app.bsky.feed.defs#viewerState.knownLikers - chore: regenerated from synced lexicons
- feat: added
-
2.6.314 Aug 2026Release notes
Open source →- feat: added
app.bsky.actor.contentVisibilityDeclaration - chore: updated
app.bsky.embed.video.alt - chore: updated
app.bsky.embed.video#view.alt - chore: regenerated from synced lexicons
- feat: added
-
2.6.212 Aug 2026Release notes
Open source →- feat: added
app.bsky.video.abortUpload - chore: updated
app.bsky.video.defs#jobStatus.state - feat: added
app.bsky.video.finishUpload - feat: added
app.bsky.video.getUploadStatus - feat: added
app.bsky.video.startUpload - feat: added
app.bsky.video.uploadPart - chore: regenerated from synced lexicons
- feat: added
-
2.6.111 Aug 2026Release notes
Open source →- chore: updated
app.bsky.embed.video.video - chore: regenerated from synced lexicons
- chore: updated
-
2.6.009 Aug 2026Release notes
Open source →- feat: added
feed.buildPostTextandfeed.postText, which turn plain text into a facetedapp.bsky.feed.postin one call. Getting this right by hand took three steps the docs had to spell out — format first (markdown links only become link facets after formatting), post the formatted text rather than the input (facet ranges are byte offsets into it, so the original string points every link at the wrong characters), and convertbluesky_text's facet maps intoRichtextFacetmodels.buildPostTextreturns aPostTextholding the formatted text and its facets together so the two cannot be separated by accident, andpostTextbuilds and publishes in one call. - fix: mentions are now resolved with
com.atproto.identity.resolveHandleover this client's transport.bluesky_texton its own opens its own HTTP connection to a default host, so an account on a self-hosted PDS resolved its mentions against the wrong server, and none of the client's configuration — service, timeout, retry policy, customgetClient, proxy headers — applied to that call. - feat: a mention whose handle does not resolve is reported in
PostText.unresolvedHandles(or throughpostText'sonUnresolvedHandles) instead of being silently dropped. It is not an error — the mention just stays plain text — but throwing from the callback aborts before the record is created, for an author who would rather fix a typo than publish a mention that renders as plain text. - chore:
bluesky_textmoves from a dev dependency to a runtime dependency. It brings no new transitive packages (xrpc,httpandcharactersare already dependencies) and there is no cycle:bluesky_textdoes not depend onbluesky.
- feat: added
-
2.5.009 Aug 2026Release notes
Open source →- chore: bump
atprototo^2.5.0, which addsFirehoseandCursorStoretopackage:bluesky/firehose.dart.
- chore: bump
-
2.4.608 Aug 2026Release notes
Open source →- fix:
Bluesky.fromOAuthSession,BlueskyChat.fromOAuthSessionandOzoneTool.fromOAuthSessionpass theirtimeoutthrough to theOAuthSessionManagerthey build, so a hung restore or refresh is bounded by the timeout the caller asked for instead of running unbounded.
- fix:
-
2.4.506 Aug 2026Release notes
Open source →- feat: added
tools.ozone.queue.createQueue.errors.InvalidRecommendedPolicies - feat: added
tools.ozone.queue.createQueue.input.recommendedPolicies - feat: added
tools.ozone.queue.defs#queueView.recommendedPolicies - chore: updated
tools.ozone.queue.updateQueue - feat: added
tools.ozone.queue.updateQueue.errors.InvalidRecommendedPolicies - feat: added
tools.ozone.queue.updateQueue.input.recommendedPolicies - chore: regenerated from synced lexicons
- feat: added
-
2.4.403 Aug 2026Release notes
Open source →- chore: updated
chat.bsky.group.createGroup.input.members - chore: regenerated from synced lexicons
- chore: updated
-
2.4.302 Aug 2026Release notes
Open source →- chore: updated
app.bsky.actor.defs#viewerState.muted - feat: added
app.bsky.actor.defs#viewerState.mutedOnlyQuoteposts - feat: added
app.bsky.actor.defs#viewerState.mutedOnlyReposts - chore: updated
app.bsky.graph.getMutes - chore: updated
app.bsky.graph.muteActor - feat: added
app.bsky.graph.muteActor.input.onlyQuoteposts - feat: added
app.bsky.graph.muteActor.input.onlyReposts - chore: updated
app.bsky.unspecced.defs#threadItemPost.opThread - feat: added
app.bsky.unspecced.defs#threadItemPost.opThreadPostCount - feat: added
app.bsky.unspecced.defs#threadItemPost.opThreadPostIndex - feat: added
app.bsky.video.defs#jobStatus.failureCode - chore: regenerated from synced lexicons
- chore: updated
-
2.4.229 Jul 2026Release notes
Open source →- feat: added
tools.ozone.report.closeReports - chore: updated
tools.ozone.report.createActivity.errors.ReportNotFound - feat: added
tools.ozone.report.createActivity.input.eventId - chore:
tools.ozone.report.createActivity.input.reportIdis now optional - chore: regenerated from synced lexicons
- chore: bump
atprototo^2.4.1
- feat: added
-
2.4.128 Jul 2026Release notes
Open source →- chore: updated
app.bsky.draft.createDraft.output.id - chore: regenerated from synced lexicons
- chore: updated
-
2.4.026 Jul 2026Release notes
Open source →- feat:
ThreadVerificationExceptionnow carries the thread'srkeysanduris, and reports a response without the optionalresultsarray asinconclusiverather than as a plain failure.applyWritesis atomic, so the exception is only ever raised after the thread is committed, andcreateThreadAtomicbuilds the batch internally — the record keys that make the posts findable used to die with it, leaving a published thread reported as a hard failure nothing could act on. A server that omitsresultshas contradicted nothing, andinconclusivesays so: the thread is there, and afeed.post.geton the first ofurisconfirms it. - fix:
bluesky.video.uploadVideonow throws aStateErrorwhen the client has no authenticated account, instead of sendingdid=and surfacing whatever the video service makes of it — after the whole video has been uploaded. A caller supplying its owndidin$parametersis unaffected. - fix:
bluesky.video.uploadVideoAndAwaitnow rejects a zero or negativepollIntervalortimeoutwith anArgumentErrorbefore anything is sent. A non-positive interval polledvideo.bsky.appas fast as it answered, for as long as the job ran. - fix:
bluesky.video.uploadVideoAndAwaitno longer callsonProgressonce itstimeouthas expired. A status that arrived while the budget ran out was still reported, so a caller that had already been handedVideoUploadTimeoutExceptionsaw one last progress event for an upload it had given up on. - feat: added
ozoneDidto everyOzoneToolfactory, naming the Ozone instancetools.ozone.*should be routed to.OzoneToolwas the only client that set no proxy header of its own and told the caller to supply one, but a caller-suppliedatproto-proxybelongs to the shared context, so it rode onapp.bsky.*andcom.atproto.*as well — leavingfromAtprotoa choice between misrouting the timeline and reintroducing the single-use refresh token race it exists to remove.OzoneToolnow derives a context of its own, asBlueskyChatalready did, and the header followstools.ozone.*alone.#atproto_labeleris appended unlessozoneDidalready names a service; omittingozoneDidadopts the context unchanged, as before. - fix: a caller-supplied proxy header spelled in another casing no longer survives alongside
BlueskyChat's own. The two were merged key-exactly, soAtproto-Proxyandatproto-proxyboth reached the request;package:httphappened to collapse them in the chat client's favour, but a customGetClient/PostClientforwarding the raw map emitted both and a server reading the first sent DM listing and sending to whatever service the caller had named. - fix: a label preference scoped to a labeler is now remapped from its legacy identifier before it is stored.
nsfw,goreandsuggestivewere remapped only on unscoped preferences, so the same preference with alabelerDidwas filed under a key nothing ever reads — a labeler-scoped "hide nsfw" was silently a no-op while the unscoped one worked. - fix:
ActorGetPreferencesOutput.getModerationPrefsno longer lists an app labeler twice when the user also subscribes to it. The app labelers are seeded first so that prefs scoped to them attach, and alabelersPrefentry for one of them now reuses that seeded entry instead of appending a duplicate toModerationPrefs.labelers. - fix:
GroupBy.hourandGroupBy.minutebucket on UTC components with a UTC key. The bucket key was built from a localDateTime, so on a DST spring-forward date a local wall-clock time that does not exist normalized upward and collapsed two distinct UTC hours into one bucket. - fix: groups sharing an
indexedAtare returned in the order they were created.List.sortis not stable, so beyond a handful of groups the ties came back in an arbitrary order. - feat: added
NotificationsGrouperConfig.uniqueAuthors, which controls whether a group keeps at most one entry per author. The check used to be nested inside the time-window branch, so a custom config withwindow: nullsilently collapsed repeated notifications from one author. It now stands on its own andwindowgoverns the time window and nothing else. Defaults totruefor custom configs; both shipped presets keep their current behavior (officialon,lenientoff). - perf: merging a large group is now linear rather than quadratic. Each group deduplicates its uris, authors and labels through hashed collections instead of rescanning the accumulated lists per member; grouping 8000 notifications into one group drops from ~16.8s to ~4ms. Output is unchanged, except that a single notification carrying the same label twice now contributes it once.
- docs:
NotificationsGrouper,NotificationsExtension.groupandNotificationsGrouperConfig.windowno longer describe the time window as sliding. The anchor is the notification that opened the group and is fixed for the group's lifetime; since notifications arrive newest first it is normally the group's newest.
- feat:
-
2.3.026 Jul 2026Release notes
Open source →- feat: added
Bluesky.fromAtproto,BlueskyChat.fromAtprotoandOzoneTool.fromAtproto, which drive their services from anATProtothe caller already owns instead of building a new one. Every factory used to build its own, and each of those owned a context holding its own copy of the session — so an app needing more than one client for the same account held two copies of one session. Refresh tokens are single-use, so those copies raced the moment the access token expired: the context that noticed first spent the token, and the other's refresh was rejected, surfacing as anUnauthorizedExceptionthe caller did nothing to provoke. Passing oneATPrototo each client gives them one session, one deduplicated refresh, and oneonSessionUpdatedstream. - feat: added
actorDidtoBluesky,BlueskyChatandOzoneTool, so the authenticated actor can be read without branching on the auth kind. - feat: added
bluesky.feed.createThreadAtomic, which publishes a whole thread in a singlecom.atproto.repo.applyWritescommit. Record keys and reply CIDs are computed locally, so every post references the previous one without waiting for it to be written, and the thread is committed atomically rather than post by post. Also addedThreadPost,ThreadBatch,CreatedThreadandThreadVerificationException;ThreadBatchbuilds and verifies a batch without a client, exposing the record keys before the write and allowing an extra write — anapp.bsky.feed.threadgate, say — in the same commit.Bluesky.feedis nowFeedServiceImpl, a subclass ofFeedServicematchingBluesky.video; existing calls are unaffected. - feat: added
VideoServiceImpl.uploadVideoAndAwait, which uploads a video and resolves with the resulting blob once the processing job terminates, pollinggetJobStatusat a caller-chosen interval and bounding the whole operation with a timeout. AddedVideoUploadExceptionwithVideoJobFailedException,VideoJobMissingBlobExceptionandVideoUploadTimeoutException, so a caller can tell a video the server rejected from one it gave up waiting for, and can show the server's own reason. A job that completes without a blob is reported as a failure rather than a success. - fix: a
BlueskyChat's ownatprotono longer sends theatproto-proxychat header on thecom.atproto.*calls made through it. The header identifies the chat service and belongs tochat.bsky.*alone; routing an identity or server call to it was unintended.BlueskyChat.headersis unchanged, and chat calls still carry the header. - docs: every OAuth factory now records that one shared
OAuthSessionManageris what makes clients share a session, and thatfromOAuthSessionmints a fresh manager per call — two managers restored from oneOAuthSessionrevoke each other rather than sharing. - chore: bump
atproto_coreto^2.3.0andatprototo^2.3.0(dev:bluesky_text^1.6.0).
- feat: added
-
2.2.326 Jul 2026Release notes
Open source →- feat: added
app.bsky.ageassurance.defs#configRegion.platforms - feat: added
app.bsky.notification.listNotifications#notification.starterPack - chore: regenerated from synced lexicons
- feat: added
-
2.2.222 Jul 2026 -
2.2.021 Jul 2026Release notes
Open source →- fix:
chat.bsky.*andtools.ozone.*calls now refresh an expired access token instead of throwingUnauthorizedException. v2.1.2 described this as coveringchat.bsky.*, but onlyBlueskywas changed:BlueskyChat.fromSessionandOzoneTool.fromSessioneach still built a standaloneServiceContextwith no refresh hook, so every call throughchat.convo/chat.actor/ the ozone services surfaced an expired token as an error. Both now drive their services from the context owned by their nestedATProto, asBlueskyalready did — the proxy headers that route those calls are preserved, since the nested client is built with them. - feat: added
onSessionUpdatedtoBluesky,BlueskyChatandOzoneTool, surfacing the refreshed session so callers can re-persist it. Refresh tokens are single-use, so an app that keeps persisting the session it built the client with stores a spent token and is signed out on next launch. - chore: bump
atprototo^2.2.0andatproto_coreto^2.1.0.
- fix:
-
2.1.221 Jul 2026Release notes
Open source →- fix:
app.bsky.*andchat.bsky.*calls now refresh an expired access token instead of throwingUnauthorizedException.Bluesky.fromSessionbuilt a secondServiceContextfor those services and never gave it the refresh hook, so only calls made throughbsky.atprotorecovered from an expired token. Every factory now shares the context owned by the nestedATProto, which also makesbsky.sessionreflect a refresh — previously it kept returning the spent credentials, so persisting it signed the user out on next launch. The OAuth factories were unaffected, since both contexts already shared oneOAuthSessionManager. - chore: bump
atprototo^2.1.0.
- fix:
-
2.1.121 Jul 2026Release notes
Open source →- feat: added
app.bsky.graph.searchStarterPacksV2 - chore: regenerated from synced lexicons
- feat: added
-
2.1.018 Jul 2026Release notes
Open source →- feat: notification grouping now matches the official Bluesky social-app by default.
NotificationsGrouper/NotificationListNotificationsOutput.group()now group six reasons (like,repost,follow,like-via-repost,repost-via-repost,subscribed-post), apply a 48h sliding window anchored on each group's newest item, separate follow-backs into their own groups, and mark a group unread if any of its notifications is unread. This changes the default grouping output (a behavior change); to keep the previous behavior, passNotificationsGrouperConfig.lenient()(e.g.output.group(config: const NotificationsGrouperConfig.lenient())). - feat: new
NotificationsGrouperConfig(.official()/.lenient()/ fully custom) controls groupable reasons, time window, follow-back separation, and the unread policy. - feat:
NotificationsExtension.group()now accepts an optionalconfig, andGroupBy/NotificationsExtensionare now exported frompackage:bluesky/bluesky.dart. - feat:
groupByHour/groupByMinutenow use the official grouping default as well; for the legacy behavior with time bucketing, callgroup(by: GroupBy.hour(n), config: const NotificationsGrouperConfig.lenient()). - chore: bump dev dependency
bluesky_textto^1.5.3.
- feat: notification grouping now matches the official Bluesky social-app by default.
-
2.0.116 Jul 2026Release notes
Open source →- docs: added an OAuth authentication section to the README —
Bluesky.fromOAuth(OAuthSessionManager)(also onBlueskyChat/OzoneTool),OAuthSessionManager(oauth, sub:)/OAuthSessionManager.fromSession(restored), and the renamedoAuthSessionManagergetter. - docs: added a short Firehose note pointing to
bsky.atproto.sync.subscribeReposAsMessages()for typed messages. - chore: bump
atproto_coreto^2.0.1andatprototo^2.0.1(dev:bluesky_text^1.5.2,atproto_oauth^0.5.1).
- docs: added an OAuth authentication section to the README —
-
2.0.016 Jul 2026Release notes
Open source →- feat!:
Bluesky.fromOAuth(OAuthSessionManager)(also onBlueskyChat/OzoneTool);fromOAuthSession(session, {oauthClient})wraps a shared manager;oAuthSessiongetter replaced byoAuthSessionManager. - chore: updated
tools.ozone.queue.defs#queueView.subjectTypes - chore: regenerated from synced lexicons
- feat: the
retryConfigparameter (onBluesky/BlueskyChat/OzoneTool) 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). - fix: mute-word matching still scans quoted-post embeds when the top-level record fails validation.
- fix: labeler-scoped content-label preferences (those carrying a
labelerDid) are now applied only to the matching labeler and never leak into the global label defaults, and preferences scoped to an app labeler are honored instead of dropped — matching@atproto/api. Previously an orphaned scoped preference (e.g. for an unsubscribed labeler) could override the global defaults and, for example, unblur adult content. - fix:
LinkPreviewexposes cardyb'serror/likelyTypefields. - fix: the video service percent-encodes the port when building a
did:webaudience. - chore: removed duplicate imports in the
toolsextensions/utils.
- feat!:
-
1.7.215 Jul 2026Release notes
Open source →- chore:
tools.ozone.queue.defs#queueView.reportTypesis now optional - chore:
tools.ozone.queue.defs#queueView.subjectTypesis now optional - feat: added
tools.ozone.report.defs#reportView.isAutomated - chore: regenerated from synced lexicons
- chore:
-
1.7.113 Jul 2026Release notes
Open source →- chore: bump
atprototo^1.7.0, which exposesbsky.atproto.sync.subscribeReposAsMessages()— a Firehose subscription that yields already-decoded, typed messages instead of raw binary frames.
- chore: bump
-
1.7.013 Jul 2026Release notes
Open source →- fix!: rewrote the notification grouper as a typed O(n) implementation; notifications with a missing
labelsfield (optional in the lexicon, common in practice) no longer crashgroup()/_mergeLabels(B-1/B-2/B-8). - fix: added current AppView reasons (
verified,like-via-repost,subscribed-post, etc.); unknown reasons now fall back instead of throwing, sogroup()no longer crashes on live timelines (B-3). - fix: grouping keys use the remapped reason, so likes on feed generators (
customFeedLike) actually merge (B-4). - fix:
uploadVideonow usesctx.repo, so it no longer crashes under an OAuth-authenticated client (session!.didwas null) (B-13). - fix: the single-character mute-word check uses UTF-16 length (spec-conformant), and
decidePostnow guards withvalidate()so a malformed federated record no longer throws (B-9/B-11). - fix: out-of-range hour/minute now raise a runtime
RangeError(was assert-only, so release builds silently misbehaved); labels are de-duped by value equality (B-5/B-6). - feat: added
OzoneTool.fromOAuthSessionandoAuthSessiongetters for parity with sibling clients (B-14). - fix!: regenerated from the fixed
lex_gen— knownValues+default fields are now non-nullable with their spec default (e.g.app.bsky.actor.defs#mutedWord.actorTarget→all,app.bsky.feed.getAuthorFeed.filter→posts_with_replies,tools.ozone.setting.listOptions.scope→instance); the correspondinghasXgetters were removed and the moderation engine adapted accordingly (G-18). - chore: bump
atprototo^1.6.0,atproto_coreto^1.3.0, andbluesky_textto^1.4.0.
- fix!: rewrote the notification grouper as a typed O(n) implementation; notifications with a missing
-
1.6.010 Jul 2026Release notes
Open source →Aligned the client-side moderation engine with the official
@atproto/apiimplementation:- fix:
moderateUserListnow delegates todecideUserListinstead of recursing into itself (previously caused aStackOverflowError). - fix:
decideUserListno longer crashes onListViewsubjects and now merges the creator's account/profile decisions, matching the official implementation. - fix: label causes from subscribed labelers are now attributed to the labeler (
ModerationCauseSource.labeler) instead of always to the user. - fix:
getInterpretedLabelValueDefinitionsnow defaultsadultOnlytofalse(previouslytrue), so labeler-defined labels are no longer adult-gated unless declared. - fix:
getLabelerHeadersnow appends;redactonly to app labelers (Bluesky's official labeler), matching the officialatproto-accept-labelersheader behavior. Subscribed labelers are sent without parameters. - feat: added the deprecated
gorealias forgraphic-mediato the known label definitions (KnownLabelValue.gore), matching the official label defs. - feat: muted words now support
expiresAt(expired words are ignored) andactorTarget: exclude-following(pass the post author via the newactorparameter). - feat: added
matchMuteWordsandMuteWordMatch, mirroring the official API.ModerationCauseMuteWordnow carries thematchesthat triggered it. - fix: muted words with internal slashes now follow the official exclusion rule (
and/orno longer matchesandor), and all tag facet features are considered (previously only the first per facet). - feat: mute-word matching in
moderatePostnow scansapp.bsky.embed.galleryalt texts and appliesexclude-followingvia the post/quote author. - feat: added
moderateStatus/decideStatusfor live status (app.bsky.actor.defs#statusView) moderation. - feat: added
ModerationBehaviors— a configuration object onModerationOpts.behaviorsthat lets users customize block/mute/mute-word/hide behaviors and global label definitions without forking the engine. Defaults replicate the official logic. - chore: deprecated the string-keyed
kBlockBehavior/kMuteBehavior/kMuteWordBehavior/kHideBehaviorconstants in favor of the typedkDefault*Behaviorsmaps. - chore: bump
atprotoandatproto_core.
- fix:
-
1.5.009 Jul 2026Release notes
Open source →- feat: added
app.bsky.feed.searchPostsV2endpoint. - feat: added
chat.bsky.notification.getPreferencesandchat.bsky.notification.putPreferencesendpoints. - feat: added
chat.bsky.notification.defs#preferencesand#chatPreference. - feat: added
isBetaUsertoapp.bsky.actor.defs#bskyAppStatePref. - feat: added
additionalVerificationMethodstoapp.bsky.ageassurance.defs. - chore: deprecated chat preferences in
app.bsky.notification.defsandapp.bsky.notification.putPreferencesV2in favor ofchat.bsky.notificationpreferences. - feat: added
app.bsky.embed.galleryembed (#image,#view,#viewImage). - feat: added
chat.bsky.convo.getUnreadCountsendpoint. - feat: added
chat.bsky.convo.defs#replyReffor message reply references. - feat: added
chat.bsky.group.defs#disabledJoinLinkPreviewViewand#invalidJoinLinkPreviewView. - feat: added
tools.ozone.report.queryActivitiesendpoint. - fix: generate
app.bsky.draft.defs#draftEmbedGallerycorrectly. Itsitemsis nowList<UDraftEmbedGalleryItems>; previously it referenced a non-existent file and failed to compile. - feat: handle the
com.germnetwork.declarationrecord inRepoCommitHandlerand re-export it fromatproto.
- feat: added
-
1.4.727 May 2026 -
1.4.625 May 2026 -
1.4.522 May 2026 -
1.4.421 May 2026 -
1.4.320 May 2026 -
1.4.220 May 2026 -
1.4.120 Feb 2026 -
1.4.019 Feb 2026 -
1.3.020 Dec 2025 -
1.2.609 Nov 2025Release notes
Open source → -
1.2.519 Oct 2025 -
1.2.430 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
- Fixed moderation test data to use string URIs instead of AtUri objects where appropriate
- Improved type safety in API parameter handling and mock data generation
- FIX: Fixed type compatibility issues with AtUri parameters
-
1.2.330 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
- FIX: Downgraded characters dependency from ^1.4.1 to ^1.4.0 for compatibility
- IMPROVEMENT: Enhanced union type classes with sealed class implementation
-
1.2.227 Sep 2025Release notes
Open source →- feat: Merged #2150 - Added pronouns field support to actor profiles
- Added
pronounsfield toapp.bsky.actor.defs#profileViewDetailedfor displaying user pronouns in detailed profile views - Added
pronounsfield toapp.bsky.actor.profilerecord for storing user pronouns in profile data - Enhanced user profile customization with pronouns information support
- Synchronized with latest Bluesky lexicon updates for improved profile representation
- Added
- feat: Merged #2150 - Added pronouns field support to actor profiles
-
1.2.126 Sep 2025Release notes
Open source →- feat: Merged #2143 - Added onboarding suggested starter packs support
- Added
getOnboardingSuggestedStarterPacksendpoint for retrieving suggested starter packs during onboarding - Added
getOnboardingSuggestedStarterPacksSkeletonendpoint for skeleton data of suggested starter packs - Enhanced onboarding experience with curated starter pack recommendations
- New endpoints available via
UnspeccedServicefor improved user onboarding flow
- Added
- feat: Merged #2143 - Added onboarding suggested starter packs support
-
1.2.025 Sep 2025Release notes
Open source →- feat: Merged #2137 - Added comprehensive Ozone moderation and administration services
- Added CommunicationService for
tools.ozone.communication.*endpoints - Added HostingService for
tools.ozone.hosting.*endpoints - Added ModerationService for
tools.ozone.moderation.*endpoints - Added SafelinkService for
tools.ozone.safelink.*endpoints - Added ServerService for
tools.ozone.server.*endpoints - Added SetService for
tools.ozone.set.*endpoints - Added SettingService for
tools.ozone.setting.*endpoints - Added SignatureService for
tools.ozone.signature.*endpoints - Added TeamService for
tools.ozone.team.*endpoints - Added VerificationService for
tools.ozone.verification.*endpoints - Enhanced moderation and administrative capabilities for Bluesky applications
- Added CommunicationService for
- feat: Enhanced actor profile support
- Added
pronounsfield toapp.bsky.actor.defs#profileViewDetailedandapp.bsky.actor.profilerecord - Added
websitefield toapp.bsky.actor.defs#profileViewDetailedandapp.bsky.actor.profilerecord - Improved user profile customization capabilities with pronouns and website information
- Added
- feat: Merged #2137 - Added comprehensive Ozone moderation and administration services
-
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 significant new functionality
- Updated dependency to
atproto: ^1.1.0for compatibility with latest AT Protocol features - Minor version bump appropriate for major new OzoneTool capabilities
- Updated dependency to
- feat: Version bump to v1.1.0 to reflect significant new functionality
-
1.0.1111 Sep 2025Release notes
Open source →- feat: Added OzoneTool client for comprehensive
tools.ozone.*API support- New
OzoneToolclass provides access to all Ozone moderation and administrative services - Includes Communication, Hosting, Moderation, Server, Team, and additional Ozone services
- Available via separate
package:bluesky/ozone.dartimport for modular usage - Requires session-based authentication for secure administrative operations
- Complete API coverage for moderation events, team management, server configuration, and more
- New
- chore: Update source files automatically (#2117)
- Added new
com.atproto.temp.dereferenceScopeendpoint for temporary scope dereferencing - Added
tools.ozone.moderation.defs.revokeAccountCredentialsEventfor account credential revocation - Updated Ozone moderation event unions to include new revoke credentials event type
- Generated corresponding service methods, types, and documentation
- Added new
- feat: Added OzoneTool client for comprehensive
-
1.0.1007 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.,
live→appBskyActorStatusLive) - Actor, feed, graph, and moderation enum values updated with improved naming
- Updated test cases to match new enum naming convention (e.g.,
curatelist→appBskyGraphDefsCuratelist)
- Enum values now use consistent namespaced naming (e.g.,
- feat: Added support for lexicon fragment-only values in code generation
- feat: Enhanced lexicon generation with context-aware naming for better consistency
- fix: Improved enum naming consistency across all Bluesky lexicon types
- BREAKING CHANGE: Enhanced lexicon known values naming with proper camelCase convention
-
1.0.902 Sep 2025 -
1.0.822 Aug 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
Links in README.md should be well formed Unable to parse 1 image link..
- chore: fix
-
1.0.509 Aug 2025Release notes
Open source →- Add service functions. Endpoints can be easily called as functions like
appBskyFeedGetTime - 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 2025 -
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 by lexicons.
-
1.0.0-preview.819 Sep 2024 pre-releaseNothing published for this version
-
1.0.0-preview.704 Sep 2024 pre-releaseNothing published for this version