projects.dhall
1-- URL type definition
2let URL : Type =
3 { scheme : Text
4 , host : Text
5 , port : Optional Natural
6 , path : Optional Text
7 , query : Optional Text
8 , fragment : Optional Text
9 }
10
11let URLDefaults =
12 { port = None Natural
13 , path = None Text
14 , query = None Text
15 , fragment = None Text
16 }
17
18-- Helper function to create URLs with defaults
19let makeURL =
20 \(args : { scheme : Text, host : Text }) ->
21 URLDefaults // args
22
23-- Helper function to create HTTPS URLs
24let https =
25 \(host : Text) ->
26 makeURL { scheme = "https", host = host }
27
28-- Helper function to create HTTP URLs
29let http =
30 \(host : Text) ->
31 makeURL { scheme = "http", host = host }
32
33-- Simple URL type for basic use cases (just validated text)
34let SimpleURL : Type = Text
35
36-- Project categories and languages
37let Category =
38 < App
39 | SDK
40 | Library
41 | Tool
42 | Server
43 | Bot
44 | FeedGenerator
45 | Platform
46 | CLI
47 | GitHubAction
48 | DataExplorer
49 | NetworkDashboard
50 | AccountManagement
51 | FeedUtility
52 | StarterKit
53 >
54
55let Language =
56 < TypeScript
57 | Go
58 | Dart
59 | Python
60 | Swift
61 | Kotlin
62 | Rust
63 | Java
64 | PHP
65 | Ruby
66 | Elixir
67 | Shell
68 | JavaScript
69 | C
70 | CSharp
71 >
72
73-- Project type definition
74let Project : Type =
75 { name : Text
76 , description : Text
77 , category : Category
78 , languages : List Language
79 , repoURL : Optional SimpleURL
80 , appURL : Optional SimpleURL
81 , maintainers : Optional (List Text)
82 }
83
84-- Comprehensive AT Protocol ecosystem data
85let atprotoProjects : List Project =
86 -- Official SDKs and Libraries
87 [ { name = "@atproto/api"
88 , description = "The official TypeScript/JavaScript SDK. Powers the Bluesky app with APIs, session management, full type validation, and RichText library."
89 , category = Category.SDK
90 , languages = [ Language.TypeScript, Language.JavaScript ]
91 , repoURL = Some "https://github.com/bluesky-social/atproto/tree/main/packages/api"
92 , appURL = None SimpleURL
93 , maintainers = Some [ "Bluesky Social PBC" ]
94 }
95 , { name = "indigo"
96 , description = "The official Go implementation used for core backend services like PDS and Relays."
97 , category = Category.SDK
98 , languages = [ Language.Go ]
99 , repoURL = Some "https://github.com/bluesky-social/indigo"
100 , appURL = None SimpleURL
101 , maintainers = Some [ "Bluesky Social PBC" ]
102 }
103
104 -- Community SDKs
105 , { name = "atproto"
106 , description = "A comprehensive, high-quality Python SDK with modular design for client, firehose, codegen, identity, and more. The de facto standard for Python."
107 , category = Category.SDK
108 , languages = [ Language.Python ]
109 , repoURL = Some "https://github.com/MarshalX/atproto"
110 , appURL = Some "https://atproto.blue"
111 , maintainers = Some [ "MarshalX" ]
112 }
113 , { name = "atproto.dart"
114 , description = "A suite of packages for Dart & Flutter development, providing type-safe API wrappers for ATProto and Bluesky, and text utilities."
115 , category = Category.SDK
116 , languages = [ Language.Dart ]
117 , repoURL = Some "https://github.com/myConsciousness/atproto.dart"
118 , appURL = Some "https://atprotodart.com"
119 , maintainers = Some [ "myConsciousness" ]
120 }
121 , { name = "atproto-rs"
122 , description = "A suite of libraries, tools, and daemons for building ATProto services in Rust."
123 , category = Category.SDK
124 , languages = [ Language.Rust ]
125 , repoURL = Some "https://github.com/ngerakines/atproto-rs"
126 , appURL = None SimpleURL
127 , maintainers = Some [ "ngerakines" ]
128 }
129 , { name = "bsky-rs"
130 , description = "An ATProto (Bluesky) API implementation in Rust."
131 , category = Category.SDK
132 , languages = [ Language.Rust ]
133 , repoURL = Some "https://github.com/sizumita/bsky-rs"
134 , appURL = None SimpleURL
135 , maintainers = Some [ "sizumita" ]
136 }
137 , { name = "bsky4j"
138 , description = "A community-maintained client library for ATProtocol and Bluesky in Java."
139 , category = Category.SDK
140 , languages = [ Language.Java ]
141 , repoURL = Some "https://github.com/uakihir0/bsky4j"
142 , appURL = None SimpleURL
143 , maintainers = Some [ "uakihir0" ]
144 }
145 , { name = "Atproto.Net"
146 , description = "A third-party C# library for interacting with the AT Protocol."
147 , category = Category.SDK
148 , languages = [ Language.CSharp ]
149 , repoURL = Some "https://github.com/RoccoDev/Atproto.Net"
150 , appURL = None SimpleURL
151 , maintainers = Some [ "RoccoDev" ]
152 }
153 , { name = "swiftsky"
154 , description = "An unofficial client library for Bluesky/ATProto written in Swift, suitable for iOS/macOS development."
155 , category = Category.SDK
156 , languages = [ Language.Swift ]
157 , repoURL = Some "https://github.com/rmcan/swiftsky"
158 , appURL = None SimpleURL
159 , maintainers = Some [ "rmcan" ]
160 }
161 , { name = "atproto-elixir"
162 , description = "An implementation of the ATProtocol client specification in Elixir."
163 , category = Category.SDK
164 , languages = [ Language.Elixir ]
165 , repoURL = Some "https://github.com/mschae/atproto-elixir"
166 , appURL = None SimpleURL
167 , maintainers = Some [ "mschae" ]
168 }
169
170 -- Applications
171 , { name = "Bluesky"
172 , description = "The official flagship application for the AT Protocol, serving as a social network and proof-of-concept."
173 , category = Category.App
174 , languages = [ Language.TypeScript ]
175 , repoURL = Some "https://github.com/bluesky-social/social-app"
176 , appURL = Some "https://bsky.app"
177 , maintainers = Some [ "Bluesky Social PBC" ]
178 }
179 , { name = "Graysky"
180 , description = "A third-party client for Bluesky, built with React Native."
181 , category = Category.App
182 , languages = [ Language.TypeScript ]
183 , repoURL = Some "https://github.com/mozzius/graysky"
184 , appURL = Some "https://graysky.app/"
185 , maintainers = Some [ "mozzius" ]
186 }
187 , { name = "Tangled"
188 , description = "A git collaboration platform using ATProto for identity and social features, offering an alternative to GitHub."
189 , category = Category.Platform
190 , languages = [ Language.TypeScript ]
191 , repoURL = Some "https://tangled.sh/atproto/tangled"
192 , appURL = Some "https://tangled.sh"
193 , maintainers = None (List Text)
194 }
195 , { name = "Whitewind"
196 , description = "A blog service that allows users to publish Markdown articles using a custom lexicon."
197 , category = Category.Platform
198 , languages = [ Language.TypeScript ]
199 , repoURL = Some "https://github.com/whtwnd/whitewind-blog"
200 , appURL = Some "https://whtwnd.com"
201 , maintainers = None (List Text)
202 }
203 , { name = "Smoke Signal"
204 , description = "A platform for creating, discovering, and RSVPing to events, built with a community lexicon."
205 , category = Category.Platform
206 , languages = [ Language.TypeScript ]
207 , repoURL = Some "https://github.com/SmokeSignal-Events/lexicon"
208 , appURL = Some "https://smokesignal.events"
209 , maintainers = None (List Text)
210 }
211 , { name = "Frontpage"
212 , description = "A link aggregator and discussion platform, similar in concept to Reddit or Hacker News."
213 , category = Category.Platform
214 , languages = [ Language.TypeScript ]
215 , repoURL = Some "https://github.com/likeandscribe/frontpage"
216 , appURL = Some "https://frontpage.fyi"
217 , maintainers = None (List Text)
218 }
219 , { name = "Skylights"
220 , description = "A specialized social app for writing and sharing book reviews."
221 , category = Category.App
222 , languages = [ Language.TypeScript ]
223 , repoURL = Some "https://github.com/Gregoor/skylights"
224 , appURL = Some "https://skylights.my"
225 , maintainers = Some [ "Gregoor" ]
226 }
227 , { name = "Picosky"
228 , description = "An ATProto-native chatting application with its own web client and appview."
229 , category = Category.App
230 , languages = [ Language.TypeScript ]
231 , repoURL = Some "https://github.com/psky-atp"
232 , appURL = Some "https://psky.social"
233 , maintainers = None (List Text)
234 }
235 , { name = "PinkSea"
236 , description = "An 'Oekaki' (drawing) BBS that allows users to create and share art on the AT Protocol."
237 , category = Category.App
238 , languages = [ Language.TypeScript ]
239 , repoURL = Some "https://github.com/shinolabs/PinkSea"
240 , appURL = Some "https://pinksea.art"
241 , maintainers = None (List Text)
242 }
243 , { name = "LinkAT Blue"
244 , description = "A 'link-in-bio' service that allows users to create a personal landing page."
245 , category = Category.Tool
246 , languages = [ Language.TypeScript ]
247 , repoURL = Some "https://github.com/mkizka/linkat"
248 , appURL = Some "https://linkat.blue"
249 , maintainers = Some [ "mkizka" ]
250 }
251 , { name = "recipe.exchange"
252 , description = "An application for sharing and discovering cooking recipes."
253 , category = Category.App
254 , languages = [ Language.TypeScript ]
255 , repoURL = Some "https://recipe.exchange/lexicons"
256 , appURL = Some "https://recipe.exchange"
257 , maintainers = None (List Text)
258 }
259
260 -- Developer Tools and Utilities
261 , { name = "PDSls"
262 , description = "A powerful tool to browse the raw records in any PDS. Allows authenticated users to create/edit records."
263 , category = Category.DataExplorer
264 , languages = [ Language.TypeScript ]
265 , repoURL = None SimpleURL
266 , appURL = Some "https://pdsls.dev"
267 , maintainers = None (List Text)
268 }
269 , { name = "ATProto Browser"
270 , description = "A user-friendly browser for AT URIs, DIDs, handles, and Lexicons, with rich previews for common record types."
271 , category = Category.DataExplorer
272 , languages = [ Language.TypeScript ]
273 , repoURL = None SimpleURL
274 , appURL = Some "https://atproto-browser.vercel.app"
275 , maintainers = None (List Text)
276 }
277 , { name = "atp.tools"
278 , description = "A multi-purpose dashboard to browse repo data, view the live firehose, and check network statistics."
279 , category = Category.NetworkDashboard
280 , languages = [ Language.TypeScript ]
281 , repoURL = None SimpleURL
282 , appURL = Some "https://atp.tools"
283 , maintainers = None (List Text)
284 }
285 , { name = "goat"
286 , description = "A Go-based CLI tool from the indigo repo used to publish custom Lexicon schemas to a PDS."
287 , category = Category.CLI
288 , languages = [ Language.Go ]
289 , repoURL = Some "https://github.com/bluesky-social/indigo/tree/main/cmd/goat"
290 , appURL = None SimpleURL
291 , maintainers = Some [ "Bluesky Social PBC" ]
292 }
293 , { name = "ATFile"
294 , description = "A command-line tool and associated lexicon for uploading and managing arbitrary files in a user's PDS."
295 , category = Category.CLI
296 , languages = [ Language.TypeScript ]
297 , repoURL = Some "https://github.com/electricduck/atfile"
298 , appURL = None SimpleURL
299 , maintainers = Some [ "electricduck" ]
300 }
301 , { name = "Bluesky Post Action"
302 , description = "A GitHub Action that allows workflows to send a post to Bluesky, useful for automated notifications."
303 , category = Category.GitHubAction
304 , languages = [ Language.JavaScript ]
305 , repoURL = Some "https://github.com/marketplace/actions/send-bluesky-post"
306 , appURL = None SimpleURL
307 , maintainers = None (List Text)
308 }
309 , { name = "ATProto Feed Generator"
310 , description = "A starter kit for building and publishing custom algorithmic feeds on the AT Protocol."
311 , category = Category.StarterKit
312 , languages = [ Language.TypeScript ]
313 , repoURL = Some "https://github.com/bluesky-social/feed-generator"
314 , appURL = None SimpleURL
315 , maintainers = Some [ "Bluesky Social PBC" ]
316 }
317 , { name = "cleanfollow"
318 , description = "A web tool to select and unfollow inactive or blocked accounts."
319 , category = Category.AccountManagement
320 , languages = [ Language.TypeScript ]
321 , repoURL = None SimpleURL
322 , appURL = Some "https://cleanfollow-bsky.pages.dev"
323 , maintainers = None (List Text)
324 }
325 , { name = "Blue Mirage"
326 , description = "A tool for copying the follow list of another user on Bluesky."
327 , category = Category.AccountManagement
328 , languages = [ Language.TypeScript ]
329 , repoURL = None SimpleURL
330 , appURL = Some "https://jiftechnify.github.io/blue-mirage/"
331 , maintainers = Some [ "jiftechnify" ]
332 }
333 , { name = "Bluestream"
334 , description = "An RSS/JSON/CSV feed generator for Bluesky user profiles."
335 , category = Category.FeedUtility
336 , languages = [ Language.TypeScript ]
337 , repoURL = None SimpleURL
338 , appURL = Some "https://bluestream.deno.dev"
339 , maintainers = None (List Text)
340 }
341
342 -- Bridge Tools
343 , { name = "SkyBridge"
344 , description = "A bridge that connects the AT Protocol to the Fediverse (Mastodon, Pleroma, etc.)."
345 , category = Category.Tool
346 , languages = [ Language.Go ]
347 , repoURL = Some "https://github.com/rmm5t/skybridge"
348 , appURL = None SimpleURL
349 , maintainers = Some [ "rmm5t" ]
350 }
351 , { name = "looksky"
352 , description = "A tool to search for posts on Bluesky."
353 , category = Category.Tool
354 , languages = [ Language.Rust ]
355 , repoURL = Some "https://github.com/junkato/looksky"
356 , appURL = Some "https://looksky.pages.dev/"
357 , maintainers = Some [ "junkato" ]
358 }
359 , { name = "Skyfeed"
360 , description = "A powerful custom feed builder and client for Bluesky."
361 , category = Category.Platform
362 , languages = [ Language.TypeScript ]
363 , repoURL = Some "https://github.com/RedSolver/skyfeed"
364 , appURL = Some "https://skyfeed.app/"
365 , maintainers = Some [ "RedSolver" ]
366 }
367
368 -- Bot Frameworks
369 , { name = "bsky.bot"
370 , description = "A framework for creating Bluesky bots."
371 , category = Category.Library
372 , languages = [ Language.Python ]
373 , repoURL = Some "https://github.com/quinncasey/bsky.bot"
374 , appURL = None SimpleURL
375 , maintainers = Some [ "quinncasey" ]
376 }
377 ]
378
379in atprotoProjects