lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky.
npm install @atcute/client @atcute/blueskyimport { Client, simpleFetchHandler } from '@atcute/client';
import type {} from '@atcute/bluesky';
const client = new Client({
handler: simpleFetchHandler({ service: 'https://public.api.bsky.app' }),
});
const { data } = await client.get('app.bsky.actor.getProfile', {
params: { actor: 'bsky.app' },
});
console.log(data.displayName);
// -> Blueskyfor authenticated requests, see the client docs or use the OAuth browser client for web apps.
| Packages |
|---|
| Client packages |
client: XRPC HTTP client |
firehose: XRPC subscription client |
jetstream: Jetstream WebSocket client |
cache: normalized cache store |
| Server packages |
xrpc-server: XRPC web framework |
xrpc-server-bun: Bun WebSocket adapter |
xrpc-server-cloudflare: Cloudflare Workers WebSocket adapter |
xrpc-server-deno: Deno WebSocket adapter |
xrpc-server-node: Node.js WebSocket adapter |
| OAuth packages |
oauth-browser-client: minimal OAuth client for SPAs |
| Lexicon packages |
lex-cli: generate TypeScript from lexicon schemas |
lexicon-doc: parse and author lexicon documents |
lexicon-resolver: resolve lexicons from the network |
lexicons: core types and schema validation |
| Lexicon definition packages |
atproto: com.atproto.* definitions |
bluemoji: blue.moji.* definitions |
bluesky: app.bsky.*, chat.bsky.* definitions |
frontpage: fyi.unravel.frontpage.* definitions |
leaflet: pub.leaflet.* definitions |
lexicon-community: community.lexicon.* definitions |
microcosm: blue.microcosm.*, com.bad-example.* definitions |
ozone: tools.ozone.* definitions |
pckt: blog.pckt.* definitions |
tangled: sh.tangled.* definitions |
whitewind: com.whtwnd.* definitions |
| Identity packages |
identity: handle, DID and DID document types |
identity-resolver: handle and DID document resolution |
identity-resolver-node: Node.js DNS-based handle resolver |
did-plc: did:plc operation validation |
| Utility packages |
car: CAR archive codec |
cbor: deterministic CBOR codec |
cid: content identifier codec |
crypto: signing and verification |
mst: merkle search tree utilities |
multibase: base32/base64 encoding |
repo: repository export reader |
tid: timestamp identifier codec |
varint: LEB128 varint codec |
| Bluesky-specific packages |
bluesky-moderation: content moderation interpretation |
bluesky-richtext-builder: rich text facet builder |
bluesky-richtext-parser: parse rich text syntax |
bluesky-richtext-segmenter: segment text by facets |
bluesky-search-parser: search query tokenizer |
bluesky-threading: atomic thread publishing |
this monorepo uses mise for runtime versioning and pnpm for package management.
# install runtimes
mise install
# build all packages
pnpm run -r build
# pull latest lexicons and regenerate definitions
pnpm run -r pull
pnpm run -r generatecheck bundle sizes with the pkg-size-report tool:
Warning
run pnpm run -r build first, otherwise measurements may be inaccurate.
pnpm pkg-size-report # show sizes (and diff if previously saved)
pnpm pkg-size-report --save # save current sizes for comparison
pnpm pkg-size-report --compare # show only changed packages