Kobo can run apps now

Hacker News Top Tools

Summary

Cobalt is an open-source application platform for Kobo e-readers that enables running apps with a launcher, signed App Store, and Rust SDK.

No content available
Original Article
View Cached Full Text

Cached at: 08/21/26, 07:28 PM

# Cobalt: apps and an SDK for Kobo e-readers Source: [https://bandarlabs.github.io/Cobalt/](https://bandarlabs.github.io/Cobalt/) ## Your Kobo can run apps now\. Cobalt is an open\-source application platform for Kobo e\-readers: a launcher, a signed App Store, a Rust SDK, and a runtime that keeps every app in its own unprivileged process\. Install it once over USB\. Every app after that installs, updates and removes on the reader itself, over Wi\-Fi\. A reboot returns to the stock Kobo reader\. ![The Cobalt launcher on a Kobo Clara BW showing Settings, App Store, Terminal, AI Chat, Audiobooks, Components, Daily Brief, Feeds and Gutenbird](https://bandarlabs.github.io/Cobalt/media/site/cobalt-launcher-kobo-clara-bw.jpg)The launcher on a Kobo Clara BW\. Not affiliated with Rakuten Kobo [![A Kobo Clara BW running Audiobook Studio, Gutenbird, Terminal, Hacker News, Sidekick and the App Store, then installing, playing, removing and reinstalling Sudoku over Wi-Fi](https://bandarlabs.github.io/Cobalt/tour.gif)](https://bandarlabs.github.io/Cobalt/cobalt-tour.mp4)Recorded on\-device at 3× speed\.[Watch as video\.](https://bandarlabs.github.io/Cobalt/cobalt-tour.mp4)## Running on a Kobo\. Every app is a static ARM binary running as its own unprivileged process on stock hardware\. The App Store installs, updates and removes them over Wi\-Fi, with signatures verified before anything launches\. ## arXiv papers and coding agents, on the panel\. These are photographs of the device, not simulator captures\. The arXiv app reads the HTML rendering arXiv publishes for every paper since December 2023: abstracts, sections, math and result tables, paginated for the panel\. Apps ## The apps\. Every screenshot below is a capture from a Kobo Clara BW\. Store apps version independently of the platform; the rest ship with the platform install\. [![Cobalt launcher app grid on e-ink](https://bandarlabs.github.io/Cobalt/media/site/apps/launcher.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/launcher/README.md) ### [Launcher](https://github.com/BandarLabs/Cobalt/blob/main/examples/launcher/README.md) Opens installed apps and always keeps a route back to the Kobo reader\. [![Cobalt App Store catalog listing installed and available apps](https://bandarlabs.github.io/Cobalt/media/site/apps/store.png)](https://github.com/BandarLabs/Cobalt/blob/main/docs/APP_STORE.md) ### [App Store](https://github.com/BandarLabs/Cobalt/blob/main/docs/APP_STORE.md) Installs, updates, removes and reinstalls signed apps over Wi\-Fi\. [![Newest machine learning preprints listed in the arXiv app on a Kobo](https://bandarlabs.github.io/Cobalt/media/site/apps/arxiv.png)](https://github.com/BandarLabs/Cobalt/tree/main/apps/arxiv) ### [arXiv](https://github.com/BandarLabs/Cobalt/tree/main/apps/arxiv) Browses a subject's newest preprints and reads the full text on the panel\. [![A complete 81-cell Sudoku game on a Kobo Clara BW](https://bandarlabs.github.io/Cobalt/media/site/apps/sudoku.png)](https://github.com/BandarLabs/Cobalt/tree/main/apps/sudoku) ### [Sudoku](https://github.com/BandarLabs/Cobalt/tree/main/apps/sudoku) Store\-only by design: installing it proves delivery of an app the USB package never contained\. [![The letter S filling the Kobo panel while the front light sends it in Morse](https://bandarlabs.github.io/Cobalt/media/site/apps/morse.png)](https://github.com/BandarLabs/Cobalt/tree/main/apps/morse) ### [Morse](https://github.com/BandarLabs/Cobalt/tree/main/apps/morse) Sends a typed message in Morse on the front light, one letter across the whole panel\. [![A shelf of book covers from an OPDS catalogue on a Kobo](https://bandarlabs.github.io/Cobalt/media/site/apps/gutenbird.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/gutenbird/README.md) ### [Gutenbird](https://github.com/BandarLabs/Cobalt/blob/main/examples/gutenbird/README.md) Reads any OPDS library: Project Gutenberg, Standard Ebooks, Open Library, or yours\. [![A ranked list of Hacker News stories on a Kobo e-reader](https://bandarlabs.github.io/Cobalt/media/site/apps/hackernews.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/hn/README.md) ### [Hacker News](https://github.com/BandarLabs/Cobalt/blob/main/examples/hn/README.md) Top, New, Ask and Show stories with complete comment threads\. [![Subscribed feeds and articles in the Feeds app](https://bandarlabs.github.io/Cobalt/media/site/apps/feeds.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/rss/README.md) ### [Feeds](https://github.com/BandarLabs/Cobalt/blob/main/examples/rss/README.md) Discovers a site's feed and presents its articles without the site's layout\. [![A numbered daily news brief on e-ink](https://bandarlabs.github.io/Cobalt/media/site/apps/brief.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/brief/README.md) ### [Daily Brief](https://github.com/BandarLabs/Cobalt/blob/main/examples/brief/README.md) Collects the day's stories in the background while you use another app\. [![A coding agent request with tappable responses in Sidekick](https://bandarlabs.github.io/Cobalt/media/site/apps/sidekick.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/sidekick/README.md) ### [Sidekick](https://github.com/BandarLabs/Cobalt/blob/main/examples/sidekick/README.md) Approve or deny requests from coding agents, away from the keyboard\. [![A shell and touch keyboard on the Kobo display](https://bandarlabs.github.io/Cobalt/media/site/apps/terminal.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/terminal/README.md) ### [Terminal](https://github.com/BandarLabs/Cobalt/blob/main/examples/terminal/README.md) A panel\-native shell with keys that send input immediately\. [![Cobalt typography and UI components on e-ink](https://bandarlabs.github.io/Cobalt/media/site/apps/components.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/gallery/README.md) ### [Components](https://github.com/BandarLabs/Cobalt/blob/main/examples/gallery/README.md) The UI toolkit's controls, layouts, typography and states, on the panel\. [![Battery status and hardware facts in Settings](https://bandarlabs.github.io/Cobalt/media/site/apps/settings.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/settings/README.md) ### [Settings](https://github.com/BandarLabs/Cobalt/blob/main/examples/settings/README.md) Connectivity, hardware, and platform updates, kept separate from Store\. [![A persistent to-do list with completed items](https://bandarlabs.github.io/Cobalt/media/site/apps/todo.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/todo/README.md) ### [Todo](https://github.com/BandarLabs/Cobalt/blob/main/examples/todo/README.md) A persistent list with touch entry and completed\-item states\. [![A completed game of tic-tac-toe on e-ink](https://bandarlabs.github.io/Cobalt/media/site/apps/tictactoe.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/tictactoe/README.md) ### [Tic\-tac\-toe](https://github.com/BandarLabs/Cobalt/blob/main/examples/tictactoe/README.md) Two players, partial refreshes for individual cells\. [![The Kobo hall sensor responding to a magnet](https://bandarlabs.github.io/Cobalt/media/site/apps/magnet.png)](https://github.com/BandarLabs/Cobalt/blob/main/examples/magnet/README.md) ### [Magnet](https://github.com/BandarLabs/Cobalt/blob/main/examples/magnet/README.md) Locates the hall sensor behind the bezel and reports its changes\. The SDK ## An app is one Rust file\. Implement`KoboApp`, describe screens declaratively, and the runtime handles layout, e\-ink refresh planning, Back navigation and lifecycle\. Apps don't open device resources; they ask\. Network, storage, audio, frontlight and Wi\-Fi are capability\-gated, and a refusal comes back as a value the app can handle\. E\-ink UIText, tiles, dialogs, keyboards, pagination, partial refresh planningSimulatorsBrowser and runtime simulators with layout diagnosticsAsync workHTTPS, ranged downloads, cancellable tasks, scheduled wakesStateAtomic per\-app keyed storageShippingSigned static ARMv7 binaries, published when an app PR merges``` kobo new my-app cd my-app kobo dev ``` [Read the SDK docs](https://bandarlabs.github.io/Cobalt/sdk.html) ``` 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); } ``` The Store ## Signed packages, verified before launch\. Store reads a signed catalog from a fixed GitHub release\. Each package holds one ARM executable and a signed canonical manifest\. The runtime verifies the catalog, the package, the installed manifest and the binary before an app runs\. App releases are independent of platform releases: merging an app PR builds it for ARM, signs it, and updates the catalog\. No Cobalt version bump, no reinstall\. The app simply appears in Store\. The Cobalt platform itself also updates over Wi\-Fi, through Settings, on a channel separate from the app catalog\. The USB cable is only ever needed once\. Install and catalog transactions are recovery\-safe; an interrupted update leaves the reader with the version it had\. [Publish your own app →](https://github.com/BandarLabs/Cobalt/blob/main/docs/CONTRIBUTING_APPS.md) ![The Cobalt App Store installing an app over Wi-Fi on a Kobo Clara BW](https://bandarlabs.github.io/Cobalt/media/store-demo.gif)Sudoku arriving over Wi\-Fi\. Install ## Installing from source\. 1. **Charge a Kobo Clara BW \(N365\)**and connect it over USB\. Other models are refused, not guessed at\. 2. **Run the setup:** ``` git clone https://github.com/BandarLabs/Cobalt.git cd Cobalt rustup target add armv7-unknown-linux-musleabihf cargo run -p kobo-cli -- setup ``` 1. **Restart the reader**and open**Cobalt**from Kobo's menu\. 2. **Open Store\.**Everything from here on arrives over Wi\-Fi\. The complete walkthrough, including recovery steps, is in[docs/INSTALL\.md](https://github.com/BandarLabs/Cobalt/blob/main/docs/INSTALL.md)\. Contributing ## Contribute an app\. App contributions are regular pull requests\. If it runs on your device and the PR shows it running, it gets merged and published\. 1. **Build it\.**Add the app as a workspace package under`apps/<app\-id\>/`and register it in`apps/catalog\.json`\. 2. **Test it\.**Add unit and layout tests, and run it in the browser and runtime simulators\. 3. **Run it on your own device\.**A real Clara BW, not just the simulator\. 4. **Open a PR with a gif or photos of it running\.**Once reviewed and merged, the publish workflow signs it and it appears in Store\. No platform release needed\. Own a different Kobo model?[Porting](https://github.com/BandarLabs/Cobalt/blob/main/docs/PORTING.md)is welcome too; open an issue first so the device profile can be agreed\. Full details in[docs/CONTRIBUTING\_APPS\.md](https://github.com/BandarLabs/Cobalt/blob/main/docs/CONTRIBUTING_APPS.md)\. Safety ## Device support and safety\. Cobalt does not replace Kobo's boot chain\. Device writes are gated on an exact hardware and firmware match, and a reboot returns to the stock reader\. The first installation does modify files on the user storage partition, and it is provided without warranty\. Only the Clara BW profile has been hardware\-tested\. Don't install on another model until it has a[reviewed, hardware\-tested profile](https://github.com/BandarLabs/Cobalt/blob/main/docs/PORTING.md)\. Cobalt is an independent project, not affiliated with Rakuten Kobo\.

Similar Articles

Cobalt

Product Hunt

Cobalt enables Kobo e-readers to run apps, as announced on Product Hunt.

KOReader

Hacker News Top

KOReader is an open-source document viewer for E Ink devices that supports a wide range of file formats including EPUB, PDF, and MOBI, and runs on Kindle, Kobo, PocketBook, Android, and desktop Linux.

The Best E-Readers of 2026: Kobo, Kindle

Wired

WIRED's guide to the best e-readers of 2026 compares top models from Kobo, Kindle, and Boox, highlighting features like color screens, page-turn buttons, and Android-based experiences.