Changelog

All notable changes to this project are documented in this file.

The format is based on Keep a Changelog. Current package version is 1.0.2 (dune-project / atproto.opam). Tagged 1.0.1 is at 53ffbc2. The next published package is atproto.1.0.2; it supersedes ocaml/opam-repository#30703.

This file is the human-readable release history. PR numbers are included sparingly so a change can be traced; they are not a substitute for git log.

[Unreleased]

Added

Experimental permissioned-data / spaces helpers from proposal 0016. Present on the 1.0.1 / 1.0.2 trees, but not a spaces product API. The proposal is not final. This library does not start or stub a space host. Live hops skip unless ATP_SPACE=1 and ATP_SPACE_HOST names a real host.

Deferred: com.atproto.simplespace.*, space: OAuth scopes, and proposal registerNotify repo (not in the #5187 lexicon).

Notes

[1.0.2] - 2026-09-10

Opam-health follow-up to tagged 1.0.1. The 1.0.1 package built, linted, and passed lower-bounds; opam-ci tests failed because unauthenticated live hops (PLC directory, AppView, public PDS, firehose / Jetstream) ran by default and only skipped on a caught exception.

1.0.2 makes opam install -t / dune build -p atproto @runtest offline-safe. The published package will be atproto.1.0.2; it supersedes ocaml/opam-repository#30703.

No lexicon pin bump (official pin stays f0d4877a). Jane Street / OCaml bounds are unchanged. No fake hosts.

Added

Changed

Notes

[1.0.1] - 2026-09-10

Released as tag 1.0.1 (53ffbc2 / #243). Public opam publish: ocaml/opam-repository#30703 (open; supersedes #30698).

Packaging fix so opam-ci can install and test the package. The 1.0.0 submission built on 4.14 / 5.2 but failed on the lexicon coverage gate under with-test, unbounded digestif / mirage-crypto-ec lower bounds, and a redundant version: field in the submitted opam file. OCaml 5.4+ remains out of range (Jane Street v0.17).

No lexicon pin bump (official pin stays f0d4877a). Jane Street / OCaml bounds are unchanged. Experimental 0016 helpers are documented under Unreleased β€” present on this tree, not a product API.

Changed

Notes

[1.0.0] - 2026-09-09

First stable packaged surface, tagged at 1.0.0 (8a1b866 / #237). What is new since tagged 0.1.0 (8f44fb9 / #228). The first 1.0.0 opam-repository submission was #30698 (superseded by 1.0.1 / #30703). The 0.1.0 opam-repository PR #30695 is separate.

Requires OCaml >= 4.14.1 and < 5.4 (CI build: 4.14.1 and 5.3.0). Jane Street core / async / ppx_jane / zstandard are >= v0.16.0 and < v0.18~ (v0.16 on 4.14, v0.17 on 5.1–5.3). ocamlformat stays 0.25.1. Official lexicon pin stays f0d4877a (no bump in #229–#236). System libzstd is required for Jetstream dict-zstd (Ubuntu/Debian libzstd-dev, Homebrew zstd).

A GitHub pin is the 1.0.0 development surface:

opam pin add atproto git+https://github.com/david-engelmann/atproto.git

Added

OCaml 5 / packaging
HTTPS OAuth
Chat (hosted chat.bsky.*)
Video (hosted app.bsky.video.*)
Repo_sync / TAP-like indexer
Jetstream archive token
Phone / contacts / push
Docs

Changed

Fixed

Notes

Honesty constraints for this 1.0.0 surface:

Not in this release

[0.1.0] - 2026-09-09

First public opam release candidate, tagged at #228 (8f44fb9). The packaged GitHub surface is now 1.0.0.

The 0.1.0 opam-repository PR #30695 was superseded by 1.0.0 / 1.0.1. A GitHub pin still works for development:

opam pin add atproto git+https://github.com/david-engelmann/atproto.git

Requires OCaml >= 4.14.1 and < 5.4 (CI build: 4.14.1 and 5.3.0). Jane Street core / async / ppx_jane / zstandard are >= v0.16.0 and < v0.18~ (v0.16 on 4.14, v0.17 on 5.1–5.3). System libzstd is required for Jetstream dict-zstd (Ubuntu/Debian libzstd-dev, Homebrew zstd).

The first installable cut was 2026-09-03. Work in #229–#236 shipped on main after the 0.1.0 tag while the package version was still 0.1.0; that wave is packaged as 1.0.0. The sections below remain the human-readable 0.1.0-era history (through #235).

Added

Protocol client
OAuth / DPoP
Chat (hosted chat.bsky.*)
Video (hosted app.bsky.video.*)
Repo_sync / TAP-like indexer
Jetstream
Phone / contacts / push (hosted AppView)
Ozone
Client XRPC migration and leftover helpers

JSON XRPC that still hand-rolled Cohttp now shares Client.get_json / Client.get_text / Client.post_json and query-pair or POST body helpers. Public signatures and parse types stay unchanged unless noted. Binary upload_blob / import_repo and Sync CAR stay Cohttp.

Local TestNetwork coverage

Live hops against @atproto/dev-env@0.6.4. Skip only when the NSID is not served or TestNetwork policy applies (email-token, UpstreamFailure, feature-disabled). Throwaway accounts never use alice.test for destructive calls. Hosted chat / video / Tap / SMS / push stay listed not faked.

Docs, CI, and packaging

Changed

Fixed

Notes

Honesty constraints for this 0.1.0 surface:

examples/offline.ml typechecks against the public API under dune build / dune runtest.

PR index (#112–#235)

Grouped so the old β€œon top of #N” sentence is recoverable without rereading it:

Theme

Pull requests

Docs / Pages / odoc / CI

#112–#114, #117, #120–#122, #125–#128, #130–#136, #138–#149, #151, #155–#161, #164–#183

Live TestNetwork leftovers

#116, #119, #123, #129, #137, #150, #152–#154, #162–#163, #168, #184

Lexicon pin f0d4877a

#132, #181–#182

Typed encodings / leftover Client helpers

#185–#227

Packaging / OCaml 5

#228–#229

OAuth HTTPS metadata

#230

Hosted chat

#231

Hosted video

#232

Repo_sync / TAP-like indexer

#233

Jetstream archive token

#234

Phone / contacts / push

#235

Earlier Jetstream work that shipped in the 2026-09-03 cut: #109–#110.

Not in this release