-
v0.8.0
Stablereleased this
2026-10-05 14:20:07 +00:00 | 0 commits to main since this releaseA catch-up and performance release. The Spaces implementation follows the permissioned-data alpha of 2026-10-01 — HTTP message signatures instead of DPoP, short-lived key-bound credentials,
repoRev/spaceRevsequencing and credential revocation — and the public Lexicons follow upstream as of 2026-10-02. Identity resolution is faster (DNS-preferred handles, a handle cache, HTTP/2), the request, firehose and DID document paths allocate less, and the code base is about 1,100 lines smaller.Upgrading from 0.7? The migration guide (
docs/migrating-to-0.8.md) lists every breaking change below with what to do about it.Breaking changes
- New optional parameters sit before
limit— onGetTimelineAsync,GetListFeedAsync,GetQuotesAsync,CreateQueueAsyncandUpdateQueueAsync; live report stats are aLiveStats. Migration: name positionallimit/cursorarguments (#210) - Spaces
typeisspaceType—createSpaceandlistSpacestakespaceTypeon the wire;CreateSimpleSpaceRequest.Typeand thetypeparameters ofCreateSpaceAsyncandListSpacesAsyncare renamed. Migration: rename them (#211) - Spaces requests are signed with HTTP message signatures, not DPoP — a credential binds to a P-256 key (
cnf.kid); each request carriesAuthorization: Atproto-Space,Atproto-Space-Audienceand a signature. Migration: removeDPoPProofValidator,ProofLifetimeandPublicBaseUrl(#212) - Space credentials last ten minutes — at most an hour, with
jtiandiatrequired, andSpaceCredentialProviderrenews by the real expiry. Migration:SpaceServerOptions.CredentialLifetimenow defaults to 10 minutes; set it to keep another value (#212) - Spaces:
repoRev,spaceRev,listReposcheckpoints —RevisRepoRev; the authority sequences writes with aspaceRev,listRepospages by it, andRecordWriteAsyncreturns it. Migration: rename.Rev, returnSpaceWriteSequence?from your store, migrate the EF schema, restart syncers fromnull(#213) ISpaceRepoHostgainsHostsAccountAsync— a repo host says whether an account is hosted there, so it can tell which revocations are addressed to it. Migration: implement it, and migrate the EF schema forAtProtoSpaceCredentialRevocations(#214)
Added
- Lexicons synced with upstream
main—since/StartCursorfor polling the timeline and list feeds,sortfor quotes, a post's position in its author's thread, queuerecommendedLabels, and the new report statistics (#210) Ozone.Inbox—AppealActionedSubjectAsynclets an account appeal a moderation action against it or its content (tools.ozone.inbox) (#210)SpaceHttpSignaturesigns and verifies space request signatures; refusals areSpaceSignatureException,BadSpaceSignatureandBadSpaceAudience(#212)- Spaces credential revocation —
notifyCredentialRevoked: repo hosts record(space, jti)for 3610 s and refuse the credential withCredentialRevoked; authorities revoke withSpaceCredentialRevoker, with stores in memory and EF Core (#214) - Spaces write retry and syncer catch-up —
NotifyWriteInBackgroundretries with backoff;notifyWriteanswersFutureRevand ignores a stalerepoRev;SpaceSyncer.ListChangedReposAsyncandNeedsCatchUpresume from aspaceRevcheckpoint (#213) atproto-lexgenknows thespace-refformat — aspace-refstring is generated asSpaceUri(withusing ATProtoNet.Spaces;), andSpaceUriis emitted back asspace-ref(#211)- Handle answers are cached —
HandleResolverremembers a handle's DID forIdentityResolverOptions.HandleCacheTtl(5 minutes; zero disables), so re-verifying a DID's handle no longer costs a lookup each time;ResolveUncachedAsyncstill looks it up afresh (#197)
Changed
- Handle resolution prefers DNS — a DNS TXT answer is returned at once instead of waiting for the handle's web host, as the handle spec recommends; the HTTPS well-known counts only when DNS has none, and no longer fails a DNS answer it disagrees with (#193)
- Identity fetches and XRPC calls use HTTP/2 — DID document, PLC, well-known, DNS-over-HTTPS and XRPC requests ask for HTTP/2 and fall back to 1.1, so concurrent requests to one host share a connection (#194, #197)
- Less allocation on hot paths — JSON request bodies are serialized once with a
Content-Length, DPoP proofs reuse the parsed URI, DID document entries are parsed once per document, and firehose, label and archive decoding reuse their buffer and build no string per key or value (#194, #195, #200) - A smaller code base — the Lexicon clients, auth and server layers, Spaces server, EF Core stores and streaming consumers lose duplication and boilerplate, with no change to the public API or behaviour (#196, #204, #207)
- Dependencies updated — the packages build against .NET 10.0.12 (
System.Formats.Cbor, theMicrosoft.Extensionsabstractions, EF Core) and Aspire 13.6 (#219)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New optional parameters sit before