Iceblock SDK
Iceblock is a library before it’s an app. The Iceblock app is one program built on it; any other app can build it in too, and then that app is a device of its own: it keeps its own keys, encrypts its own files, and talks to other devices directly, with nothing in between that can read what it stores (technical spec §3.6).
These pages are for working out the SDK with the first app that will use it: what the library can do already, what the SDK will put in front of it, and what’s still to be decided. They change as that goes back and forth.
The layers
- The core (
iceblock-core, withiceblock-nodeto run it on real networks): everything Iceblock does. It’s large, and changes with every release. What it does. - The Rust facade (
iceblock-sdk, in the iceblock organisation’s Cargo registry): a small, steady API over the core, for an app that keeps its Collections and shares them. Its shape. - The Flutter packages:
iceblock_platform, the platform parts without Rust, published; andiceblock_flutter(since r87): the facade for Dart, with the compiled library for Android and Linux inside, generated with flutter_rust_bridge as the Iceblock app’s own bridge is. Its shape.
The reference
Every call of the SDK, generated from its code at each release: what it does, what it needs (a permission an app asks the user’s Iceblock for), where it works (the app’s own network, the user’s Iceblock, or both), the release it came in, and how it’s called in Rust and in Dart, or why Dart doesn’t have it yet. Built (#791).
- /sdk/llms.txt: all of it as one Markdown page, after the llms.txt convention, for reading in one go (by an AI agent, say).
- /sdk/api.json: the same as JSON, one entry per call and per type.
How to read them
Each thing is marked with where it stands:
- Built, and released: with the release it came in (r76, say), where it’s recent.
- Gap: the core doesn’t do it yet, and it needs doing for an app.
- Planned: the facade or a package will offer it; it isn’t written yet.
- Open: still to be decided. Open questions lists them.
An app’s life, from running alone to joining someone’s Iceblock, is the place to start. Tintbench, a sample app built on the facade, shows it in code (the Rust facade). What’s coming next is at the end of the changes.
- An app's life: From running alone, through sharing with other people, to joining the user's own Iceblock.
- What the core does: The library as it is: iceblock-core's Core, and iceblock-node's Node, grouped by what an app would use them for.
- The Rust facade: iceblock-sdk: a small, steady API over the core, for an app that keeps a Collection and shares it.
- The Flutter package: iceblock_flutter: the facade for Dart, with the library compiled for Android and Linux inside. A draft.
- Open questions: What's still to be decided, with what's been decided so far.
- The first app's needs: What the first app to use the SDK asked for, and Iceblock's answer to each: fits, needs building, or needs changing.
- Changes: What was decided in each round of working out the SDK with the first app, what's built, and what's still open.