Leitor de PDF para Windows com biblioteca local, retomada de leitura e controles de conforto. Feito com Tauri 2, Rust, TypeScript e PDF.js, sem conta ou servidor.
O projeto nasceu de uma necessidade cotidiana: guardar uma cópia dos livros, continuar de onde a leitura parou e reduzir o brilho sem inverter o papel. O modo Kindle acrescenta avanço por telas no zoom atual, inclusive quando uma tela atravessa a divisão entre duas páginas do PDF.
Demonstração · Arquitetura · Resultados dos testes · Como contribuir
A Windows PDF reader built with Tauri, Rust, TypeScript, and PDF.js. It keeps local document copies, detects duplicate content with SHA-256, and restores reading progress. Native tests use artificial PDFs and an isolated library. Local validation results and the GitHub Actions status are documented separately; no signed public installer is available.
- Importação de um ou vários PDFs, por diálogo ou arrastar e soltar. Cada arquivo é copiado para a biblioteca; SHA-256 evita duplicatas de conteúdo.
- Busca na biblioteca, grade/lista, ordenação, favoritos, concluídos, renomeação, exportação de cópia e restauração de documentos removidos.
- Busca textual no PDF, seleção, sumário, zoom, rotação, marcadores, notas, foco e tela cheia.
- Retomada opcional de página, posição e zoom por documento.
- Interface clara/escura/sistema, papel claro/sépia/escuro, tela quente e brilho da leitura de 10% a 100%, combináveis e salvos automaticamente.
- Modo Kindle com avanço instantâneo por telas e pequena sobreposição para preservar linhas cortadas. Aceita teclado e roda do mouse.
O layout original do PDF é preservado, incluindo margens e imagens. Não há refluxo de texto, OCR, edição de páginas, assinatura digital ou preenchimento de formulários. O papel escuro inverte também as imagens. Notas e marcadores ficam no catálogo, sem alterar o PDF. Senhas de PDFs não são armazenadas.
Ambiente validado: Windows x64, Node.js 24, Rust com toolchain MSVC, Microsoft C++ Build Tools e WebView2. O runtime WebView2 precisa estar instalado. Outros sistemas não foram validados.
git clone https://github.com/MakenRosa/folio.git
cd folio
npm ci
npm run tauri -- devnpm run dev sozinho inicia apenas o frontend. A biblioteca e os comandos de
arquivos precisam da janela Tauri. As fontes, mapas e codecs de PDF.js são
preparados automaticamente; o uso normal do aplicativo não depende de rede.
Para compilar:
npm run tauri -- buildO instalador NSIS fica em src-tauri/target/release/bundle/nsis/. Não há
instalador público assinado nesta preparação. Para instalações antigas de
Lume PDF, leia compatibilidade antes de distribuir uma
atualização com o nome novo.
Python 3.12 ou posterior é usado para gerar documentos artificiais e empacotar o código. Não faz parte do aplicativo instalado.
python -m pip install -r requirements-test.txt
npm run build
npm run check
npm run test:native
npm run package:sourceSe Python não estiver no PATH, defina FOLIO_PYTHON com o caminho do executável.
A suíte nativa cria sua própria identidade, biblioteca e perfil WebView2 dentro
de test-results/native/. Ela valida o destino antes de importar documentos e
encerra somente o processo que iniciou. Não use uma biblioteca pessoal como
fixture de teste. Evidências locais ficam em test-results/ e não entram no ZIP.
O workflow de Windows
é executado em pushes para main e pull requests. Os resultados documentados
em VALIDATION.md são da execução local; o histórico remoto está no GitHub Actions.
Na execução de 22/10/2026, o build e npm run check passaram. A etapa npm run test:native terminou por tempo limite ao aguardar o WebView2 isolado, antes de iniciar os cenários de interface. A causa ainda precisa de diagnóstico no runner; essa execução não comprova aprovação da suíte nativa em CI.
As instalações existentes usam %LOCALAPPDATA%\com.lume.pdf. pdfs/ guarda as
cópias, covers/ as capas e library.json o catálogo com progresso e notas.
library.backup.json permite recuperar o catálogo anterior. As preferências
ficam no perfil WebView2. Para backup, feche o aplicativo e copie a pasta inteira.
Rust faz a cópia em blocos e a persistência do catálogo. PDF.js é carregado sob demanda; o transporte lê faixas da cópia local e a renderização limita canvases ativos e resolução. O modo Kindle desloca a área visível, sem construir uma imagem gigante do documento. Veja as escolhas, custos e limites em arquitetura.
O Fólio demonstra integração desktop, persistência local, interface e testes. Não inclui backend web, autenticação ou serviços distribuídos. Foi desenvolvido com assistência de IA e refinado a partir do uso e de testes locais.
Código original sob MIT. Dependências mantêm suas próprias licenças; consulte THIRD_PARTY.md. Os PDFs das demonstrações são artificiais. O projeto não tem vínculo com a Amazon.
