NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
The AT Protocol SDK
Last release 24 days ago
10 Sep 2026
Release timing varies
gaps range from 2 weeks to 6 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
4 years old
72 releases · first in 2022
One column per quarter.
🧩 Custom lexicon codegen : atp gen custom turns any lexicon directory into a package of models, namespaces, subscription clients, and a Client subclas
🧩 Custom lexicon codegen: atp gen custom turns any lexicon directory into a package of models, namespaces, subscription clients, and a Client subclass that composes with the SDK instead of forking it
📚 Fully reworked docs website: a new theme, the API reference as a nested NSID tree, guides for every workflow with runnable examples, and a much better search
atp gen custom to build a package from any lexicon directory by @MarshalX in #727ClientRaw by @MarshalX in #725RateLimitExceededError with the limit, remaining, reset_at, and retry_after of the response by @MarshalX in #738python -m atproto_cli by @MarshalX in #730sphinxawesome theme by @MarshalX in #735autodoc-pydantic by @MarshalX in #734clone() breaking Client subclasses and make atp gen refuse to run from missing lexicons or unresolved refs by @MarshalX in #749login() failing on a PDS that does not serve app.bsky by @MarshalX in #731ForwardRef in the docs by @MarshalX in #717gen_api_docs.py crashing on Python 3.9 by @MarshalX in #741update_lexicons.py breaking on the stale docs pre-clean by @MarshalX in #740Full Changelog: v0.0.71...v0.0.72
Deprecate AtUri.http in favor of the correctly named AtUri.href by @MarshalX in #714
⚡ Jetstream 56k -> 111k events/s, Firehose 22.7k -> 31.1k frames/s. Same bytes in, byte-identical models out (Apple M1)
is_record_type with TypeGuard by @MarshalX in #713AtUri.http in favor of the correctly named AtUri.href by @MarshalX in #714op by @MarshalX in #709$type by @MarshalX in #712Full Changelog: v0.0.70...v0.0.71
🛩️ Jetstream v2 support : live tail with dict-zstd compression (~65% less bandwidth) and full network replay via snapshot() and replay()
🛩️ Jetstream v2 support: live tail with dict-zstd compression (~65% less bandwidth) and full network replay via snapshot() and replay()
atproto_jetstream package with Jetstream v2 live tail support by @MarshalX in #704snapshot() and replay() over the archive by @MarshalX in #706Full Changelog: v0.0.69...v0.0.70
⚡ Speed up imports by loading generated models lazily: 12x faster load time (2.6s → 0.21s), 6x lower memory usage (375MB → 57MB)
⚡ Speed up imports by loading generated models lazily: 12x faster load time (2.6s → 0.21s), 6x lower memory usage (375MB → 57MB)
update_lexicons codegen failing due to lazy-loading regression by @MarshalX in #683Full Changelog: v0.0.68...v0.0.69
Update lexicons fetched from 24c7311 committed 2026-06-09T20:20:05Z (adds AppBskyEmbedGallery support) by @MarshalX in #676
AppBskyEmbedGallery support) by @MarshalX in #676Full Changelog: v0.0.67...v0.0.68
Add Standard.site lexicon entrypoints by @MarshalX in #673
Full Changelog: v0.0.66...v0.0.67
28.05.2026
Add support for Standard.site long-form publishing lexicons!
LexPermission and LexPermissionSet support to the lexicon parser. Fix model generator with reserved Python keywords by @MarshalX in #648Full Changelog: v0.0.65...v0.0.66
Migrate to PEP 621 (use project section in pyproject.toml ) by @MarshalX in #645
⚡ The underlying lib for CAR decoding got a x2 speed boost for your custom feeds and firehose in general! Update it now with pip install -U libipld .
⚡ The underlying lib for CAR decoding got a x2 speed boost for your custom feeds and firehose in general! Update it now with pip install -U libipld. More info and benchmarks: https://github.com/MarshalX/python-libipld/releases/tag/v3.3.0
leeway argument to verify_jwt function by @MarshalX in #638Full Changelog: v0.0.63...v0.0.64
01.12.2025
⚡ The underlying lib for CAR decoding got a x2 speed boost for your custom feeds and firehose in general! Update it now with pip install -U libipld. More info and benchmarks: libipld v3.3.0 release notes
leeway argument to verify_jwt function by @MarshalX in #638Fix httpx deprecation warnings by @zzstoatzz in #614
Notes:
websockets lib to v15, which uses the new async client, differences in stability are possible. Please report your findings!pydantic lib, new strange warnings coming from it are possible. Please report your findings!websockets to v15 by @zzstoatzz in #605httpx deprecation warnings by @zzstoatzz in #614pydantic field warnings for optional fields with constraints by @zzstoatzz in #627Full Changelog: v0.0.62...v0.0.63
❗ Next release will drop Python 3.8 support
❗ Next release will drop Python 3.8 support
Full Changelog: v0.0.61...v0.0.62
Note: this release fixes the session refreshing issue broken by 0.0.60.
Note: this release fixes the session refreshing issue broken by 0.0.60.
RequestBase -> get_headers() by @MarshalX in https://github.com/MarshalX/atproto/pull/601Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.60...v0.0.61
19.04.2025
Note: this release fixes the session refreshing issue broken by 0.0.60.
Note: session refreshing was broken in this version. Please use 0.0.61 instead.
Note: session refreshing was broken in this version. Please use 0.0.61 instead.
UnknownUnionModel type by @MarshalX in https://github.com/MarshalX/atproto/pull/586include_pins argument to get_author_feed method of Client by @maratsh in https://github.com/MarshalX/atproto/pull/583auth_factor_token argument to the login method to support Email 2FA by @MarshalX in https://github.com/MarshalX/atproto/pull/593AtUri by adding relative URIs support and make method by @MarshalX in https://github.com/MarshalX/atproto/pull/592HTTPX client (timeouts, SSL, retry policies, etc.) by @MarshalX in https://github.com/MarshalX/atproto/pull/594Content-Type header by @MarshalX in https://github.com/MarshalX/atproto/pull/579NSID; fix edge cases for string format validation by @zzstoatzz in https://github.com/MarshalX/atproto/pull/572Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.59...v0.0.60
11.04.2025
Note: session refreshing was broken in this version. Please use 0.0.61 instead.
UnknownUnionModel type by @MarshalX in #586include_pins argument to get_author_feed method of Client by @maratsh in #583auth_factor_token argument to the login method to support Email 2FA by @MarshalX in #593AtUri by adding relative URIs support and make method by @MarshalX in #592HTTPX client (timeouts, SSL, retry policies, etc.) by @MarshalX in #594Content-Type header by @MarshalX in #579NSID; fix edge cases for string format validation by @zzstoatzz in #572Add support for the repository #sync message in the subscribe repos firehose by @MarshalX in https://github.com/MarshalX/atproto/pull/556
#sync message in the subscribe repos firehose by @MarshalX in https://github.com/MarshalX/atproto/pull/556chat.* and tools.* models to the main menu of documentation by @MarshalX in https://github.com/MarshalX/atproto/pull/551httpx 0.28.x by @MarshalX in https://github.com/MarshalX/atproto/pull/553cryptography v44 and v45 by @MarshalX in https://github.com/MarshalX/atproto/pull/554DotDict by @MarshalX in https://github.com/MarshalX/atproto/pull/550Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.58...v0.0.59
23.02.2025
#sync message in the subscribe repos firehose by @MarshalX in #556chat.* and tools.* models to the main menu of documentation by @MarshalX in #551httpx 0.28.x by @MarshalX in #553cryptography v44 and v45 by @MarshalX in #554DotDict by @MarshalX in #550Add the ability to send an aspect ratio with send_video by @yamamotura in https://github.com/MarshalX/atproto/pull/521
send_video by @yamamotura in https://github.com/MarshalX/atproto/pull/521on_session_change callbacks in an async client by @MarshalX in https://github.com/MarshalX/atproto/pull/531send_image and send_images by @MarshalX in https://github.com/MarshalX/atproto/pull/531Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.57...v0.0.58
25.01.2025
send_video by @yamamotura in #521on_session_change callbacks in an async client by @MarshalX in #531send_image and send_images by @MarshalX in #531Add opt-in strict string format validation by @zzstoatzz in https://github.com/MarshalX/atproto/pull/451
at-identifier format by @zzstoatzz in https://github.com/MarshalX/atproto/pull/491REFRESH by @tveastman in https://github.com/MarshalX/atproto/pull/500Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.56...v0.0.57
20.01.2025
at-identifier format by @zzstoatzz in #491REFRESH by @tveastman in #500Add ability to send aspect ratio with send_image and send_images by @palmer-cl in https://github.com/MarshalX/atproto/pull/480
send_image and send_images by @palmer-cl in https://github.com/MarshalX/atproto/pull/480get_bsky_post_by_url example by @DGaffney in https://github.com/MarshalX/atproto/pull/424add_user_to_list advanced example by @MarshalX in https://github.com/MarshalX/atproto/pull/435update_lexicons workflow by @MarshalX in https://github.com/MarshalX/atproto/pull/428SessionEvent: 'creat' -> 'create' by @zzstoatzz in https://github.com/MarshalX/atproto/pull/439clone() and with_...() methods for AsyncClient by @MarshalX in https://github.com/MarshalX/atproto/pull/457atproto_client/auth.md by @questionlp in https://github.com/MarshalX/atproto/pull/464Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.55...v0.0.56
05.12.2024
send_image and send_images by @palmer-cl in #480get_bsky_post_by_url example by @DGaffney in #424add_user_to_list advanced example by @MarshalX in #435update_lexicons workflow by @MarshalX in #428SessionEvent: 'creat' -> 'create' by @zzstoatzz in #439clone() and with_...() methods for AsyncClient by @MarshalX in #457atproto_client/auth.md by @questionlp in #464Add Python 3.13 support by @MarshalX in https://github.com/MarshalX/atproto/pull/416
LexRef as a Schema type of inputs by @MarshalX in https://github.com/MarshalX/atproto/pull/412threading.Lock with a boolean flag in _WebsocketClient by @Darkkekus in https://github.com/MarshalX/atproto/pull/402Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.54...v0.0.55
24.10.2024
LexRef as a Schema type of inputs by @MarshalX in #412threading.Lock with a boolean flag in _WebsocketClient by @Darkkekus in #402Add Client.send_video high-level method by @Meorge in https://github.com/MarshalX/atproto/pull/395
Client.send_video high-level method by @Meorge in https://github.com/MarshalX/atproto/pull/395known_values and enum of string properties in objects by @MarshalX in https://github.com/MarshalX/atproto/pull/391know_values field as closed enum by @MarshalX in https://github.com/MarshalX/atproto/pull/389Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.53...v0.0.54
13.09.2024
Client.send_video high-level method by @Meorge in #395known_values and enum of string properties in objects by @MarshalX in #391know_values field as closed enum by @MarshalX in #389⚡ Thanks to libipld 2.0.0 firehose performance should increase approximately by 30%! No changes from you are required! Check more detailed benchmark r
⚡ Thanks to libipld 2.0.0 firehose performance should increase approximately by 30%! No changes from you are required! Check more detailed benchmark results here
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.52...v0.0.53
10.09.2024
⚡ Thanks to libipld 2.0.0 firehose performance should increase approximately by 30%! No changes from you are required! Check more detailed benchmark results here
Add new asyncio implementation support for websockets 13.0; handle ConnectionError exception; remove close_timeout by @MarshalX in https://github.com/
ConnectionError exception; remove close_timeout by @MarshalX in https://github.com/MarshalX/atproto/pull/376Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.51...v0.0.52
Fix PDS auto-switching for self-hosted instances by @MarshalX in https://github.com/MarshalX/atproto/pull/370
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.50...v0.0.51
Use jiter instead of the built-in json module to improve performance by @MarshalX in https://github.com/MarshalX/atproto/pull/360
jiter instead of the built-in json module to improve performance by @MarshalX in https://github.com/MarshalX/atproto/pull/360certifi from 2024.2.2 to 2024.7.4 by @dependabot in https://github.com/MarshalX/atproto/pull/355zipp from 3.18.1 to 3.19.1 by @dependabot in https://github.com/MarshalX/atproto/pull/356setuptools from 69.5.1 to 70.0.0 by @dependabot in https://github.com/MarshalX/atproto/pull/357Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.49...v0.0.50
30.08.2024
jiter instead of the built-in json module to improve performance by @MarshalX in #360certifi from 2024.2.2 to 2024.7.4 by @dependabot in #355zipp from 3.18.1 to 3.19.1 by @dependabot in #356setuptools from 69.5.1 to 70.0.0 by @dependabot in #357Breaking changes for Direct Messages. Now you must create a client with a chat proxy. See the updated [documentation](https://atproto.blue/en/latest/d…
Breaking changes for Direct Messages. Now you must create a client with a chat proxy. See the updated documentation.
BlobRef representation conversations by @MarshalX in https://github.com/MarshalX/atproto/pull/348BlobRef creation for JSON representation by @MarshalX in https://github.com/MarshalX/atproto/pull/340delete_post example by @MarshalX in https://github.com/MarshalX/atproto/pull/342repost method by @MarshalX in https://github.com/MarshalX/atproto/pull/343Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.48...v0.0.49
04.07.2024
Breaking changes for Direct Messages. Now you must create a client with a chat proxy. See the updated documentation.
BlobRef representation conversations by @MarshalX in #348BlobRef creation for JSON representation by @MarshalX in #340delete_post example by @MarshalX in #342repost method by @MarshalX in #343Add Firehose Account message (use instead of Identity) by @MarshalX in https://github.com/MarshalX/atproto/pull/335
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.47...v0.0.48
Delete deprecated record models called Main instead of Record by @MarshalX in https://github.com/MarshalX/atproto/pull/323
💬 Just shipped: Bluesky Direct Messages! https://atproto.blue/en/latest/dm.html
Many of these changes were backward compatible for a few months with proper warnings.
Main instead of Record by @MarshalX in https://github.com/MarshalX/atproto/pull/323SessionString class by @MarshalX in https://github.com/MarshalX/atproto/pull/324subject argument of .like() and .repost() methods by @MarshalX in https://github.com/MarshalX/atproto/pull/325Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.46...v0.0.47
22.05.2024
💬 Just shipped: Bluesky Direct Messages!
Breaking changes
Many of these changes were backward compatible for a few months with proper warnings.
Main instead of Record by @MarshalX in #323SessionString class by @MarshalX in #324subject argument of .like() and .repost() methods by @MarshalX in #325What's Changed
Fix follow redirects by @MarshalX in https://github.com/MarshalX/atproto/pull/309
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.45...v0.0.46
Content labeling (moderation) is here! This update brings labeling data-stream support as well ozone.tools API!
Content labeling (moderation) is here! This update brings labeling data-stream support as well ozone.tools API!
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.44...v0.0.45
14.03.2024
Content labeling (moderation) is here! This update brings labeling data-stream support as well ozone.tools API!
Add identity firehose message by @MarshalX in https://github.com/MarshalX/atproto/pull/294
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.43...v0.0.44
🎉 New lexicon introduces Account Migration between PDS. More info: https://github.com/bluesky-social/pds/blob/main/ACCOUNT_MIGRATION.md
🎉 New lexicon introduces Account Migration between PDS. More info: https://github.com/bluesky-social/pds/blob/main/ACCOUNT_MIGRATION.md
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.42...v0.0.43
22.02.2024
🎉 New lexicon introduces Account Migration between PDS. More info: ACCOUNT_MIGRATION.md
Add send_ogp_link_card.py (Open Graph protocol) example by @OhkuboSGMS in https://github.com/MarshalX/atproto/pull/273
send_ogp_link_card.py (Open Graph protocol) example by @OhkuboSGMS in https://github.com/MarshalX/atproto/pull/273alias_generator by @MarshalX in https://github.com/MarshalX/atproto/pull/277filter argument of get_author_feed method in https://github.com/MarshalX/atproto/pull/278Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.41...v0.0.42
17.02.2024
send_ogp_link_card.py (Open Graph protocol) example by @OhkuboSGMS in #273alias_generator by @MarshalX in #277filter argument of get_author_feed method in #278[🔥 New documentation page about auth and session reusing!]
🔥 New documentation page about auth and session reusing!
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.40...v0.0.41
Syntax sugar for records is here! Check out how simple work with basic operations is: ```python from atproto import AtUri, Client, models
Syntax sugar for records is here! Check out how simple work with basic operations is:
from atproto import AtUri, Client, models
client = Client()
client.login('my-username', 'my-password')
# get records list
posts = client.app.bsky.feed.post.list(client.me.did, limit=10)
for uri, post in posts.records.items():
print(uri, post.text)
# get specific record
post = client.app.bsky.feed.post.get(client.me.did, AtUri.from_str(uri).rkey)
print(post.value.text)
# create new record
post_record = models.AppBskyFeedPost.Record(text='test record namespaces', created_at=client.get_current_time_iso())
new_post = client.app.bsky.feed.post.create(client.me.did, post_record)
print(new_post)
# delete record
deleted_post = client.app.bsky.feed.post.delete(client.me.did, AtUri.from_str(new_post.uri).rkey)
print(deleted_post)
⚠️ Record models have been renamed from "Main" to "Record". Backward compatibility is provided but will be removed soon! ⚠️ Internals of High-Level Clients have been migrated to new syntax sugar. It could affect you because returned models are changed but the fields are the same.
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.39...v0.0.40
⚠️ Using strong references in `.like()` and `.repost()` methods are deprecated. Use URI and CID arguments instead.
⚠️ Using strong references in .like() and .repost() methods are deprecated. Use URI and CID arguments instead.
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.38...v0.0.39
02.02.2024
⚠️ Using strong references in .like() and .repost() methods are deprecated. Use URI and CID arguments instead.
Add lexicons updating automation using GitHub Actions by @MarshalX in https://github.com/MarshalX/atproto/pull/248
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.37...v0.0.38
26.01.2024
🎉 Welcome in 2024! User-specific custom feeds are here! This is a massive update with a lot of new implementations including Service JWT, signature va
🎉 Welcome in 2024! User-specific custom feeds are here! This is a massive update with a lot of new implementations including Service JWT, signature validation, DID Keys, AtProtoData, and more! Huge docs restructuring is here too: https://atproto.blue
Code snippet: Authorized Custom Feed (user-specific results)
SDK:
Docs:
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.36...v0.0.37
12.01.2024
🎉 Welcome in 2024! User-specific custom feeds are here! This is a massive update with a lot of new implementations including Service JWT, signature validation, DID Keys, AtProtoData, and more! Huge docs restructuring is here too: atproto.blue
Code snippet: Authorized Custom Feed (user-specific results)
SDK:
Docs:
The AT Protocol Identity package has been implemented! It allows the resolution of DIDs and Handles using various techniques like DNS, HTTP, and PLC d
The AT Protocol Identity package has been implemented! It allows the resolution of DIDs and Handles using various techniques like DNS, HTTP, and PLC directory. Abstract and in-memory caching has been brought too. And as always, it provides both sync and async interfaces. Check the docs below!
🌐 Identity resolvers for DID and Handle
Code snippet:
from atproto import IdResolver # for async use AsyncIdResolver
resolver = IdResolver()
did = resolver.handle.resolve('test.marshal.dev')
did_doc = resolver.did.resolve(did)
print(did)
print(did_doc)
Code snippet with cache:
from atproto import DidInMemoryCache, IdResolver # for async AsyncDidInMemoryCache and AsyncIdResolver
cache = DidInMemoryCache()
resolver = IdResolver(cache=cache)
did_doc = resolver.did.resolve('did:web:feed.atproto.blue')
# Now did_document is cached and could be retrieved without network request
did_doc = resolver.did.resolve('did:web:feed.atproto.blue')
# Clear cache
cache.clear()
# Now did_document is not cached and will be retrieved with network request
did_doc = resolver.did.resolve('did:web:feed.atproto.blue')
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.35...v0.0.36
SDK was split into many packages. This affects imports in your codebase. Read more
SDK was split into many packages. This affects imports in your codebase. Read more
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.34...v0.0.35
21.12.2023
❗Breaking changes: SDK was split into many packages. This affects imports in your codebase. Read more
Make SDK more backward and forward-compatible with protocol by @MarshalX in https://github.com/MarshalX/atproto/pull/207
unlike now accepts AT URI instead of record_key and profile_identifyget_postget_postsget_post_threadget_likesget_reposted_byget_timelineget_author_feedunrepost AKA delete_reportfollowunfollow AKA delete_followget_followsget_followersget_profileget_profilesmuteunmuteresolve_handleupdate_handleupload_blobUnknownPrimitiveTypeErrorUnknownDefinitionTypeErrorschema -> schema_maxLength -> max_lengthFull Changelog: https://github.com/MarshalX/atproto/compare/v0.0.33...v0.0.34
17.12.2023
unlike now accepts AT URI instead of record_key and profile_identifyget_postget_postsget_post_threadget_likesget_reposted_byget_timelineget_author_feedunrepost AKA delete_reportfollowunfollow AKA delete_followget_followsget_followersget_profileget_profilesmuteunmuteresolve_handleupdate_handleupload_blobUnknownPrimitiveTypeErrorUnknownDefinitionTypeErrorschema -> schema_maxLength -> max_lengthUpdate lexicons fetched from 0c54951 committed 2023-12-12T21:37:06Z by @MarshalX in https://github.com/MarshalX/atproto/pull/202
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.32...v0.0.33
Add text builder as helper for constructing rich text by @MarshalX in https://github.com/MarshalX/atproto/pull/194
Docs: https://atproto.blue/en/latest/text_builder.html
Create rich text using TexBuilder:
from atproto.utils import TextBuilder
text_builder = TextBuilder()
text_builder.tag('This is a rich message. ', 'atproto')
text_builder.text('I can mention ')
text_builder.mention('account', 'did:plc:kvwvcn5iqfooopmyzvb4qzba')
text_builder.text(' and add clickable ')
text_builder.link('link', 'https://atproto.blue/')
or
from atproto.utils import TextBuilder
text_builder = TextBuilder().text('Test msg using ').link('Python SDK', 'https://atproto.blue/')
and send it
from atproto import Client
from atproto.utils import TextBuilder
client = Client()
client.send_post(TextBuilder().link('Python SDK', 'https://atproto.blue/'))
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.31...v0.0.32
11.12.2023
Migrate firehose to new relay URI by @MarshalX in https://github.com/MarshalX/atproto/pull/190
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.30...v0.0.31
Downgrade sphinxext-opengraph to clean up the tree of dependencies (including vulnerable) by @MarshalX in https://github.com/MarshalX/atproto/pull/179
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.29...v0.0.30
06.11.2023
Make codegen deterministic by @DXsmiley in https://github.com/MarshalX/atproto/pull/162
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.28...v0.0.29
Add update_params method to firehose clients to fix utilizing the old state on reconnecting by @MarshalX in https://github.com/MarshalX/atproto/pull/1
update_params method to firehose clients to fix utilizing the old state on reconnecting by @MarshalX in https://github.com/MarshalX/atproto/pull/149base_uri to Firehose clients by @MarshalX in https://github.com/MarshalX/atproto/pull/155Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.27...v0.0.28
16.09.2023
update_params method to firehose clients to fix utilizing the old state on reconnecting by @MarshalX in #149base_uri to Firehose clients by @MarshalX in #155Add reposts support to the firehose process commits example by @MarshalX in https://github.com/MarshalX/atproto/pull/140
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.26...v0.0.27
13.09.2023
The new release gives a 40x performance boost! But the cost is a lot of breaking changes.
All models have been migrated to Pydantic v2. Fields constraints have been added. Decoding of DAG-CBOR, CID and CAR files has been migrated to the brand-new library libipld. This library is powered by Rust and is much faster than the previous implementation. Pydantic v2 also uses Rust in the core. This leads to a significant performance boost.
Firehose catch up benchmark:
The new release gives a 40x performance boost! But the cost is a lot of breaking changes.
Example of firehose consumer with multiprocessing: process_commits.py
Test stand for benchmarks: MacBook Pro 2021, Apple M1 Pro, 32 GB RAM, 450mbps connection speed, Python 3.8
❗Breaking changes
createdAt is now created_at.bsky to app. For example, Client().bsky.feed.get_likes is now Client().app.bsky.feed.get_likes.models.create_strong_ref helper function to convert refs (example).models.ComAtprotoIdentityResolveHandle.Params('marshal.dev'). Use models.ComAtprotoIdentityResolveHandle.Params(handle='marshal.dev') instead.validation is now validation_.DotDict has been moved to models.dot_dict.DotDict has been changed. Please check the new base class.BlobRef model doesn't contain to_dict() method anymore.CID class has been reimplemented using libipld lib. It supports much less API._type field of models has been renamed to py_type. Now it's constant.leb128 module has been removed.CID has been changed to CIDType.DotDict has been changed to DotDictType.multiformats and dag-cbor dependencies have been removed.ResponseRef from get_profile. Use models.AppBskyActorDefs.ProfileViewDetailed instead.ResponseRef from get_moderation_action. Use models.ComAtprotoAdminDefs.ActionViewDetail instead.ResponseRef from get_moderation_report. Use models.ComAtprotoAdminDefs.ReportViewDetail instead.ResponseRef from get_record. Use models.ComAtprotoAdminDefs.RecordViewDetail instead.ResponseRef from get_repo. Use models.ComAtprotoAdminDefs.RepoViewDetail instead.ResponseRef from resolve_moderation_reports. Use models.ComAtprotoAdminDefs.ActionView instead.ResponseRef from reverse_moderation_action. Use models.ComAtprotoAdminDefs.ActionView instead.ResponseRef from take_moderation_action. Use models.ComAtprotoAdminDefs.ActionView instead.ResponseRef from create_app_password. Use models.ComAtprotoServerCreateAppPassword.AppPassword instead.UnexpectedFieldError. Use ModelError instead.MissingValueError. Use ModelError instead.ModelFieldError. Use ModelError instead.WrongTypeError. Use ModelError instead.CBORDecodingError. Use DAGCBORDecodingError instead.New Features
DotDict models.DotDict models now support __getitem__ and __setitem__ methods.create_strong_ref helper function to convert ref-like models to strong refs.Minor Changes
DotDict models.Union types.Literal types.typing-extensions dependency.ClientBase.Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.25...v0.0.26
🔥 Bsky made breaking changes in models of firehose. This release fixes it
🔥 Bsky made breaking changes in models of firehose. This release fixes it
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.24...v0.0.25
30.08.2023
🔥 Bsky made breaking changes in models of firehose. This release fixes it
Update packages; fix CVE-2023-37920 (certifi) by @MarshalX in https://github.com/MarshalX/atproto/pull/125
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.23...v0.0.24
15.08.2023
❗ Delete get_or_create_model method (backward incompatible) by @MarshalX in https://github.com/MarshalX/atproto/pull/111
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.21...v0.0.23
23.07.2023
23.07.2023 release has been yanked
23.07.2023
release has been yanked
Add dot notation for dictionaries by @MarshalX in https://github.com/MarshalX/atproto/pull/106
README.md by @ndrezn in https://github.com/MarshalX/atproto/pull/104Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.20...v0.0.21
21.07.2023
README.md by @ndrezn in #104Update changelog for v0.0.19 by @MarshalX in https://github.com/MarshalX/atproto/pull/99
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.19...v0.0.20
Update changelog for v0.0.18 by @MarshalX in https://github.com/MarshalX/atproto/pull/92
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.18...v0.0.19
Update changelog for v0.0.17 by @MarshalX in https://github.com/MarshalX/atproto/pull/86
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.17...v0.0.18
Update changelog for v0.0.16 by @MarshalX in https://github.com/MarshalX/atproto/pull/82
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.16...v0.0.17
Update changelog for v0.0.15 by @MarshalX in https://github.com/MarshalX/atproto/pull/77
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.15...v0.0.16
Update changelog for v0.0.14 by @MarshalX in https://github.com/MarshalX/atproto/pull/70
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.14...v0.0.15
23.06.2023
Update changelog for v0.0.13 by @MarshalX in https://github.com/MarshalX/atproto/pull/60
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.13...v0.0.14
10.06.2023
Update changelog for v0.0.12 by @MarshalX in https://github.com/MarshalX/atproto/pull/58
Full Changelog: https://github.com/MarshalX/atproto/compare/v0.0.12...v0.0.13
Your coding agent can read these notes before it upgrades. Set up the MCP server →