Um leitor de EPUB que não sai do terminal
O tbook nasceu de uma exigência simples: ler sem abrir mais uma janela — e sem perder capa, imagens e o parágrafo onde eu parei.
Leio bastante, e a maior parte do meu dia já acontece no terminal. Ler ali, porém, sempre foi uma experiência de segunda classe: os leitores que existem tratam o EPUB como texto puro e jogam fora justamente o que o formato tem de bom — capa, ilustrações, hierarquia. Os leitores de desktop resolvem isso cobrando uma janela a mais e um app que quer a minha atenção. O tbook é a tentativa de não pagar nenhum dos dois preços.
O que um TUI costuma jogar fora
EPUB é, por dentro, um zip de XHTML com imagens — nada disso é mistério, mas desenhar imagem em terminal dá trabalho, e é mais fácil fingir que o livro é só texto. A decisão que definiu o projeto foi não fingir: a capa abre a primeira página e as ilustrações viram arte ANSI de 24 bits, com fallback automático para 256 cores quando o terminal não acompanha.
O resto é ajuste fino do que incomoda na leitura de verdade: coluna ajustável de 40 a 120 caracteres (76 por padrão), três temas (dark, light, sepia) e navegação inteiramente por teclado — setas para capítulo, / para buscar, n/N para pular entre ocorrências, b para marcar o ponto.
Memória de leitura é a feature, não o extra
A parte que faz um leitor ser usado ou abandonado não é a renderização: é não perder o lugar. Ao sair, o tbook grava posição, bookmarks e tempo de leitura por livro; tbook stats mostra o histórico e tbook library navega pela estante com capa e progresso ao lado. tbook read harry abre pelo nome.
Também embuti o acesso ao Project Gutenberg: tbook search e tbook download trazem clássicos direto para a biblioteca, sem passar pelo navegador. É o tipo de integração que só faz sentido em ferramenta de terminal — se eu preciso abrir o browser para baixar o livro, o leitor perdeu a razão de existir.
O que sustenta isso
O projeto é um binário em Go com a CLI separada do núcleo (internal/cli, internal/core, internal/epub), seis arquivos de teste cobrindo EPUB, sessão, biblioteca, estatísticas e Gutenberg, e duas esteiras no GitHub Actions: CI a cada push e release com goreleaser. Um leitor que guarda sua posição precisa de release previsível — ninguém quer recompilar para ler o próximo capítulo.
Ficou de fora, de propósito: sincronização entre máquinas (o estado é local), mouse e qualquer janela. Quem quiser espiar o código ou instalar: tbook.