Go source code for Bluesky's atproto services.

indigo: atproto libraries and services in golang
Some Bluesky software is developed in Typescript, and lives in the bluesky-social/atproto repository. Some is developed in Go, and lives here.
If you are not a Go developer and you want to run one of these tools, you can do:
# with Homebrew installed
brew install go
for example, to run tap
go install github.com/bluesky-social/indigo/cmd/tap
tap
Go will fetch dependencies, compile, and install tap or another service with a one-line go install command.
Soon, we plan to decouple the tools in this repo so you can install them individually like goat.
What is in here?
Go Services:
- tap (README): synchronization and backfill tool for atproto apps
- relay (README): relay reference implementation
- rainbow (README): firehose "splitter" or "fan-out" service
- hepa (README): auto-moderation bot for Ozone
- goat (README): CLI for interacting with network: CAR files, firehose, APIs, etc (moved to separate repo)
⚠️ All the packages in this repository are under active development. Features and software interfaces have not stabilized and may break or be removed.
| Package | Docs | | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | api/atproto: generated types for com.atproto.* Lexicons | | |
api/bsky: generated types for app.bsky.* Lexicons | | |
atproto/atclient: HTTP API client | | |
atproto/auth/oauth: AT OAuth client | | |
atproto/identity: DID and handle resolution | | |
atproto/syntax: string types and parsers for identifiers | | |
atproto/lexicon: schema validation of data | | |
atproto/repo: repository data structure | | |
atproto/repo/mst: Merkle Search Tree implementation | | |
atproto/atcrypto: cryptographic signing and key serialization | | |
go-didplc/didplc: DID PLC implementation (external) | |
The TypeScript reference implementation, including PDS and bsky AppView services, is at bluesky-social/atproto. Source code for the Bluesky Social client app (for web and mobile) can be found at bluesky-social/social-app.
Development Quickstart
First, you will need the Go toolchain installed. We develop using the latest stable version of the language.
The Makefile provides wrapper commands for basic development:
make build make test make fmt make lint
Individual commands can be run like:
go run ./cmd/relay
The HACKING file has a list of commands and packages in this repository and some other development tips.
What is atproto?
not to be confused with the AT command set or Adenosine triphosphate_
The Authenticated Transfer Protocol ("ATP" or "atproto") is a decentralized social media protocol, developed by Bluesky Social PBC. Learn more at:
- Overview and Guides 👈 Best starting point
- Github Discussions 👈 Great place to ask questions
- Protocol Specifications
- Blogpost on self-authenticating data structures
app.bsky.*.
Contributions
While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.
Rules:
- We may not respond to your issue or PR.
- We may close an issue or PR without much feedback.
- We may lock discussions or contributions if our attention is getting DDOSed.
- We do not provide support for build issues.
- Check for existing issues before filing a new one, please.
- Open an issue and give some time for discussion before submitting a PR.
- Issues are for bugs & feature requests related to the golang implementation of atproto and related services.
- Stay away from PRs that:
Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth.
Are you a developer interested in building on atproto?
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party can be as seamless as first-party through custom feeds, federated services, clients, and more.
License
This project is dual-licensed under MIT and Apache 2.0 terms:
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see the original announcement.