Opens any file. No cloud, no account, no error.
PDF, DOCX, XLSX, PSD, Parquet, SQLite, glTF, EPUB, recursive ZIP — 80+ formats in a 12 MB binary. Heavy formats load on demand, so the app starts fast regardless of catalog size. Whatever the viewer can't render falls back to text. Whatever isn't text falls back to hex. **Nothing ends in error.**
Opening a file became a drama of time and license.
Viewers live in silos: PDF here, spreadsheet there, image somewhere else. Office charges money, some take 5 seconds to open, others demand a login. When the format is exotic — Parquet, PSD, glTF, SQLite — you end up on Stack Overflow looking for "online converter" that either charges or wants an upload. We wanted a local app that opens **anything** without asking. So we built it.
What this product actually does.
80+ formats · viewer families
Code, data, documents, images, audio, video, 3D, archives. Each family has its own optimized viewer, and the app picks the right one without needing the file extension to be correct.
pdf · docx · xlsx · psd · parquet · sqlite · gltf · epub
On-demand loading · 12 MB base
Every heavy format is a lazy chunk. The entry stays at ~198 KB even as the catalog grows. Cold-start O(1) on the number of supported formats.
Nothing ends in error
Fallback chain: family viewer → best-effort text extraction → virtualized hex. Even unknown proprietary formats show up — just not pretty-rendered.
Detection before load
Rust reads the first bytes (magic bytes) in microseconds, picks the family, then injects only the right chunk via initialization_script. No trying everything, no silent failures.
Local-first, optional integration
No cloud, no account, no telemetry. If you have LibreOffice installed, DOCX and PPTX run at full fidelity via local conversion. Without it, they fall to text extraction. Your call.
Recursive ZIP · and safe
ZIP-in-ZIP, TAR-in-ZIP, GZIP-in-ZIP work transparently. With zip-bomb and zip-slip protection: depth caps and cumulative byte budget on decompression.
Why these technical choices.
Why Tauri (again)
Electron bundles Chromium + Node.js. Tauri uses native WebView2 on Windows, no Node — structural isolation against RCE. 12 MB base instead of 200+. Same decision as the other COSLU apps, same reason: respect for the end user.
The secret behind O(1) startup
Rust sniffs the first 8 KB of the file. Picks the family in microseconds, before any JavaScript runs. Then injects the right global boot via dynamic initialization_script. Only the viewer that's needed loads — no matter how the catalog grows, cold-start stays flat.
Family, not format
It's not 1-format = 1-viewer. It's family (tabular, document, 3D) with normalized model and fine-grained decoders. Shiki is a shared chunk across 50+ languages. PapaParse, sqlite-wasm, apache-arrow each live in their own chunk — entry stays stable regardless of growth.
Hardened security
pdf.js with isEvalSupported:false and enableScripting:false (CVE-2024-4367 mitigated). All untrusted HTML goes through DOMPurify ≥3.4. SheetJS vendored via CDN with a hash (the vulnerable npm version is avoided). SQLite from the official sqlite.org build. Anti-DoS budgets on archives.
The spec sheet.
- Base size
- 12 MB
- Entry chunk
- ~198 KB · estável
- Cold start
- < 1s · O(1) no catálogo
- Supported formats
- 80+ (com 50+ linguagens via Shiki)
- Platforms
- Windows 10/11 · WebView2
- License
- MIT
- Current version
- v0.1.0 · pré-release
Where we are · where we’re going.
- [×] Phase 1 · text, code, data, image, hex, recursive archive, fallback chain done
- [×] Phase 2 · SQLite, XLSX, A/V media, fonts, Arrow/Feather, full archive done
- [×] Phase 3 · PDF, DOCX/PPTX, .ipynb, EPUB, 3D/CAD, PSD, structured binary done
- [ ] Strict CSP + Isolation Pattern + lockdowns planned
- [ ] Windows code signing (Azure Trusted Signing) planned
- [ ] Camera RAW (CR2, NEF, ARW, DNG via libraw-wasm) planned
- [ ] Mobile (iOS / Android) with file picker planned
- [ ] Legacy Office (.doc, .ppt, .xls) and Apple suites (.pages, .key, .numbers) planned