https://github.com/christiandeange/ozone
Kotlin Multiplatform bindings for Bluesky
https://github.com/christiandeange/ozone
at-protocol bluesky bluesky-api bluesky-client kotlin-multiplatform
Last synced: 21 days ago
JSON representation
Kotlin Multiplatform bindings for Bluesky
- Host: GitHub
- URL: https://github.com/christiandeange/ozone
- Owner: christiandeange
- License: mit
- Created: 2023-03-09T03:33:19.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-22T07:41:35.000Z (22 days ago)
- Last Synced: 2025-04-22T15:08:09.231Z (21 days ago)
- Topics: at-protocol, bluesky, bluesky-api, bluesky-client, kotlin-multiplatform
- Language: Kotlin
- Homepage:
- Size: 2.85 MB
- Stars: 111
- Watchers: 2
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-atproto - Android/desktop client for Bluesky
README
 
ozone
=====### Overview
The Ozone project for the [AT Protocol](https://atproto.com/) consists of 4 components:
1. A Gradle plugin to compile AT Protocol schemas into usable Kotlin classes.
2. Multiplatform APIs for the AT Protocol spec that can be used with any compatible service, including [Bluesky Social](https://bsky.app).
- Supports Android, JVM, JavaScript, and iOS.
3. APIs to connect to the [Jetstream](https://github.com/bluesky-social/jetstream) firehose for Bluesky Social.
- Supports Android, JVM, and JavaScript.
4. Example client apps that demonstrate usage of those APIs.> **Warning**
>
> 🚧 🚧 🚧 Everything in here is very much a work-in-progress!
> The [upstream schemas](https://github.com/bluesky-social/atproto/commits/main/lexicons) are still subject to breaking
> changes and may break at any moment if used in production code. Use at your own risk!### Why "Ozone"?
O3 exists at all levels in the [ATmosphere](https://bsky.app/profile/shreyanjain.net/post/3k26nw6kwnh2e).
No relation to the moderation tools also named [Ozone](https://github.com/bluesky-social/ozone).
### Bluesky Social Bindings
Documentation is available at [ozone.christian.sh](https://ozone.christian.sh).
#### Java / Kotlin
```kotlin
// build.gradle[.kts]dependencies {
api("sh.christian.ozone:bluesky:0.3.2")
}
```#### Swift / Objective-C
In Xcode, select **File > Add Packages** and enter https://github.com/christiandeange/BlueskyAPI
### Jetstream Bindings
Documentation is available at [ozone.christian.sh](https://ozone.christian.sh/ozone/sh.christian.ozone.jetstream/index.html).
#### Java / Kotlin
```kotlin
// build.gradle[.kts]dependencies {
api("sh.christian.ozone:jetstream:0.3.2")
}
```### Gradle Plugin
In addition to shipping the lexicons that define the official Bluesky API, this project also includes a Gradle Plugin that allows you to bring your own lexicon definitions and generate any set of AT Protocol bindings from them.
```kotlin
// build.gradle[.kts]plugins {
id("sh.christian.ozone.generator") version "0.3.2"
}dependencies {
// This is where you have your schema files stored in your project.
lexicons(fileTree("lexicons") { include("**/*.json") })// You can also depend directly on the published Bluesky lexicons instead.
lexicons("sh.christian.ozone:lexicons:0.3.2")
}lexicons {
// Determines the package name of generated supporting methods. Defaults to "sh.christian.ozone".
namespace.set("com.example.myapp")// Configuration for how to handle unknown types and known values.
defaults {
// Determines whether to generate classes to encapsulate unknown types for union references. Defaults to false.
generateUnknownsForSealedTypes.set(true)// Determines whether to generate classes to encapsulate unknown values for strings. Defaults to false.
generateUnknownsForEnums.set(true)
}// Generates an additional interface for the target schemas.
// This method can be called more than once to generate multiple API interfaces.
generateApi("BlueskyApi") {
// Determines the package name of the generated API. Defaults to "sh.christian.ozone".
packageName.set("com.example.myapp")// Generates an additional class that implements this interface by sending corresponding
// XRPC requests to a provided host conforming to the AT Protocol.
// Inherits the same package name as the generated interface.
withKtorImplementation("XrpcBlueskyApi")// Determines the return type for each generated API method. Defaults to Raw.
// - Raw: the raw data type
// - Result: Result
// - Response: AtpResponse
returnType.set(ApiReturnType.Result)// Determines whether the generated methods should be marked as suspend functions.
// When generating a Ktor implementation as well, execution will block the current thread
// for non-suspending methods. Defaults to true.
suspending.set(true)
}// File path where Kotlin source files will be written to. Defaults to "/build/generated/lexicons".
outputDirectory.set(project.layout.buildDirectory.dir("out"))
}
```