rsky (/ˈrɪski/) is a full implementation of AT Protocol in Rust. Most of the code is general purpose. Some of it, like rsky-feedgen, is written for the needs of the Blacksky community.
We developed rsky so that any community on the network can run their own infrastructure, moderate on their own terms, and leave if they ever need to. A second implementation of the protocol is how that stays possible.
Warning
This is a work in progress. Things change, things are incomplete, and things break. Until 1.0.0 we make no stability promises.
Crates (published to crates.io, usable on their own):
| Crate | What it does | Docs | crates.io |
|---|---|---|---|
rsky-common |
Shared code | README | |
rsky-crypto |
Signing and key serialization | README | |
rsky-identity |
DID and handle resolution | README | |
rsky-lexicon |
Lexicon schema types | README | |
rsky-oauth |
OAuth provider core. JOSE, JWK and DPoP for AT Protocol services | README | |
rsky-repo |
Repository storage, including the MST | README | |
rsky-syntax |
Parsers for handles, DIDs, NSIDs and other identifiers | README | |
rsky-space |
Permissioned-data primitives. LtHash commits, credentials and space repos for access controlled or private records that only members can read | README |
Services (the things we deploy):
rsky-pds: Personal Data Server. It hosts accounts and their repos. Each account's data lives in its own SQLite store on disk, blobs go to local disk or an S3 bucket, and email goes out through Mailgun or any SMTP server.rsky-pds-router: Stateless HTTP router that sits in front of two PDS implementations sharing one data directory. It pins each account to one writer, lets reads move to the second implementation one account at a time, and journals every write before forwarding it, so accounts can migrate between implementations while both stay live.rsky-pdsadmin: Admin tooling for a running PDS.rsky-relay: Crawls the network and emits one stream of everything it finds. The "big world" piece.rsky-firehose: Firehose consumer.rsky-jetstream-subscriber: Firehose consumer for Jetstream.rsky-feedgen: Feed generator, built around the Blacksky community's feeds.rsky-labeler: Firehose consumer that labels content for moderation.rsky-wintermute: Indexer and backfiller for the app view.rsky-space-host: Authority for a permissioned space. It issues space credentials, manages the space, and routes write notifications to members.rsky-daemon: Syncer for permissioned data. It pulls each member's permissioned repo from their PDS, verifies it, and indexes it so a space can be read as one whole.rsky-video: Video processing and serving.rsky-satnav: "Structured Archive Traversal, Navigation & Verification." Explores DASL CAR files and AT Protocol repos.
Lexicons (/lexicons): Lexicon definitions for the parts of the protocol we extend, such as spaces.
The Authenticated Transfer Protocol (atproto) is a decentralized social protocol developed by Bluesky PBC. Start here:
- Overview and guides 👈🏾 the best starting point
- Protocol specifications
- GitHub discussions 👈🏾 good place to ask questions
- Self-authenticating data structures
Issues and pull requests are welcome. Before you open one:
- Read the Code of Conduct. We hold to it.
- Follow the canonical TypeScript implementation closely. Where rsky differs on purpose, the difference is documented.
- Check for an existing issue before filing a new one.
- Open an issue and give it time for discussion before you send a PR.
PRs we will close without much discussion:
- Large refactors
- New features that were not discussed first
- Changes to tooling or frameworks that were not discussed first
- New dependencies we don't need
What to expect from us: we are a small team running production infrastructure. We will try to respond, and sometimes we won't. We may close an issue or PR with little feedback, lock a thread if it's eating our attention, and we don't provide support for build issues.
Become a backer and your avatar shows up here with a link to your site.
rsky is released under the Apache License 2.0.