This repository has no description
8.9 kB
123 lines
1
2
3# indigo: atproto libraries and services in golang
4
5Some Bluesky software is developed in Typescript, and lives in the [bluesky-social/atproto](https://github.com/bluesky-social/atproto) repository. Some is developed in Go, and lives here.
6
7**If you are not a Go developer and you want to run one of these tools**, you can do:
8
9```bash
10# with [Homebrew](brew.sh) installed
11brew install go
12# for example, to run tap
13go install github.com/bluesky-social/indigo/cmd/tap
14tap
15```
16
17Go will fetch dependencies, compile, and install `tap` or another service with a one-line `go install` command.
18
19*Soon*, we plan to decouple the tools in this repo so you can install them individually like [goat](https://formulae.brew.sh/formula/goat).
20
21## What is in here?
22
23**Go Services:**
24
25- **tap** ([README](./cmd/tap/README.md)): synchronization and backfill tool for atproto apps
26- **relay** ([README](./cmd/relay/README.md)): relay reference implementation
27- **rainbow** ([README](./cmd/rainbow/README.md)): firehose "splitter" or "fan-out" service
28- **hepa** ([README](./cmd/hepa/README.md)): auto-moderation bot for [Ozone](https://ozone.tools)
29
30**Developer Tools:**
31
32- **goat** ([README](https://github.com/bluesky-social/goat)): CLI for interacting with network: CAR files, firehose, APIs, etc (moved to [separate repo](https://github.com/bluesky-social/goat))
33
34**Go Packages:**
35
36> ⚠️ All the packages in this repository are under active development. Features and software interfaces have not stabilized and may break or be removed.
37
38| Package | Docs |
39| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
40| `api/atproto`: generated types for `com.atproto.*` Lexicons | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/api/atproto) |
41| `api/bsky`: generated types for `app.bsky.*` Lexicons | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/api/bsky) |
42| `atproto/atclient`: HTTP API client | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/atclient) |
43| `atproto/auth/oauth`: AT OAuth client | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/auth/oauth)|
44| `atproto/identity`: DID and handle resolution | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/identity) |
45| `atproto/syntax`: string types and parsers for identifiers | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/syntax) |
46| `atproto/lexicon`: schema validation of data | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/lexicon) |
47| `atproto/repo`: repository data structure | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/repo) |
48| `atproto/repo/mst`: Merkle Search Tree implementation | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/repo/mst) |
49| `atproto/atcrypto`: cryptographic signing and key serialization | [](https://pkg.go.dev/mod/github.com/bluesky-social/indigo/atproto/atcrypto)|
50| `go-didplc/didplc`: DID PLC implementation (external) | [](https://pkg.go.dev/mod/github.com/did-method-plc/go-didplc/didplc)|
51
52The TypeScript reference implementation, including PDS and bsky AppView services, is at [bluesky-social/atproto](https://github.com/bluesky-social/atproto). Source code for the Bluesky Social client app (for web and mobile) can be found at [bluesky-social/social-app](https://github.com/bluesky-social/social-app).
53
54## Development Quickstart
55
56First, you will need the Go toolchain installed. We develop using the latest stable version of the language.
57
58The Makefile provides wrapper commands for basic development:
59
60 make build
61 make test
62 make fmt
63 make lint
64
65Individual commands can be run like:
66
67 go run ./cmd/relay
68
69The [HACKING](./HACKING.md) file has a list of commands and packages in this repository and some other development tips.
70
71## What is atproto?
72
73_not to be confused with the [AT command set](https://en.wikipedia.org/wiki/Hayes_command_set) or [Adenosine triphosphate](https://en.wikipedia.org/wiki/Adenosine_triphosphate)_
74
75The Authenticated Transfer Protocol ("ATP" or "atproto") is a decentralized social media protocol, developed by [Bluesky Social PBC](https://bsky.social). Learn more at:
76
77- [Overview and Guides](https://atproto.com/guides/overview) 👈 Best starting point
78- [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions
79- [Protocol Specifications](https://atproto.com/specs/atp)
80- [Blogpost on self-authenticating data structures](https://bsky.social/about/blog/3-6-2022-a-self-authenticating-social-protocol)
81
82The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is `app.bsky.*`.
83
84## Contributions
85
86> While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review.
87
88**Rules:**
89
90- We may not respond to your issue or PR.
91- We may close an issue or PR without much feedback.
92- We may lock discussions or contributions if our attention is getting DDOSed.
93- We do not provide support for build issues.
94
95**Guidelines:**
96
97- Check for existing issues before filing a new one, please.
98- Open an issue and give some time for discussion before submitting a PR.
99- Issues are for bugs & feature requests related to the golang implementation of atproto and related services.
100 - For high-level discussions, please use the [Discussion Forum](https://github.com/bluesky-social/atproto/discussions).
101 - For client issues, please use the relevant [social-app](https://github.com/bluesky-social/social-app) repo.
102- Stay away from PRs that:
103 - Refactor large parts of the codebase
104 - Add entirely new features without prior discussion
105 - Change the tooling or libraries used without prior discussion
106 - Introduce new unnecessary dependencies
107
108Remember, 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.
109
110## Are you a developer interested in building on atproto?
111
112Bluesky 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.
113
114## License
115
116This project is dual-licensed under MIT and Apache 2.0 terms:
117
118- MIT license ([LICENSE-MIT](https://github.com/bluesky-social/indigo/blob/main/LICENSE-MIT) or http://opensource.org/licenses/MIT)
119- Apache License, Version 2.0, ([LICENSE-APACHE](https://github.com/bluesky-social/indigo/blob/main/LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
120
121Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
122
123Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see [the original announcement](https://bsky.social/about/blog/10-01-2025-patent-pledge).