{"id":19958171,"url":"https://github.com/mary-ext/atcute","last_synced_at":"2025-05-15T07:03:51.197Z","repository":{"id":256328540,"uuid":"850525574","full_name":"mary-ext/atcute","owner":"mary-ext","description":"a collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky.","archived":false,"fork":false,"pushed_at":"2025-05-15T05:07:33.000Z","size":1754,"stargazers_count":319,"open_issues_count":4,"forks_count":10,"subscribers_count":2,"default_branch":"trunk","last_synced_at":"2025-05-15T06:22:26.047Z","etag":null,"topics":["atproto","bluesky","dag-cbor","dasl","ipld","typescript","whitewind"],"latest_commit_sha":null,"homepage":"https://codeberg.org/mary-ext/atcute","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mary-ext.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"mary-ext","ko_fi":"maryext"}},"created_at":"2024-09-01T03:00:52.000Z","updated_at":"2025-05-15T05:07:36.000Z","dependencies_parsed_at":"2025-01-10T15:11:14.005Z","dependency_job_id":"5505f92f-f24a-41cb-9d14-bd5daa6198ed","html_url":"https://github.com/mary-ext/atcute","commit_stats":null,"previous_names":["mary-ext/atcute"],"tags_count":78,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mary-ext%2Fatcute","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mary-ext%2Fatcute/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mary-ext%2Fatcute/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mary-ext%2Fatcute/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mary-ext","download_url":"https://codeload.github.com/mary-ext/atcute/tar.gz/refs/heads/trunk","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254286563,"owners_count":22045750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atproto","bluesky","dag-cbor","dasl","ipld","typescript","whitewind"],"created_at":"2024-11-13T01:41:16.417Z","updated_at":"2025-05-15T07:03:51.190Z","avatar_url":"https://github.com/mary-ext.png","language":"TypeScript","funding_links":["https://github.com/sponsors/mary-ext","https://ko-fi.com/maryext"],"categories":["TypeScript"],"sub_categories":[],"readme":"# atcute\n\na collection of lightweight TypeScript packages for AT Protocol, the protocol powering Bluesky,\nfeaturing:\n\n- an [API client][client] for making typed HTTP requests, with support for lexicons like\n  [WhiteWind][whitewind] or [Bluemoji][bluemoji]\n- an [OAuth client for SPA applications][oauth-browser-client] for authentication use-cases\n- a grab bag of utility packages:\n  - codec libraries for [DASL][dasl] data formats, a strict subset of IPLD specifications, like\n    CIDv1, DAG-CBOR and CAR, but tailored specifically for atproto\n  - codec for atproto's timestamp identifiers\n  - cryptography library for signing and verification of signatures in atproto\n  - schema validators for DID documents, and verification of did:plc operations\n  - Bluesky-specific helpers like [a rich text builder][bluesky-richtext-builder] and [a post thread\n    builder][bluesky-threading]\n\nlooking for more? check out [skyware][skyware], an additional collection of packages, built on top\nof atcute.\n\n[bluemoji]: ./packages/definitions/bluemoji\n[bluesky-richtext-builder]: ./packages/bluesky/richtext-builder\n[bluesky-threading]: ./packages/bluesky/threading\n[client]: ./packages/core/client\n[oauth-browser-client]: ./packages/oauth/browser-client\n[whitewind]: ./packages/definitions/whitewind\n[dasl]: https://dasl.ing/\n[ipld]: https://ipld.io/\n[skyware]: https://skyware.js.org/\n\n---\n\n| Packages                                                                                                               |\n| ---------------------------------------------------------------------------------------------------------------------- |\n| **Client packages**                                                                                                    |\n| [`client`](./packages/clients/client): API client library                                                              |\n| [`jetstream`](./packages/clients/jetstream): Jetstream client                                                          |\n| **OAuth packages**                                                                                                     |\n| [`oauth-browser-client`](./packages/oauth/browser-client): minimal OAuth browser client implementation                 |\n| **Lexicon packages**                                                                                                   |\n| [`lex-cli`](./packages/lexicons/lex-cli): CLI tool to generate schema definitions                                      |\n| [`lexicon-doc`](./packages/lexicons/lexicon-doc): type definitions and schemas for lexicon documents                   |\n| [`lexicons`](./packages/lexicons/lexicons): core lexicon types, interfaces, and schema validations                     |\n| **Lexicon definition packages**                                                                                        |\n| [`atproto`](./packages/definitions/atproto): `com.atproto.*` schema definitions                                        |\n| [`bluemoji`](./packages/definitions/bluemoji): `blue.moji.*` schema definitions                                        |\n| [`bluesky`](./packages/definitions/bluesky): `app.bsky.*` and `chat.bsky.*` schema definitions                         |\n| [`frontpage`](./packages/definitions/frontpage): `fyi.unravel.frontpage.*` schema definitions                          |\n| [`ozone`](./packages/definitions/ozone): `tools.ozone.*` schema definitions                                            |\n| [`tangled`](./packages/definitions/tangled): `sh.tangled.*` schema definitions                                         |\n| [`whitewind`](./packages/definitions/whitewind): `com.whtwnd.*` schema definitions                                     |\n| **Identity packages**                                                                                                  |\n| [`did-plc`](./packages/identity/did-plc): validations, type definitions and schemas for did:plc operations             |\n| [`identity`](./packages/identity/identity): syntax, type definitions and schemas for handles, DIDs and DID documents   |\n| [`identity-resolver`](./packages/identity/identity-resolver): handle and DID document resolution                       |\n| [`identity-resolver-node`](./packages/identity/identity-resolver-node): additional identity resolvers for Node.js      |\n| **Utility packages**                                                                                                   |\n| [`car`](./packages/utilities/car): DASL CAR and atproto repository decoder                                             |\n| [`cbor`](./packages/utilities/cbor): DASL dCBOR42 codec                                                                |\n| [`cid`](./packages/utilities/cid): DASL CID codec                                                                      |\n| [`crypto`](./packages/utilities/crypto): cryptographic utilities                                                       |\n| [`multibase`](./packages/utilities/multibase): multibase utilities                                                     |\n| [`tid`](./packages/utilities/tid): atproto timestamp identifier codec                                                  |\n| [`varint`](./packages/utilities/varint): protobuf-style LEB128 varint codec                                            |\n| **Bluesky-specific packages**                                                                                          |\n| [`bluesky-moderation`](./packages/bluesky/moderation): interprets Bluesky's content moderation labels                  |\n| [`bluesky-richtext-builder`](./packages/bluesky/richtext-builder): builder pattern for Bluesky's rich text facets      |\n| [`bluesky-richtext-parser`](./packages/bluesky/richtext-parser): parse Bluesky's (extended) rich text syntax           |\n| [`bluesky-richtext-segmenter`](./packages/bluesky/richtext-segmenter): segments Bluesky's rich text facets into tokens |\n| [`bluesky-threading`](./packages/bluesky/threading): create Bluesky threads containing multiple posts with one write   |\n\n## contribution guide\n\nthis monorepo uses [`mise`](https://mise.jdx.dev) to handle versioning, although it doesn't really\nmatter. Node.js LTS is necessary to use the `internal-dev-env` package for testing the `client`\npackage with the official PDS distribution, but otherwise you can (and should) use the latest\navailable version.\n\n```sh\n# Install all the recommended runtimes\nmise install\n\n# Runs all the build scripts\npnpm run -r build\n\n# Pull in the latest ATProto/Ozone/Bluesky lexicons, and generate the type declarations\npnpm run pull\npnpm run -r generate\n```\n\n### checking package sizes\n\nto observe the size of packages (both install size and bundled size), there is a `pkg-size-report`\ntool doing just that. you can also save the package sizes at a given time and inspect the impact of\nchanges to the final bundle size. the tool uses `esbuild` to produce a minified bundle to get the\nsize of each entrypoint.\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- Otherwise it wrecks the gfm alertbox ugh --\u003e\n\n\u003e [!WARNING]\n\u003e run `pnpm run -r build` before running the command. otherwise, the command **may not run**, or **give bad measurements**.\n\n\u003c!-- prettier-ignore-end --\u003e\n\n```sh\n# See the size of packages.\n# If package sizes were saved previously, will also show the diff.\npnpm pkg-size-report\n\n# Save esbuild metafiles and package size information.\npnpm pkg-size-report --save\n\n# Save just esbuild metafiles.\npnpm pkg-size-report --save-meta\n\n# Show only the packages whose size have changed.\npnpm pkg-size-report --compare\n\n# Keep the result bundle produced by esbuild.\n# Will be left in /tmp/[...]--[pkgname]--[random]\npnpm pkg-size-report --keep-builds\n```\n\n---\n\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/mary-ext/atcute)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmary-ext%2Fatcute","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmary-ext%2Fatcute","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmary-ext%2Fatcute/lists"}