a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky, featuring:
- an API client for making typed HTTP requests, with support for lexicons like WhiteWind or Bluemoji
- an OAuth client for SPA applications for authentication use-cases
- utility packages for various data formats, including CIDv1, DAG-CBOR, CAR and TID record keys
- Bluesky-specific utility packages like a rich text builder and a post threader
looking for more? check out skyware, an additional collection of packages, built on top of atcute.
Packages |
---|
Core packages |
client : API client library |
lex-cli : CLI tool to generate type definitions for the API client |
OAuth packages |
oauth-browser-client : minimal OAuth browser client implementation |
Lexicon definitions |
bluemoji : adds blue.moji.* lexicons |
bluesky : adds app.bsky.* and chat.bsky.* lexicons |
ozone : adds tools.ozone.* lexicons |
whitewind : adds com.whtwnd.* lexicons |
Utility packages |
car : DASL CAR and atproto repository decoder |
cbor : DASL dCBOR42 codec |
cid : DASL CID codec |
crypto : cryptographic utilities |
did : did utilities |
did-plc : did:plc utilities |
multibase : multibase utilities |
tid : atproto timestamp identifier codec |
varint : protobuf-style LEB128 varint codec |
Bluesky-specific packages |
bluesky-richtext-builder : builder pattern for Bluesky's rich text facets |
bluesky-richtext-parser : parse Bluesky's (extended) rich text syntax |
bluesky-richtext-segmenter : segments Bluesky's rich text facets into tokens |
bluesky-threading : create Bluesky threads containing multiple posts with one write |
this monorepo uses mise
to handle versioning, although it doesn't really
matter. Node.js LTS is necessary to use the internal-dev-env
package for testing the client
package with the official PDS distribution, but otherwise you can (and should) use the latest
available version.
# Install all the recommended runtimes
mise install
# Runs all the build scripts
pnpm run -r build
# Pull in the latest ATProto/Ozone/Bluesky lexicons, and generate the type declarations
pnpm run pull
pnpm run -r generate
to observe the size of packages (both install size and bundled size), there is a pkg-size-report
tool doing just that. you can also save the package sizes at a given time and inspect the impact of
changes to the final bundle size. the tool uses esbuild
to produce a minified bundle to get the
size of each entrypoint.
Warning
run pnpm run -r build
before running the command. otherwise, the command may not run, or give bad measurements.
# See the size of packages.
# If package sizes were saved previously, will also show the diff.
pnpm pkg-size-report
# Save esbuild metafiles and package size information.
pnpm pkg-size-report --save
# Save just esbuild metafiles.
pnpm pkg-size-report --save-meta
# Show only the packages whose size have changed.
pnpm pkg-size-report --compare
# Keep the result bundle produced by esbuild.
# Will be left in /tmp/[...]--[pkgname]--[random]
pnpm pkg-size-report --keep-builds