BandarLabs/Cobalt

An SDK for building real apps for your Kobo eInk reader

334

stars

324

commits

Rust

primary language

Sep 4, 2026

updated

bandarlabs.github.io/Cobalt/
eink
epub
epub-reader
ereader
kobo
kobo-ereader
opds-client
rss-reader
sdk

README

Cobalt

Apps and an SDK for Kobo e-readers.

CI Publish apps Latest release License

Cobalt is an open-source application platform for Kobo. It provides a launcher, an App Store, a Rust SDK, a runtime with capability isolation, and a Clara BW simulator.

After one USB installation, users can install, update, and remove signed apps over Wi-Fi. App releases are independent from Cobalt platform releases, so a new app can appear in Store without reinstalling or updating Cobalt.

A real Kobo Clara BW running Audiobook Studio, Gutenbird, Terminal, Components, Hacker News, Sidekick, AI Command Center, Feeds, Tic-tac-toe and audio playback, followed by the full App Store catalog and Sudoku being installed, played, removed and reinstalled over Wi-Fi
Recorded on a Kobo Clara BW at 3× speed: apps, Store discovery, and the complete Sudoku install lifecycle.

[!IMPORTANT] The Kobo Clara BW N365 (device code 391), Kobo Elipsa 2E N605 (device code 389), Kobo Clara HD N249 (device code 376), Kobo Libra 2 N418 (device code 388), Kobo Clara Colour N367 (device code 393), and Kobo Libra Colour N428 (device code 390) are fully hardware-tested on the exact firmware and kernel versions in the support matrix. See the device support matrix before installing. The 2025 Kobo Clara BW P365 (device code 395) hardware refresh is also supported: its measured panel, touch, firmware, and kernel facts match the attended-tested N365 Clara BW. It is an independent project and is not affiliated with Rakuten Kobo.

[!TIP] Own an unsupported Kobo? Help test its port. No coding is required. Join an existing device thread or create a new one with your exact model, firmware, and whether you can run attended tests. Start with read-only checks; run panel tests only against the commit named by a maintainer. See Contributing.

Features

  • Signed Wi-Fi app installation, updates, and removal
  • Shareable app pages with encrypted QR or pairing-code installation
  • Separate Settings-based updates for the Cobalt platform
  • Apps run as separate unprivileged processes
  • Per-app capability checks for network, storage, audio, frontlight, and other device services
  • Declarative e-ink UI toolkit and browser simulator
  • Profile-driven full and partial refresh planning for supported panels
  • Static ARMv7 binaries with no device-side package manager
  • Recovery-safe app and catalog transactions

How it differs

NickelMenu adds actions to Kobo's stock menu. KOReader and Plato are reading apps. Cobalt is a platform for building and installing apps.

Cobalt handles the common parts: screens, app lifecycle, drawing to the e-ink display, partial refreshes, touch input, device access, process isolation, testing, and signed installs. App authors can focus on their app instead of building those parts again. See the FAQ for a fuller comparison.

Apps

Every screenshot below is a real capture from a Kobo Clara BW. Store manages the installable applications; Settings and Terminal remain protected system utilities.

Cobalt launcher showing a grid of applications
Launcher
Opens installed apps and always keeps a route back to the Kobo reader.
Cobalt App Store listing installed and available applications
App Store
Browses signed apps and installs, updates, removes, and reinstalls them over Wi-Fi.
A complete 81-cell Sudoku game on a Kobo Clara BW
Sudoku
A Store-only touch game that also proves delivery of an app absent from the platform package.
An audiobook player with cover art, position and transport controls
Audiobook Studio
Researches, writes, narrates, and plays an original audiobook.
A shelf of book covers from an OPDS catalogue
Gutenbird
Reads any OPDS library: Project Gutenberg, Standard Ebooks, Open Library, or one you add.
A ranked list of Hacker News stories
Hacker News
Top, New, Ask, and Show stories with complete comment threads.
A list of subscribed feeds and articles
Feeds
Discovers a site's feed and presents its articles without the browser layout.
A numbered daily news brief
Daily Brief
Collects the day's stories while the reader is using another app.
An AI answer displayed as readable text on the panel
AI Command Center
Asks a question and turns the answer into touch-friendly reading.
A coding agent request with tappable responses
Sidekick
Lets a reader approve or deny requests from coding agents.
A shell and touch keyboard on the Kobo display
Terminal
A panel-native shell with keys that send input immediately.
Cobalt typography and UI components
Components
Shows the UI toolkit's controls, layouts, typography, and states.
Battery status and hardware facts
Settings
Manages connectivity and hardware, and keeps platform updates separate from Store.
A persistent to-do list with completed items
Todo
A persistent list with touch entry and completed-item states.
A completed game of tic-tac-toe
Tic-tac-toe
A two-player touch game using partial refreshes for individual cells.
The newest machine learning preprints on a Kobo Clara BW, newest first
arXiv Reader
Browses and searches preprints, keeps them for offline reading, and sets their mathematics as type.
The letter S filling the panel while the beacon sends it
Morse
Sends a typed message on the front light, a letter at a time, drawn across the panel as it goes.
The Kobo hall sensor responding to a magnet
Magnet
Locates the hall sensor behind the bezel and reports its changes.

Suggest an app

What would you use on your Kobo? It could be a game, a reading tool, a home-automation control, or a replacement for an Android or iOS app. Add it to the app request thread.

Install

Install Rust, add the ARM target and connect a charged, fully supported reader over USB:

git clone https://github.com/BandarLabs/Cobalt.git
cd Cobalt
rustup target add armv7-unknown-linux-musleabihf
cargo run -p kobo-cli -- setup

Restart the reader and open Cobalt from Kobo's menu. Future applications are installed from Store over Wi-Fi. Full Cobalt updates remain under Settings.

If you already use NickelMenu, Cobalt is added to it; existing entries are left alone.

See docs/INSTALL.md for the complete walkthrough and recovery steps.

App Store

Store reads a signed catalog from the fixed app-catalog GitHub release. Each package contains one ARM executable and a signed canonical manifest. The runtime verifies the catalog, package, installed manifest, and binary before launch.

Store is the only app-management surface. The applications bundled with the first 0.2.0 platform install appear as installed, can be removed and reinstalled in the same session, and can be updated in place without creating a second launcher entry. Platform utilities such as Settings and Terminal are shown as installed system apps and cannot be removed.

Open Install links in Store to link a phone or computer without an account. The Install button on any Cobalt app page then sends an encrypted request to that Kobo. If the reader is offline, reconnect it and open Store within 72 hours to continue.

Apps are published automatically when an app PR is merged into main. Publishing an app does not require changing the Cobalt version or creating a platform release.

Sudoku remains Store-only and is intentionally absent from the USB platform package, so installing it verifies delivery of an app that was not already on the reader.

Build an app

cargo install --path crates/kobo-cli
kobo new my-app
cd my-app
kobo dev

kobo dev runs the app in the Clara BW browser simulator. Start with the SDK documentation; the repository also keeps the deep implementation guide.

What the SDK provides

AreaApplication-facing support
App modelOrdinary Rust binaries with declarative screens, named actions, lifecycle callbacks, and runtime-managed Back navigation
E-ink UIMeasured text, rows, tiles, pictures, dialogs, keyboards, terminal views, pagination, and full or partial refresh planning
Network and credentialsAsynchronous HTTPS fetches and posts, ranged downloads, bounded responses, and named secrets whose values never enter the app
State and background workAtomic per-app keyed storage, cancellable tasks, foreground/background lifecycle events, and scheduled wake capabilities
Device and mediaCapability-gated battery, cover, frontlight, Wi-Fi, Bluetooth, and audio requests
ToolingApp scaffolding, the browser and native runtime simulators, layout diagnostics, deterministic failure scenarios, packaging, and device deployment

Apps request services through the SDK instead of opening device resources directly. The runtime can deny a request because it was not declared, is too expensive for the current battery state, or is unsupported, and each refusal is returned to the app as a value it can present or recover from.

See the SDK docs for the application model, UI components, runtime services, capabilities, developer-facing crates, and the CLI command reference.

Contributing apps

App contributions are regular pull requests:

  1. Add the app as a workspace package under apps/<app-id>/.
  2. Add its release metadata to apps/catalog.json.
  3. Add unit tests and layout checks for every affected supported profile.
  4. Run the app in the browser and runtime simulators.
  5. Open a pull request.

After the PR is reviewed and merged, the Publish apps workflow builds every registered app for ARM, signs the packages and catalog, and updates the fixed Store channel. App versions are independent from the Cobalt platform version.

See docs/CONTRIBUTING_APPS.md for metadata, capabilities, testing, and release details.

Repository layout

PathPurpose
apps/Store applications and release registry
examples/Built-in applications and SDK examples
crates/kobo-sdkPublic application SDK
crates/kobodDevice runtime
crates/kobo-uiLayout and e-ink renderer
crates/kobo-simClara BW browser/runtime simulator
crates/kobo-app-storeSigned package and catalog formats
crates/kobo-cliSetup, build, simulation, packaging, and release tools
docs/Installation, device, app publishing, and development guides

Development

cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo fmt --all --check
cargo run -p kobo-cli -- run --sim --app sudoku

Additional guides:

Safety and support

Cobalt does not replace Kobo's boot chain. Device support is explicitly gated by hardware and firmware identity, and a reboot returns to the stock reader. The first installation still modifies files on the user storage partition and is provided without warranty.

Normal panel-write entry points require one of the exact hardware and firmware combinations in the device support matrix. Do not treat a read-only profile match as permission to install: normal use requires the profile's owner-attended display, touch, exit, and recovery evidence to be complete.

License

GNU Affero General Public License v3.0. See LICENSE and THIRD-PARTY.md.

Contributors

abhishek-anand

311 commits

andreclerigo

2 commits

starsep

2 commits

jettaabhishek

2 commits

BandarLabs/Cobalt

An SDK for building real apps for your Kobo eInk reader

334

stars

324

commits

Rust

primary language

Sep 4, 2026

updated

bandarlabs.github.io/Cobalt/
eink
epub
epub-reader
ereader
kobo
kobo-ereader
opds-client
rss-reader
sdk

README

Cobalt

Apps and an SDK for Kobo e-readers.

CI Publish apps Latest release License

Cobalt is an open-source application platform for Kobo. It provides a launcher, an App Store, a Rust SDK, a runtime with capability isolation, and a Clara BW simulator.

After one USB installation, users can install, update, and remove signed apps over Wi-Fi. App releases are independent from Cobalt platform releases, so a new app can appear in Store without reinstalling or updating Cobalt.

A real Kobo Clara BW running Audiobook Studio, Gutenbird, Terminal, Components, Hacker News, Sidekick, AI Command Center, Feeds, Tic-tac-toe and audio playback, followed by the full App Store catalog and Sudoku being installed, played, removed and reinstalled over Wi-Fi
Recorded on a Kobo Clara BW at 3× speed: apps, Store discovery, and the complete Sudoku install lifecycle.

[!IMPORTANT] The Kobo Clara BW N365 (device code 391), Kobo Elipsa 2E N605 (device code 389), Kobo Clara HD N249 (device code 376), Kobo Libra 2 N418 (device code 388), Kobo Clara Colour N367 (device code 393), and Kobo Libra Colour N428 (device code 390) are fully hardware-tested on the exact firmware and kernel versions in the support matrix. See the device support matrix before installing. The 2025 Kobo Clara BW P365 (device code 395) hardware refresh is also supported: its measured panel, touch, firmware, and kernel facts match the attended-tested N365 Clara BW. It is an independent project and is not affiliated with Rakuten Kobo.

[!TIP] Own an unsupported Kobo? Help test its port. No coding is required. Join an existing device thread or create a new one with your exact model, firmware, and whether you can run attended tests. Start with read-only checks; run panel tests only against the commit named by a maintainer. See Contributing.

Features

  • Signed Wi-Fi app installation, updates, and removal
  • Shareable app pages with encrypted QR or pairing-code installation
  • Separate Settings-based updates for the Cobalt platform
  • Apps run as separate unprivileged processes
  • Per-app capability checks for network, storage, audio, frontlight, and other device services
  • Declarative e-ink UI toolkit and browser simulator
  • Profile-driven full and partial refresh planning for supported panels
  • Static ARMv7 binaries with no device-side package manager
  • Recovery-safe app and catalog transactions

How it differs

NickelMenu adds actions to Kobo's stock menu. KOReader and Plato are reading apps. Cobalt is a platform for building and installing apps.

Cobalt handles the common parts: screens, app lifecycle, drawing to the e-ink display, partial refreshes, touch input, device access, process isolation, testing, and signed installs. App authors can focus on their app instead of building those parts again. See the FAQ for a fuller comparison.

Apps

Every screenshot below is a real capture from a Kobo Clara BW. Store manages the installable applications; Settings and Terminal remain protected system utilities.

Cobalt launcher showing a grid of applications
Launcher
Opens installed apps and always keeps a route back to the Kobo reader.
Cobalt App Store listing installed and available applications
App Store
Browses signed apps and installs, updates, removes, and reinstalls them over Wi-Fi.
A complete 81-cell Sudoku game on a Kobo Clara BW
Sudoku
A Store-only touch game that also proves delivery of an app absent from the platform package.
An audiobook player with cover art, position and transport controls
Audiobook Studio
Researches, writes, narrates, and plays an original audiobook.
A shelf of book covers from an OPDS catalogue
Gutenbird
Reads any OPDS library: Project Gutenberg, Standard Ebooks, Open Library, or one you add.
A ranked list of Hacker News stories
Hacker News
Top, New, Ask, and Show stories with complete comment threads.
A list of subscribed feeds and articles
Feeds
Discovers a site's feed and presents its articles without the browser layout.
A numbered daily news brief
Daily Brief
Collects the day's stories while the reader is using another app.
An AI answer displayed as readable text on the panel
AI Command Center
Asks a question and turns the answer into touch-friendly reading.
A coding agent request with tappable responses
Sidekick
Lets a reader approve or deny requests from coding agents.
A shell and touch keyboard on the Kobo display
Terminal
A panel-native shell with keys that send input immediately.
Cobalt typography and UI components
Components
Shows the UI toolkit's controls, layouts, typography, and states.
Battery status and hardware facts
Settings
Manages connectivity and hardware, and keeps platform updates separate from Store.
A persistent to-do list with completed items
Todo
A persistent list with touch entry and completed-item states.
A completed game of tic-tac-toe
Tic-tac-toe
A two-player touch game using partial refreshes for individual cells.
The newest machine learning preprints on a Kobo Clara BW, newest first
arXiv Reader
Browses and searches preprints, keeps them for offline reading, and sets their mathematics as type.
The letter S filling the panel while the beacon sends it
Morse
Sends a typed message on the front light, a letter at a time, drawn across the panel as it goes.
The Kobo hall sensor responding to a magnet
Magnet
Locates the hall sensor behind the bezel and reports its changes.

Suggest an app

What would you use on your Kobo? It could be a game, a reading tool, a home-automation control, or a replacement for an Android or iOS app. Add it to the app request thread.

Install

Install Rust, add the ARM target and connect a charged, fully supported reader over USB:

git clone https://github.com/BandarLabs/Cobalt.git
cd Cobalt
rustup target add armv7-unknown-linux-musleabihf
cargo run -p kobo-cli -- setup

Restart the reader and open Cobalt from Kobo's menu. Future applications are installed from Store over Wi-Fi. Full Cobalt updates remain under Settings.

If you already use NickelMenu, Cobalt is added to it; existing entries are left alone.

See docs/INSTALL.md for the complete walkthrough and recovery steps.

App Store

Store reads a signed catalog from the fixed app-catalog GitHub release. Each package contains one ARM executable and a signed canonical manifest. The runtime verifies the catalog, package, installed manifest, and binary before launch.

Store is the only app-management surface. The applications bundled with the first 0.2.0 platform install appear as installed, can be removed and reinstalled in the same session, and can be updated in place without creating a second launcher entry. Platform utilities such as Settings and Terminal are shown as installed system apps and cannot be removed.

Open Install links in Store to link a phone or computer without an account. The Install button on any Cobalt app page then sends an encrypted request to that Kobo. If the reader is offline, reconnect it and open Store within 72 hours to continue.

Apps are published automatically when an app PR is merged into main. Publishing an app does not require changing the Cobalt version or creating a platform release.

Sudoku remains Store-only and is intentionally absent from the USB platform package, so installing it verifies delivery of an app that was not already on the reader.

Build an app

cargo install --path crates/kobo-cli
kobo new my-app
cd my-app
kobo dev

kobo dev runs the app in the Clara BW browser simulator. Start with the SDK documentation; the repository also keeps the deep implementation guide.

What the SDK provides

AreaApplication-facing support
App modelOrdinary Rust binaries with declarative screens, named actions, lifecycle callbacks, and runtime-managed Back navigation
E-ink UIMeasured text, rows, tiles, pictures, dialogs, keyboards, terminal views, pagination, and full or partial refresh planning
Network and credentialsAsynchronous HTTPS fetches and posts, ranged downloads, bounded responses, and named secrets whose values never enter the app
State and background workAtomic per-app keyed storage, cancellable tasks, foreground/background lifecycle events, and scheduled wake capabilities
Device and mediaCapability-gated battery, cover, frontlight, Wi-Fi, Bluetooth, and audio requests
ToolingApp scaffolding, the browser and native runtime simulators, layout diagnostics, deterministic failure scenarios, packaging, and device deployment

Apps request services through the SDK instead of opening device resources directly. The runtime can deny a request because it was not declared, is too expensive for the current battery state, or is unsupported, and each refusal is returned to the app as a value it can present or recover from.

See the SDK docs for the application model, UI components, runtime services, capabilities, developer-facing crates, and the CLI command reference.

Contributing apps

App contributions are regular pull requests:

  1. Add the app as a workspace package under apps/<app-id>/.
  2. Add its release metadata to apps/catalog.json.
  3. Add unit tests and layout checks for every affected supported profile.
  4. Run the app in the browser and runtime simulators.
  5. Open a pull request.

After the PR is reviewed and merged, the Publish apps workflow builds every registered app for ARM, signs the packages and catalog, and updates the fixed Store channel. App versions are independent from the Cobalt platform version.

See docs/CONTRIBUTING_APPS.md for metadata, capabilities, testing, and release details.

Repository layout

PathPurpose
apps/Store applications and release registry
examples/Built-in applications and SDK examples
crates/kobo-sdkPublic application SDK
crates/kobodDevice runtime
crates/kobo-uiLayout and e-ink renderer
crates/kobo-simClara BW browser/runtime simulator
crates/kobo-app-storeSigned package and catalog formats
crates/kobo-cliSetup, build, simulation, packaging, and release tools
docs/Installation, device, app publishing, and development guides

Development

cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo fmt --all --check
cargo run -p kobo-cli -- run --sim --app sudoku

Additional guides:

Safety and support

Cobalt does not replace Kobo's boot chain. Device support is explicitly gated by hardware and firmware identity, and a reboot returns to the stock reader. The first installation still modifies files on the user storage partition and is provided without warranty.

Normal panel-write entry points require one of the exact hardware and firmware combinations in the device support matrix. Do not treat a read-only profile match as permission to install: normal use requires the profile's owner-attended display, touch, exit, and recovery evidence to be complete.

License

GNU Affero General Public License v3.0. See LICENSE and THIRD-PARTY.md.

See what people are saying

Contributors

abhishek-anand

311 commits

andreclerigo

2 commits

starsep

2 commits

jettaabhishek

2 commits

Languages

Rust

98.1%

Shell

1.1%