Skip to content
IceWhaleTechPublic

About

๐Ÿ“„ Office / PDF / iWork / CAD / 3D / RAW / Panorama ๐Ÿ”’ Purely browser-based rendering โšก Powered by Rust + WebAssembly ๐Ÿงฉ Easily integrated with Vue 3. Open-source, local-first file preview. Your files, your browser.

Topics

Resources

Stars

57 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

filens logo

filens

Files shine bright. Dreams take flight.

A pure frontend file viewer for Office, iWork, CAD, panoramas, and more. Local files stay on your device.

Chinese name: ๆŽขๅพฎ ยท English ยท ็ฎ€ไฝ“ไธญๆ–‡

Watch the demo ยท Try it locally ยท Supported formats

Eight actual filens previews: presentations, documents, spreadsheets, PDF, Keynote, CAD, 3D, and panoramas

Pure frontend ยท WASM conversion, flexible deployment ยท Fast and tiny

ZimaOS. Your personal cloud, made simple. Deep FiLens integration, file management, RAW / 360ยฐ viewing, backup, and 800+ apps. Explore ZimaOS.


See more, right in your browser

Frontend project iWork 360ยฐ photos / video RAW preview Native PPTX CAD / 3D
filens โœ… All three โœ… โ— โœ… โœ…
SheetJS CE โ— Numbers โ€” โ€” โ€” โ€”
Photo Sphere Viewer โ€” โœ… โ€” โ€” โ€”
LibRaw-Wasm โ€” โ€” โœ… โ€” โ€”
vue-office โ€” โ€” โ€” โœ… โ€”
PPTist โ€” โ€” โ€” โœ… โ€”
Online 3D Viewer โ€” โ€” โ€” โ€” โœ…

โœ… Available path ยท โ— Partial or conditional support ยท โ€” No built-in path documented. Format coverage and limits.

iWork, panoramas, RAW, Office, and CAD / 3D in one browser-local workspace. The projects above specialize in different areas; filens brings these previews together.

Comparison notes and support boundaries
  • Entries follow public documentation and browser-local processing paths, rather than overall project rankings. Support and fidelity vary by file.
  • iWork / PPTX: filens previews Keynote, Pages, and Numbers natively. SheetJS extracts Numbers table data and needs an application UI. PPTist imports PPTX into its presentation model; vue-office's PPTX core is not open source.
  • Panoramas: both filens and Photo Sphere Viewer display photos and video. filens also handles supported X5 INSP originals, Insta360 / DJI calibration and distortion, original-track synchronization, and calibrated DNG stitching. Camera-original stitching is experimental and depends on metadata, companion files, and browser codecs. PSV's generic dual-fisheye adapter does not parse X5 calibration.
  • RAW: filens prioritizes embedded JPEGs, then lightweight sensor development. LibRaw-Wasm offers full / half-size decoding and development through an API that needs an application UI. These paths have different image-quality goals.
  • CAD / 3D: filens covers DXF, STEP, and mesh previews. Online 3D Viewer specializes in model viewing, inspection, and export, including STEP / IGES / IFC. filens STEP previews retain geometry and instance placement, but omit source colors, names, and the assembly tree.

iWork, panoramas, and RAW

  • iWork, with a view for each format. Open Keynote, Pages, and Numbers directly on slide, page, and sheet canvases. Layout and object fidelity vary by file. See an actual preview.
  • Camera-original panoramas. Look around 360ยฐ photos and video; supported originals use lens calibration, track synchronization, and stitching to reconstruct the view. Original stitching is experimental. Implementation and camera validation.
  • RAW, with a faster path to a preview. Load the image WASM on demand, extract an embedded JPEG first, and use lightweight sensor development when no preview is available. RAW coverage.

Demo

โ–ถ Watch the 30-second walkthrough โ€” presentations, documents, spreadsheets, Keynote, CAD, a Viking helmet in 3D, and a 360ยฐ view, in one workspace.

Show an animated preview

A short recording of filens switching between real file previews

The full recording is linked above. Chinese captions ยท English captions

Read documents with an Agent

Describe what to read in Chinese or English, then receive text, JSON, Markdown, HTML, YAML, XML, CSV or TSV. Get source structure and PDF/OCR coordinates for the calling Agent. Parsing, layout and document export share the WASM core; the caller performs semantic reasoning.

Real filens CLI typing, Markdown output and source-aligned OCR geometry

Output formats, layouts and reproducible demo ยท Actual CLI excerpts; typing/response timing edited.

Explore 68 observed examples and natural-language limits (Chinese), including OCR quality, working requests and unsupported page selection or questions.

# Full: CLI, WASM and native OCR
npm install -g filens-cli
filens 'read "report.pdf" as json'
filens 'what can you do as json'
filens 'read "report.docx" as markdown'
filens '่Žทๅ– "invoice.png" ็š„ๅธƒๅฑ€๏ผŒไปฅ YAML ่พ“ๅ‡บ'
filens convert report.doc report.docx
filens convert data.csv --to xlsx

# Lite alternative; native OCR can be added with filens setup-ocr
npm install -g filens-cli-lite
# Temporary invocation
npx --yes filens-cli-lite capacity --json

The source CLI is Rust, with strip, LTO and fast gzip-compressed WASM resources. convert uses the frontend conversion engines; inspect capacity.conversionPairs for supported targets. A distributable agent skill covers reading, OCR, layout, evidence and conversion, with standard YAML front matter.

The npm entry packages are filens-cli and filens-cli-lite; both expose the filens command. Full includes native RapidOCR NCNN and models, with no Python environment; defaults are max side 960, OpenMP threads 2, orientation classification and image preprocessing. WASM supports OCR callbacks for scanned pages and embedded document images. Rebuilt Rust candidates on macOS arm64 are about 7.25 MiB (Lite) and 30.45 MiB (Full) installed. Model downloads support concurrent speed probes across HF / ModelScope / HF Mirror and an optional fourth route, with hash verification. See installation, packaging and protocol.

Quick start

Requires Node.js 20+ and Rust via rustup. The repository pins the Rust compiler and WASI target.

npm ci
npm run build:wasm
npm run dev --workspace @filens/demo

Open the local demo, then choose a sample or drop in your own file. The website has Chinese and English homepages.

To publish the demo, import the repository into Vercel. Git integration deploys pushes automatically; an optional manual GitHub Actions workflow is also included.

What you can open today

Files What you can do Current limits
PPTX, Keynote / Pages / Numbers Browse slides, pages, and worksheets directly. Native parsing; layout and object fidelity vary by file.
DOCX, XLSX / CSV, PDF Read documents, switch worksheets, and browse PDF pages. Read-only previews; fonts and advanced styles may differ.
DOC / XLS / PPT, WPS / ET / DPS Normalize legacy documents locally for preview. Preview-focused conversion strips macros and does not promise full reconstruction.
DXF, STEP / STP, 3D models Explore drawings, orbit solids, and zoom into meshes. STEP loads separately on demand; geometry and instance placement are retained, while source colors, names, and the assembly tree are omitted.
RAW, PPM, images, and icons View camera originals and P3 / P6, 8 / 16-bit PPM files. RAW uses embedded JPEGs or lightweight sensor development; camera support varies.
360ยฐ photos and video Look around; stitch supported Insta360 / DJI videos in real time and calibrated DNG photos at load. Camera stitching is experimental and depends on calibration metadata, companion files, and browser codecs.
Archives, ebooks, code, mind maps, and diagrams Browse folders and chapters, read source, and explore node relationships. See the support matrix for each format's supported subset.

The homepage has eight actual preview captures and directly accessible STEP, RAW, PPM, and legacy Office samples. See the panorama package for RAW and panorama integration.

A closer look at your files

  • Pure frontend preview. Parse and render files in the browser. Local previews require neither uploads nor a conversion server.
  • WASM conversion, flexible deployment. Run the conversion module directly in the browser or use it independently through CLI / HTTP tools. WASM handles file parsing and conversion; the server manages requests and files.
  • Load by format, spend less time waiting. Format-based bundles, lazy loading, worker parsing, and page virtualization reduce download and rendering work. The document conversion WASM is 318.3 KiB Brotli; UI, shared dependencies, and other modules are measured separately in the bundle report.

Native PPTX and iWork previews sit alongside documents, spreadsheets, CAD, 3D, RAW, panoramas, archives, and ebooks. Coverage and fidelity vary by format. See the support matrix for current capabilities and limitations.

Small pieces, shared capabilities

Module / core Raw gzip Brotli
Conversion core WASM 872.1 KiB 395.6 KiB 318.3 KiB
Image / RAW core WASM 1072.2 KiB 293.0 KiB 210.7 KiB
Media / panorama preview 216.9 KiB 64.1 KiB 54.7 KiB
Optional STEP WASM 2625.8 KiB 1020.2 KiB 797.0 KiB

Document, image / RAW, and STEP WASM modules load independently on demand. Media preview and image conversion are measured separately. JS rows include their CSS; shared dependencies and workers are listed separately.

All modules and initial loading cost
Module / core Raw gzip Brotli
Demo entry 173.1 KiB 48.9 KiB 40.8 KiB
Shared vendor dependencies 1319.8 KiB 369.6 KiB 305.2 KiB
PPTX / core runtime 288.6 KiB 76.1 KiB 65.4 KiB
Vue preview host 69.9 KiB 16.3 KiB 14.4 KiB
DOCX / XLSX / PDF 32.5 KiB 9.8 KiB 8.8 KiB
On-demand PDF engine 435.2 KiB 128.1 KiB 106.9 KiB
iWork preview 26.8 KiB 8.7 KiB 7.7 KiB
CAD / mind maps / diagrams 90.2 KiB 25.2 KiB 21.6 KiB
3D preview 133.4 KiB 37.9 KiB 32.9 KiB
Archive preview 24.7 KiB 7.9 KiB 7.0 KiB
Text / ebooks 22.9 KiB 8.2 KiB 7.3 KiB
iWork worker 894.1 KiB 186.7 KiB 156.2 KiB
PDF worker 1053.3 KiB 291.1 KiB 233.1 KiB
STEP loader 23.0 KiB 9.5 KiB 8.7 KiB

Entry, preloaded JS, and CSS total 499.0 KiB Brotli (2131.8 KiB raw / 596.6 KiB gzip), plus images, video, and samples. Modules share dependencies; these rows are not standalone per-format download totals.

Measured from the demo build. Compression columns describe artifacts; actual transfer depends on hosting. Full report and reproduction.

Measured performance

Show SOTA benchmark results
Measured task filens Current peer Speedup*
11.1 MB, 13-slide PPTX parse 28.5 ms pptx-preview 1.0.7: 56.6 ms 1.99ร—
11.1 MB, 13-slide PPTX first preview 48.8 ms pptx-preview 1.0.7: 71.8 ms 1.47ร—
3840ร—1920 panorama JPEG preview 154.9 ms Photo Sphere Viewer 5.15.1: 205.2 ms 1.32ร—
11904ร—5952 original X5 INSP panorama preview 369.4 ms Photo Sphere Viewer 5.15.1 dual fisheye: 414.5 ms 1.12ร—
NEF without embedded JPEG โ†’ preview canvas 152.7 ms LibRaw-Wasm 1.6.0 half-size: 326.7 ms 2.14ร—
DNG without embedded JPEG โ†’ preview canvas 167.7 ms LibRaw-Wasm 1.6.0 fast half-size: 314.4 ms 1.87ร—
STEP geometry import: cube 46.5 ms occt-import-js 0.0.23: 67.6 ms 1.45ร—
XLSX data read (80,000 cells) 42.3 ms SheetJS CE 0.20.3: 109.6 ms 2.59ร—
XLS โ†’ XLSX preview conversion (6 sheets) 12.3 ms x2t WASM v9.3.2+3: 49.1 ms 4.00ร—
20,000ร—8 numeric CSV โ†’ XLSX 137.6 ms x2t WASM v9.3.2+3: 198.8 ms 1.44ร—

Stable leads against specialized frontend libraries. At least seven runs per configuration, with 21 for the X5 original; sensor development and preview drawing on five RAW inputs without embedded JPEGs are 1.11โ€“2.14ร— faster than the measured LibRaw paths.

* Limited to this machine, measured inputs and listed peers, supported by paired bootstrap 95% intervals; downloads and library cold loading excluded. Apple M4 Pro / Chromium 147; panoramas use SwiftShader software rendering. On the X5 original, PSV's generic dual-fisheye projection visibly repeats scene content across hard seams; filens has lighter, localized ghosting. The speed label covers readable previews of this original. RAW measures development and drawing to a common canvas with different intermediate sizes; STEP targets geometry previews; XLSX compares data reading; XLS compares the main displayed content in the same viewer. Full results, scope and reproduction.

Measurement scope

RAW inputs have embedded JPEGs removed and unchanged sensor data. Both LibRaw half-size configurations draw to the same 1280ร—800 canvas; intermediate resolution, tone and crop differ slightly. Timing includes development, output decode/transfer and drawing. The full Numbers model and several small PPTX first previews still have room to improve; see the full results and preview comparisons.

Build with filens

Looking forโ€ฆ Start here
Vue preview components Vue integration
Format coverage and limits Support matrix
Architecture, comparisons, and performance notes Project overview
Frontend timings, scoped leads, and raw data Frontend performance comparison
Full-text extraction / injectable OCR Optional Go host and text WASM
Agent document reading / capacity / local OCR Agent CLI
CLI / backend integration Go + wazero example
Deployment Vercel guide

Try your everyday files and report a reproducible issue. Upcoming work is tracked in the roadmap.

Preview images come from filens itself. Photos: Carsten / CC BY 2.0 (cropped and pale-blue graded) and Greg Zaal / Poly Haven / CC0. The overview, walkthrough, and animated preview are CC BY-SA 4.0. Visual sources and credits. iWork research: dunhamsteve/iwork; CAD lineage: orcastor/cad2x-converter.

Star History

Star History Chart

About

๐Ÿ“„ Office / PDF / iWork / CAD / 3D / RAW / Panorama ๐Ÿ”’ Purely browser-based rendering โšก Powered by Rust + WebAssembly ๐Ÿงฉ Easily integrated with Vue 3. Open-source, local-first file preview. Your files, your browser.

Topics

Resources

Stars

57 stars

Watchers

0 watching

Forks

Contributors

Languages