Cobalt is een open-source applicatieplatform voor Kobo e-readers dat het mogelijk maakt om diverse apps op deze apparaten te draaien. Het systeem bestaat uit een launcher, een ondertekende App Store en een runtime die elke app in een eigen, onbevoorrecht proces isoleert.
Kernpunten van het platform:
- SDK en Ontwikkeling: De SDK is geschreven in Rust en stelt ontwikkelaars in staat om apps te bouwen als statische ARM-binaries. De runtime beheert de lay-out, e-ink refreshes en navigatie. Toegang tot hardwarebronnen (zoals wifi en opslag) is beveiligd via capability-gating.
- App Store: Apps kunnen via wifi worden geïnstalleerd, bijgewerkt en verwijderd. De Store maakt gebruik van een ondertekende catalogus via GitHub om de veiligheid van de binaries te garanderen.
- Beschikbare Apps: Er is een breed scala aan apps beschikbaar, variërend van productiviteitstools (Todo, Terminal) en informatiebronnen (arXiv, Hacker News, Feeds) tot eenvoudige games (Sudoku, Tic-tac-toe).
- Installatie en Veiligheid: De initiële installatie gebeurt via USB, waarna alle verdere updates via wifi verlopen. Cobalt vervangt de bootchain niet, waardoor een herstart van het apparaat altijd terugkeert naar de standaard Kobo-lezer.
Momenteel is Cobalt uitsluitend getest en ondersteund voor de Kobo Clara BW (N365).
Cobalt: apps en een SDK voor Kobo e-readers
De installatie gebeurt eenmalig via USB. Daarna kunnen alle apps direct op het apparaat zelf worden geïnstalleerd, bijgewerkt en verwijderd via wifi. Een herstart van het apparaat brengt de gebruiker terug naar de standaard Kobo-lezer.
Hoe het werkt
Elke app is een statisch ARM-binair bestand dat als een onbevoorrecht proces draait op de standaard hardware. De App Store installeert, update en verwijdert deze apps via wifi, waarbij handtekeningen worden geverifieerd voordat een app wordt gestart.
Voorbeelden van functionaliteit:
- arXiv app: Leest de HTML-rendering die arXiv publiceert voor elk paper sinds december 2023, inclusief samenvattingen, secties, wiskundige formules en resultatentabellen, gepagineerd voor het scherm.
- Sidekick: Maakt het mogelijk om verzoeken van coding agents (zoals Claude Code) te accepteren of te weigeren, weg van het toetsenbord, via een koppeling over het lokale netwerk.
Beschikbare apps
Alle screenshots in de documentatie zijn gemaakt op een Kobo Clara BW. Store-apps worden onafhankelijk van het platform geversieerd; de overige apps worden meegeleverd met de platforminstallatie.
- Launcher: Opent geïnstalleerde apps en biedt altijd een route terug naar de Kobo-lezer.
- App Store: Installeert, update, verwijdert en herinstalleert ondertekende apps via wifi.
- arXiv: Browse door de nieuwste preprints van een vakgebied en lees de volledige tekst op het scherm.
- Sudoku: Ontworpen als Store-only app om te bewijzen dat apps geleverd kunnen worden die niet in het USB-pakket zaten.
- Morse: Verstuurt een getypte boodschap in morsecode via het frontlicht, waarbij één letter over het hele scherm wordt getoond.
- Audiobook Studio: Onderzoekt, schrijft, vertelt en speelt een origineel audioboek af.
- Gutenbird: Leest elke OPDS-bibliotheek, zoals Project Gutenberg, Standard Ebooks, Open Library of een eigen bibliotheek.
- Hacker News: Toont Top, New, Ask en Show-verhalen inclusief volledige commentaren.
- Feeds: Ontdekt de feed van een site en presenteert artikelen zonder de lay-out van de website.
- Daily Brief: Verzamelt de verhalen van de dag op de achtergrond terwijl je een andere app gebruikt.
- AI Command Center: Stelt een vraag en zet het antwoord om in een tekst die eenvoudig via touch te lezen is.
- Sidekick: Keur verzoeken van coding agents goed of af, zonder dat je achter je computer hoeft te zitten.
- Terminal: Een native shell voor het scherm met toetsen die input onmiddellijk verzenden.
- Components: Een toolkit met controls, lay-outs, typografie en statussen.
- Settings: Instellingen voor connectiviteit, hardware en platform-updates (gescheiden van de Store).
- Todo: Een permanente lijst met touch-invoer en statussen voor voltooide items.
- Tic-tac-toe: Voor twee spelers, met gedeeltelijke refreshes voor individuele cellen.
- Magnet: Localiseert de hallsensor achter de rand en rapporteert wijzigingen.
De SDK
Een app bestaat uit één Rust-bestand. Door KoboApp te implementeren en schermen declaratief te beschrijven, regelt de runtime de lay-out, de planning van e-ink refreshes, de 'Terug'-navigatie en de lifecycle.
Apps openen geen apparaatbronnen rechtstreeks, maar vragen hierom. Toegang tot het netwerk, opslag, audio, frontlight en wifi is beveiligd via capability-gating; een weigering wordt teruggestuurd als een waarde die de app kan afhandelen.
Onderdelen van de SDK:
- UI: E-ink UIText, tegels, dialogen, toetsenborden, paginering en planning voor partial refresh.
- Simulators: Browser- en runtime-simulators met lay-outdiagnostiek.
- Async werk: HTTPS, ranged downloads, annuleerbare taken en geplande wake-ups.
- State: Atoom-gebaseerde, per-app gesleutelde opslag.
- Distributie: Ondertekende statische ARMv7-binaries, gepubliceerd zodra een app-PR wordt gemerged.
Voorbeeld van implementatie
CLI commando's:
kobo new my-app
cd my-app
kobo dev
Rust code:
use kobo_sdk::{
ActionId, Context, KoboApp, ScreenBuilder,
};
#[derive(Default)]
struct Hello { taps: u32 }
impl KoboApp for Hello {
fn on_start(&mut self, ctx: &mut Context) {
self.show(ctx);
}
fn on_action(
&mut self, ctx: &mut Context, a: ActionId,
) {
if a == kobo_sdk::action_id("tap") {
self.taps += 1;
}
self.show(ctx);
}
}
impl Hello {
fn show(&self, ctx: &mut Context) {
let screen = ScreenBuilder::new("hello")
.top_bar("Hello")
.heading(format!("{} taps", self.taps))
.button("tap", "Tap me")
.build();
ctx.set_screen(screen);
}
}
fn main() {
let app = Hello::default();
let _ = kobo_sdk::run("hello", app);
}
De App Store
De Store maakt gebruik van ondertekende pakketten die worden geverifieerd vóór lancering. De Store leest een ondertekende catalogus van een vaste GitHub-release. Elk pakket bevat één ARM-executable en een ondertekend canoniek manifest. De runtime verifieert de catalogus, het pakket, het geïnstalleerde manifest en het binaire bestand voordat een app wordt uitgevoerd.
App-releases zijn onafhankelijk van platform-releases: het mergen van een app-PR bouwt het bestand voor ARM, ondertekent het en update de catalogus. Er is geen update van de Cobalt-versie of herinstallatie nodig; de app verschijnt simpelweg in de Store.
Het Cobalt-platform zelf wordt ook via wifi bijgewerkt via de Instellingen, op een kanaal dat gescheiden is van de app-catalogus. De USB-kabel is slechts één keer nodig. Installatie- en catalogus-transacties zijn recovery-safe; een onderbroken update laat de lezer terugkeren naar de vorige versie.
Installatie
Om Cobalt vanuit de broncode te installeren:
- Laad een Kobo Clara BW (N365) op en verbind deze via USB. Andere modellen worden momenteel niet ondersteund.
- Voer de volgende setup uit:
``bash git clone https://github.com/BandarLabs/Cobalt.git cd Cobalt rustup target add armv7-unknown-linux-musleabihf cargo run -p kobo-cli -- setup ``
- Start de lezer opnieuw op en open Cobalt vanuit het menu van Kobo.
- Open de Store. Vanaf dit moment komt alles via wifi binnen.
Een volledige handleiding, inclusief herstelstappen, is te vinden in docs/INSTALL.md.
Bijdragen
Het bijdragen van een app gebeurt via reguliere pull requests (PR's). Als de app werkt op een apparaat en de PR toont bewijs hiervan, wordt deze gemerged en gepubliceerd.
Proces voor bijdragen:
- Bouwen: Voeg de app toe als een workspace-pakket onder
apps/<app-id>/ en registreer deze in apps/catalog.json.
- Testen: Voeg unit- en lay-outtests toe en draai de app in de browser- en runtime-simulators.
- Verifiëren: Draai de app op een echt Clara BW-apparaat, niet alleen in de simulator.
- Indienen: Open een PR met een gif of foto's van de werkende app. Na review en merge tekent de workflow de app en verschijnt deze in de Store, zonder dat een nieuwe platform-release nodig is.
Voor het porteren naar andere Kobo-modellen is hulp welkom. Open eerst een issue om het apparaatprofiel af te stemmen. Zie docs/CONTRIBUTING_APPS.md voor details.
Veiligheid
Cobalt vervangt de bootchain van Kobo niet. Schrijfacties naar het apparaat zijn beperkt tot een exacte match van hardware en firmware. Een herstart brengt het apparaat altijd terug naar de standaardlezer.
De eerste installatie wijzigt bestanden op de partitie voor gebruikersopslag en wordt geleverd zonder garantie. Alleen het profiel voor de Clara BW is hardware-getest. Installeer Cobalt niet op andere modellen totdat er een gereviewd en hardware-getest profiel beschikbaar is.
Cobalt is een onafhankelijk project en is niet gelieerd aan Rakuten Kobo.
Cobalt: apps en een SDK voor Kobo e-readers
De installatie gebeurt eenmalig via USB. Daarna kunnen alle apps direct op het apparaat zelf worden geïnstalleerd, bijgewerkt en verwijderd via wifi. Een herstart van het apparaat brengt de gebruiker terug naar de standaard Kobo-lezer.
Hoe het werkt
Elke app is een statisch ARM-binair bestand dat als een onbevoorrecht proces draait op de standaard hardware. De App Store installeert, update en verwijdert deze apps via wifi, waarbij handtekeningen worden geverifieerd voordat een app wordt gestart.
Voorbeelden van functionaliteit:
- arXiv app: Leest de HTML-rendering die arXiv publiceert voor elk paper sinds december 2023, inclusief samenvattingen, secties, wiskundige formules en resultatentabellen, gepagineerd voor het scherm.
- Sidekick: Maakt het mogelijk om verzoeken van coding agents (zoals Claude Code) te accepteren of te weigeren, weg van het toetsenbord, via een koppeling over het lokale netwerk.
Beschikbare apps
Alle screenshots in de documentatie zijn gemaakt op een Kobo Clara BW. Store-apps worden onafhankelijk van het platform geversieerd; de overige apps worden meegeleverd met de platforminstallatie.
- Launcher: Opent geïnstalleerde apps en biedt altijd een route terug naar de Kobo-lezer.
- App Store: Installeert, update, verwijdert en herinstalleert ondertekende apps via wifi.
- arXiv: Browse door de nieuwste preprints van een vakgebied en lees de volledige tekst op het scherm.
- Sudoku: Ontworpen als Store-only app om te bewijzen dat apps geleverd kunnen worden die niet in het USB-pakket zaten.
- Morse: Verstuurt een getypte boodschap in morsecode via het frontlicht, waarbij één letter over het hele scherm wordt getoond.
- Audiobook Studio: Onderzoekt, schrijft, vertelt en speelt een origineel audioboek af.
- Gutenbird: Leest elke OPDS-bibliotheek, zoals Project Gutenberg, Standard Ebooks, Open Library of een eigen bibliotheek.
- Hacker News: Toont Top, New, Ask en Show-verhalen inclusief volledige commentaren.
- Feeds: Ontdekt de feed van een site en presenteert artikelen zonder de lay-out van de website.
- Daily Brief: Verzamelt de verhalen van de dag op de achtergrond terwijl je een andere app gebruikt.
- AI Command Center: Stelt een vraag en zet het antwoord om in een tekst die eenvoudig via touch te lezen is.
- Sidekick: Keur verzoeken van coding agents goed of af, zonder dat je achter je computer hoeft te zitten.
- Terminal: Een native shell voor het scherm met toetsen die input onmiddellijk verzenden.
- Components: Een toolkit met controls, lay-outs, typografie en statussen.
- Settings: Instellingen voor connectiviteit, hardware en platform-updates (gescheiden van de Store).
- Todo: Een permanente lijst met touch-invoer en statussen voor voltooide items.
- Tic-tac-toe: Voor twee spelers, met gedeeltelijke refreshes voor individuele cellen.
- Magnet: Localiseert de hallsensor achter de rand en rapporteert wijzigingen.
De SDK
Een app bestaat uit één Rust-bestand. Door KoboApp te implementeren en schermen declaratief te beschrijven, regelt de runtime de lay-out, de planning van e-ink refreshes, de 'Terug'-navigatie en de lifecycle.
Apps openen geen apparaatbronnen rechtstreeks, maar vragen hierom. Toegang tot het netwerk, opslag, audio, frontlight en wifi is beveiligd via capability-gating; een weigering wordt teruggestuurd als een waarde die de app kan afhandelen.
Onderdelen van de SDK:
- UI: E-ink UIText, tegels, dialogen, toetsenborden, paginering en planning voor partial refresh.
- Simulators: Browser- en runtime-simulators met lay-outdiagnostiek.
- Async werk: HTTPS, ranged downloads, annuleerbare taken en geplande wake-ups.
- State: Atoom-gebaseerde, per-app gesleutelde opslag.
- Distributie: Ondertekende statische ARMv7-binaries, gepubliceerd zodra een app-PR wordt gemerged.
Voorbeeld van implementatie
CLI commando's:
kobo new my-app
cd my-app
kobo dev
Rust code:
use kobo_sdk::{
ActionId, Context, KoboApp, ScreenBuilder,
};
#[derive(Default)]
struct Hello { taps: u32 }
impl KoboApp for Hello {
fn on_start(&mut self, ctx: &mut Context) {
self.show(ctx);
}
fn on_action(
&mut self, ctx: &mut Context, a: ActionId,
) {
if a == kobo_sdk::action_id("tap") {
self.taps += 1;
}
self.show(ctx);
}
}
impl Hello {
fn show(&self, ctx: &mut Context) {
let screen = ScreenBuilder::new("hello")
.top_bar("Hello")
.heading(format!("{} taps", self.taps))
.button("tap", "Tap me")
.build();
ctx.set_screen(screen);
}
}
fn main() {
let app = Hello::default();
let _ = kobo_sdk::run("hello", app);
}
De App Store
De Store maakt gebruik van ondertekende pakketten die worden geverifieerd vóór lancering. De Store leest een ondertekende catalogus van een vaste GitHub-release. Elk pakket bevat één ARM-executable en een ondertekend canoniek manifest. De runtime verifieert de catalogus, het pakket, het geïnstalleerde manifest en het binaire bestand voordat een app wordt uitgevoerd.
App-releases zijn onafhankelijk van platform-releases: het mergen van een app-PR bouwt het bestand voor ARM, ondertekent het en update de catalogus. Er is geen update van de Cobalt-versie of herinstallatie nodig; de app verschijnt simpelweg in de Store.
Het Cobalt-platform zelf wordt ook via wifi bijgewerkt via de Instellingen, op een kanaal dat gescheiden is van de app-catalogus. De USB-kabel is slechts één keer nodig. Installatie- en catalogus-transacties zijn recovery-safe; een onderbroken update laat de lezer terugkeren naar de vorige versie.
Installatie
Om Cobalt vanuit de broncode te installeren:
- Laad een Kobo Clara BW (N365) op en verbind deze via USB. Andere modellen worden momenteel niet ondersteund.
- Voer de volgende setup uit:
``bash git clone https://github.com/BandarLabs/Cobalt.git cd Cobalt rustup target add armv7-unknown-linux-musleabihf cargo run -p kobo-cli -- setup ``
- Start de lezer opnieuw op en open Cobalt vanuit het menu van Kobo.
- Open de Store. Vanaf dit moment komt alles via wifi binnen.
Een volledige handleiding, inclusief herstelstappen, is te vinden in docs/INSTALL.md.
Bijdragen
Het bijdragen van een app gebeurt via reguliere pull requests (PR's). Als de app werkt op een apparaat en de PR toont bewijs hiervan, wordt deze gemerged en gepubliceerd.
Proces voor bijdragen:
- Bouwen: Voeg de app toe als een workspace-pakket onder
apps/<app-id>/ en registreer deze in apps/catalog.json.
- Testen: Voeg unit- en lay-outtests toe en draai de app in de browser- en runtime-simulators.
- Verifiëren: Draai de app op een echt Clara BW-apparaat, niet alleen in de simulator.
- Indienen: Open een PR met een gif of foto's van de werkende app. Na review en merge tekent de workflow de app en verschijnt deze in de Store, zonder dat een nieuwe platform-release nodig is.
Voor het porteren naar andere Kobo-modellen is hulp welkom. Open eerst een issue om het apparaatprofiel af te stemmen. Zie docs/CONTRIBUTING_APPS.md voor details.
Veiligheid
Cobalt vervangt de bootchain van Kobo niet. Schrijfacties naar het apparaat zijn beperkt tot een exacte match van hardware en firmware. Een herstart brengt het apparaat altijd terug naar de standaardlezer.
De eerste installatie wijzigt bestanden op de partitie voor gebruikersopslag en wordt geleverd zonder garantie. Alleen het profiel voor de Clara BW is hardware-getest. Installeer Cobalt niet op andere modellen totdat er een gereviewd en hardware-getest profiel beschikbaar is.
Cobalt is een onafhankelijk project en is niet gelieerd aan Rakuten Kobo.