Abre qualquer arquivo. Sem cloud, sem account, sem erro.
PDF, DOCX, XLSX, PSD, Parquet, SQLite, glTF, EPUB, ZIP recursivo — 80+ formatos em um binário de 12 MB. Formatos pesados carregam sob demanda, então o app abre rápido independente do catálogo. Quando algo não é renderizável, cai pra texto. Quando nem texto, cai pra hex. **Nada termina em erro.**
Abrir um arquivo virou um drama de tempo e licença.
Visualizadores vivem em silos: PDF aqui, planilha ali, imagem em outro lugar. Office cobra, alguns levam 5 segundos pra abrir, outros pedem login. Quando o formato é exótico — Parquet, PSD, glTF, SQLite — você acaba no Stack Overflow procurando "conversor online" que cobra ou exige upload. Queríamos um app local que abre **qualquer coisa** sem perguntar. Construímos.
O que esse produto realmente faz.
80+ formatos · famílias de viewers
Código, dados, documentos, imagens, áudio, vídeo, 3D, archives. Cada família tem seu viewer otimizado, e o app escolhe o certo sem depender da extensão estar correta.
pdf · docx · xlsx · psd · parquet · sqlite · gltf · epub
Carga sob demanda · 12 MB base
Cada formato pesado é um chunk lazy. O entry tem ~198 KB e fica estável conforme o catálogo cresce. Cold-start O(1) no número de formatos suportados.
Nada termina em erro
Cadeia de fallback: viewer da família → extração de texto best-effort → hex virtualizado. Mesmo formato proprietário desconhecido aparece — só não vai estar renderizado bonito.
Detecção antes do load
Rust lê os primeiros bytes (magic bytes) em microssegundos, decide a família, e só aí injeta o chunk certo via initialization_script. Sem tentar tudo, sem falhar em silêncio.
Local-first, integração opcional
Sem cloud, sem account, sem telemetria. Se você tem LibreOffice instalado, DOCX e PPTX rodam em fidelidade total via conversão local. Sem ele, caem pra extração de texto. Sua escolha.
ZIP recursivo · e seguro
ZIP-in-ZIP, TAR-in-ZIP, GZIP-in-ZIP funcionam transparentemente. Com proteção contra zip-bomb e zip-slip: caps de profundidade e budget cumulativo de bytes descompactados.
Por que essas escolhas técnicas.
Por que Tauri (de novo)
Electron empacota Chromium + Node.js. Tauri usa o WebView2 nativo do Windows, sem Node — isolamento estrutural contra RCE. 12 MB de base em vez de 200+. Mesma decisão dos outros apps COSLU, mesmo motivo: respeito ao usuário final.
O segredo do startup O(1)
O Rust faz sniff dos primeiros 8 KB do arquivo. Decide a família em microssegundos, antes do JavaScript entrar. Aí injeta o boot global certo via initialization_script dinâmico. Só o viewer necessário carrega — não importa quantos formatos o catálogo cresce, cold-start não muda.
Família, não formato
Não é 1-formato = 1-viewer. É família (tabular, documento, 3D) com modelo normalizado e decoders finos. Shiki é chunk compartilhado entre 50+ linguagens. PapaParse, sqlite-wasm, apache-arrow vivem cada um em seu chunk — o entry continua estável independente do crescimento.
Segurança endurecida
pdf.js com isEvalSupported:false e enableScripting:false (CVE-2024-4367 mitigada). Todo HTML não confiável passa por DOMPurify ≥3.4. SheetJS vendorizado via CDN com hash (versão npm vulnerável evitada). SQLite via build oficial do sqlite.org. Budget anti-DoS em archives.
A ficha técnica.
- Tamanho base
- 12 MB
- Entry chunk
- ~198 KB · estável
- Cold start
- < 1s · O(1) no catálogo
- Formatos suportados
- 80+ (com 50+ linguagens via Shiki)
- Plataformas
- Windows 10/11 · WebView2
- Licença
- MIT
- Versão atual
- v0.1.0 · pré-release
Onde estamos · onde vamos.
- [×] Fase 1 · texto, código, dados, imagem, hex, archive recursivo, fallback chain done
- [×] Fase 2 · SQLite, XLSX, mídia A/V, fontes, Arrow/Feather, archive completo done
- [×] Fase 3 · PDF, DOCX/PPTX, .ipynb, EPUB, 3D/CAD, PSD, binário estruturado done
- [ ] CSP estrita + Isolation Pattern + lockdowns planned
- [ ] Code signing Windows (Azure Trusted Signing) planned
- [ ] RAW de câmera (CR2, NEF, ARW, DNG via libraw-wasm) planned
- [ ] Mobile (iOS / Android) com file picker planned
- [ ] Office legado (.doc, .ppt, .xls) e suítes Apple (.pages, .key, .numbers) planned