⏱️ Lectura: 12 min

Un Kobo Clara BW puede hoy instalar un lector de arXiv, una terminal completa o un cliente de Hacker News sin salir del wifi del dispositivo, algo que Rakuten nunca habilitó de fábrica. Eso es lo que propone Cobalt, una plataforma open source que convierte al e-reader en un dispositivo con App Store propio: un launcher, un catálogo de aplicaciones firmadas y un SDK en Rust para escribir apps nuevas.

📑 En este artículo
  1. TL;DR
  2. Qué es Cobalt y qué cambia en el Kobo
  3. Contexto e historia
  4. Detalles técnicos y rendimiento
    1. USB una vez, Wi-Fi para siempre
  5. Cómo empezar con Cobalt
    1. Instalar el CLI (Linux y macOS)
    2. Instalar el CLI (Windows)
  6. Impacto y análisis
  7. Qué sigue
  8. Preguntas frecuentes
    1. ¿Qué modelos de Kobo soporta Cobalt?
    2. ¿Necesito el cable USB cada vez que instalo una app?
    3. ¿Qué pasa si reinicio el Kobo después de instalar Cobalt?
    4. ¿En qué lenguaje se escriben las apps?
    5. ¿Cobalt está afiliado a Rakuten Kobo?
    6. ¿Puedo publicar mi propia app en la Store de Cobalt?
  9. Referencias

El proyecto, publicado por BandarLabs en GitHub, se instala una sola vez por USB y a partir de ahí todo (instalar, actualizar o borrar apps, e incluso actualizar la propia plataforma) ocurre por Wi-Fi. Un reinicio del lector siempre devuelve al firmware de lectura original de Kobo.

TL;DR

  • Cobalt es una plataforma open source que agrega un launcher, un App Store firmado y un runtime a los e-readers Kobo.
  • Solo soporta el Kobo Clara BW (modelo N365); otros modelos son rechazados durante la instalación.
  • La instalación inicial requiere USB con rustup y el target armv7-unknown-linux-musleabihf; el resto llega por Wi-Fi.
  • El SDK está escrito en Rust: cada app implementa el trait KoboApp y declara pantallas con ScreenBuilder.
  • Cada app corre como proceso sin privilegios y accede a red, almacenamiento, audio o luz frontal solo con permiso explícito.
  • El catálogo de lanzamiento incluye 16 apps, desde un lector de arXiv y Sudoku hasta un cliente de Hacker News y una terminal nativa.
  • Un reinicio del dispositivo devuelve el Kobo al firmware original de lectura sin dejar rastro de Cobalt.
  • El proyecto es abierto en GitHub bajo BandarLabs y acepta apps de terceros vía pull request.

Qué es Cobalt y qué cambia en el Kobo

Cobalt agrega tres piezas al Kobo Clara BW: un launcher que abre las apps instaladas y siempre deja una ruta de regreso al lector original, un App Store firmado que instala, actualiza y borra apps por Wi-Fi, y un SDK en Rust para escribir apps nuevas como binarios ARM estáticos.

La primera instalación requiere conectar el dispositivo por cable USB a una computadora con Rust y compilar el instalador para el target ARM del Kobo. Después de ese primer paso, el cable ya no hace falta: el catálogo de apps se descarga, actualiza y reinstala completo desde el propio dispositivo.

Cada app corre como un proceso independiente y sin privilegios. Antes de que cualquier binario se ejecute, el runtime verifica la firma del catálogo, la firma del paquete, el manifiesto instalado y el propio ejecutable.

Contexto e historia

Los e-readers comerciales (Kobo, Kindle, Nook) corren Linux embebido, pero los fabricantes bloquean la instalación de software de terceros: solo se puede leer libros, no ejecutar programas propios. Ese cierre motivó durante años a la comunidad de jailbreaking a buscar accesos root, generalmente frágiles, que un simple update de firmware podía romper de un día para otro.

Cobalt cambia el enfoque: en vez de forzar un acceso root permanente, instala una capa de aplicación separada que convive con el firmware de Kobo. El propio proyecto lo aclara: no está afiliado a Rakuten Kobo, y un reinicio del dispositivo vuelve al lector original sin dejar rastro.

Esto lo acerca a proyectos previos como KOReader, el lector alternativo más usado en pantallas e-ink, o a iniciativas de hardware completamente abierto como Open Book en Crowd Supply. La diferencia clave es que Cobalt no reemplaza el sistema de lectura: lo complementa con un ecosistema de apps instalable sin comprar hardware nuevo.

Detalles técnicos y rendimiento

El corazón técnico de Cobalt es el SDK: cada app implementa el trait KoboApp y describe sus pantallas de forma declarativa con ScreenBuilder. El runtime se encarga del layout, la planificación de refrescos de e-ink (parciales o completos), la navegación con el botón Back y el ciclo de vida de la app.

Las apps no abren directamente los recursos del dispositivo: piden permiso. Red, almacenamiento, audio, luz frontal y Wi-Fi están controlados por un sistema de capacidades, y una negativa vuelve como un valor que la app puede manejar en vez de un crash.

Launcher de Cobalt mostrando el catálogo de apps en un Kobo Clara BW
El launcher siempre deja una ruta de regreso al lector original de Kobo. Foto de Nick Cruz en Unsplash

El catálogo de lanzamiento incluye 16 apps: un launcher y una App Store como base, y encima Sudoku, Morse (envía un mensaje tipeado parpadeando la luz frontal en todo el panel), Audiobook Studio (investiga, escribe, narra y reproduce un audiolibro original), Gutenbird (lee cualquier biblioteca OPDS: Project Gutenberg, Standard Ebooks, Open Library o una propia), un cliente de Hacker News con hilos de comentarios completos, un lector de Feeds, Daily Brief (recolecta noticias del día en segundo plano mientras usás otra app), un AI Command Center, Sidekick (aprueba o rechaza pedidos de agentes de código lejos del teclado), una Terminal nativa del panel, un catálogo de Components del propio toolkit de interfaz, Settings, Todo, Tic-tac-toe y Magnet (localiza el sensor Hall detrás del bisel y reporta sus cambios).

Sudoku es, a propósito, el caso de prueba del sistema de distribución: existe solo en la Store y nunca viajó en el paquete USB inicial, así que instalarlo desde el dispositivo prueba que la entrega por Wi-Fi funciona de punta a punta.

La app de arXiv lee directamente el HTML que arXiv publica para cada paper desde diciembre de 2023 (abstracts, secciones, ecuaciones y tablas de resultados) y lo pagina para el panel del lector.

💭 Clave: El modelo de capacidades (pedir permiso en vez de acceso directo) es lo que permite instalar apps de terceros sin comprometer el resto del dispositivo: si una app se porta mal, queda aislada en su propio proceso sin privilegios.

USB una vez, Wi-Fi para siempre

MétodoCuándo se usaVentajaLimitación
Instalación inicial por USBPrimera vez que se instala Cobalt en el KoboSe hace una sola vez en la vida del dispositivoRequiere una computadora con Rust y el target ARM compilado
Actualizaciones por Wi-FiInstalar apps nuevas, actualizarlas o actualizar la plataformaNo hace falta volver a conectar el cable nunca másDepende de tener Wi-Fi configurado en el lector

Las transacciones de instalación y catálogo son recuperables ante fallos: si una actualización se interrumpe a mitad de camino, el lector se queda con la versión que tenía antes, no con un estado a medio instalar.

flowchart TD
    A["App Store"] --> B["Catalogo firmado en GitHub"]
    B --> C["Runtime de Cobalt"]
    C --> D["Proceso sin privilegios por app"]
    D --> E["Permisos: red, almacenamiento, audio, luz frontal"]
    subgraph Kobo["Kobo Clara BW"]
    C
    D
    end

Cómo empezar con Cobalt

Solo el Kobo Clara BW (modelo N365) es compatible por ahora: el instalador rechaza cualquier otro modelo en vez de intentar adivinar la configuración de hardware. Antes de empezar, cargá el dispositivo por completo y conectalo por USB a tu computadora.

Instalar el CLI (Linux y macOS)

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

Si todavía no tenés Rust instalado, rustup se agrega con el script oficial (curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh) tanto en Linux como en macOS.

Instalar el CLI (Windows)

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

Los tres sistemas operativos terminan corriendo el mismo comando de cargo: lo único que cambia es cómo llega rustup a la máquina. Después del setup, reiniciá el Kobo y abrí Cobalt desde el menú del lector; desde ahí, abrí la Store y todo lo demás llega por Wi-Fi.

Para escribir una app propia, el flujo es igual de corto:

kobo new mi-app
cd mi-app
kobo dev

kobo dev levanta el simulador del SDK con diagnósticos de layout, así que podés iterar la pantalla sin flashear el dispositivo en cada cambio. Un ejemplo mínimo de app en Rust, con un contador de páginas leídas:

use kobo_sdk::{ActionId, Context, KoboApp, ScreenBuilder};

#[derive(Default)]
struct ContadorLecturas {
    paginas_leidas: u32,
}

impl KoboApp for ContadorLecturas {
    fn on_start(&mut self, ctx: &mut Context) {
        self.render(ctx);
    }

    fn on_action(&mut self, ctx: &mut Context, accion: ActionId) {
        if accion == kobo_sdk::action_id("marcar_pagina") {
            self.paginas_leidas += 1;
        }
        self.render(ctx);
    }
}

impl ContadorLecturas {
    fn render(&self, ctx: &mut Context) {
        let pantalla = ScreenBuilder::new("contador")
            .top_bar("Contador de lecturas")
            .heading(format!("{} paginas leidas hoy", self.paginas_leidas))
            .button("marcar_pagina", "Marcar pagina leida")
            .build();
        ctx.set_screen(pantalla);
    }
}

fn main() {
    let app = ContadorLecturas::default();
    let _ = kobo_sdk::run("contador-lecturas", app);
}

Cada acción (un tap en un botón) llega vía on_action con un ActionId, y la app decide qué hacer y vuelve a dibujar la pantalla con ScreenBuilder. El resto (el refresco parcial de la zona que cambió, la navegación con el botón Back) lo resuelve el runtime.

Pantalla del SDK de Cobalt mostrando un boton y un contador en el panel de e-ink
Cada refresco parcial de e-ink lo planifica el runtime, no la app. Foto de Saradasish Pradhan en Unsplash
⚠️ Ojo: Instalar Cobalt no es un proceso reversible con un simple toque: seguí el walkthrough completo de docs/INSTALL.md en el repositorio, que incluye los pasos de recuperación si algo falla a mitad de la instalación inicial.

Impacto y análisis

Lo interesante de Cobalt no es solo que un e-reader corra Sudoku: es el modelo de distribución. Las apps se publican de forma independiente de la plataforma. Cuando un pull request de una app nueva se mergea, esa app se compila para ARM, se firma y se agrega al catálogo sin que Cobalt necesite una nueva versión ni el usuario tenga que reinstalar nada.

Esa separación (plataforma por un lado, catálogo de apps por otro, cada uno con su propio canal de actualización) es la misma que usan las grandes App Stores móviles, aplicada a un dispositivo con procesador ARM de gama baja y una pantalla de e-ink que refresca en cientos de milisegundos, no en fracciones de segundo como una pantalla LCD.

El catálogo actual mezcla utilidades (Todo, Terminal, Settings), entretenimiento (Sudoku, Tic-tac-toe), lectura (Gutenbird, arXiv, Feeds) y herramientas ligadas a agentes de IA (Sidekick, AI Command Center, Daily Brief), lo que sugiere que el proyecto apunta tanto a usuarios de lectura tradicional como a desarrolladores que quieren un panel de e-ink de bajo consumo como periférico secundario.

Qué sigue

Por ahora Cobalt solo soporta un modelo (Kobo Clara BW / N365), así que el paso obvio para la comunidad es sumar soporte a otros modelos de Kobo con procesadores compatibles. El proyecto es abierto en GitHub bajo BandarLabs y acepta apps de terceros mediante pull requests regulares, lo que abre la puerta a que el catálogo crezca más rápido que si dependiera solo del equipo original.

La pieza que falta para saber si esto escala es la que menos control tiene el propio proyecto: qué tan rápido reacciona Kobo (o Rakuten) si la instalación de apps de terceros se vuelve masiva, dado que Cobalt convive con el firmware oficial en vez de reemplazarlo.

📖 Resumen en Telegram: Ver resumen

Probalo vos: si tenés un Kobo Clara BW a mano, cloná el repositorio de Cobalt en GitHub y corré cargo run -p kobo-cli -- setup para ver el App Store funcionando en tu propio lector hoy mismo.

Preguntas frecuentes

¿Qué modelos de Kobo soporta Cobalt?

Por ahora, únicamente el Kobo Clara BW (modelo N365). El instalador rechaza cualquier otro modelo en vez de intentar adaptarse a él.

¿Necesito el cable USB cada vez que instalo una app?

No. El USB solo se usa una vez, para instalar Cobalt. Después, instalar, actualizar o borrar apps (y actualizar la propia plataforma) ocurre por Wi-Fi desde el dispositivo.

¿Qué pasa si reinicio el Kobo después de instalar Cobalt?

El dispositivo vuelve al firmware de lectura original de Kobo. Cobalt convive como una capa aparte, no reemplaza el sistema del fabricante.

¿En qué lenguaje se escriben las apps?

En Rust, usando el SDK de Cobalt. Cada app se compila como un binario ARM estático que corre en su propio proceso sin privilegios.

¿Cobalt está afiliado a Rakuten Kobo?

No. El propio proyecto lo aclara explícitamente: es un desarrollo independiente de la comunidad, sin relación con el fabricante.

¿Puedo publicar mi propia app en la Store de Cobalt?

Sí. Las contribuciones de apps son pull requests regulares al repositorio; cuando se mergean, la app se compila, se firma y aparece en el catálogo sin que el usuario reinstale nada.

Referencias

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Imagen destacada: Foto de @felirbe en Unsplash


Andrés Morales

Desarrollador e investigador en inteligencia artificial. Escribe sobre modelos de lenguaje, frameworks, herramientas para devs y lanzamientos open source. Cubre papers de ML, ecosistema de startups tech y tendencias de programación.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.