Lightweight desktop app for extracting text from PDFs. Built with Svelte 5, Tauri v2, and @llamaindex/liteparse.
Extracts text with spatial layout preservation — column alignment and indentation are kept intact. No OCR, no cloud, no Office documents. Just fast, offline, local PDF text extraction.
.txtNeo-editorial aesthetic inspired by luxury publishing and fine stationery.
┌──────────────┐ invoke() ┌──────────────┐ spawn sidecar ┌─────────────────┐
│ Svelte UI │ ───────────────→ │ Rust Backend │ ───────────────→ │ pdfparse-parser │
│ (webview) │ ←─────────────── │ (Tauri cmds) │ ←─────────────── │ (liteparse node) │
└──────────────┘ ExtractionResult└──────────────┘ JSON stdout └─────────────────┘
LiteParse is a Node.js library, so it runs as a Tauri sidecar — a standalone binary compiled with pkg, bundled alongside the app. No Node.js installation required.
| Layer | Technology |
|---|---|
| Frontend | Svelte 5, Vite |
| Backend | Tauri v2, Rust |
| PDF parsing | @llamaindex/liteparse |
| Plugins | tauri-plugin-dialog, tauri-plugin-clipboard-manager, tauri-plugin-shell |
# Install frontend dependencies
pnpm install
# Install sidecar dependencies and build sidecar binary
pnpm sidecar:install
pnpm build:sidecar
# Run in development mode
pnpm tauri dev
# Build release binary (includes sidecar)
pnpm tauri build
Output binaries are in src-tauri/target/release/bundle/.
| Command | Description |
|---|---|
pnpm dev |
Start Vite dev server (frontend only) |
pnpm tauri dev |
Start full Tauri dev mode (frontend + backend) |
pnpm build:sidecar |
Build liteparse sidecar for current platform |
pnpm build:sidecar:all |
Build sidecar for all platforms |
pnpm tauri build |
Build release binary |
pnpm check |
Run Svelte/TypeScript type checking |
src/ # Svelte frontend
├── App.svelte # Main app (layout, state wiring)
├── lib/
│ ├── state.svelte.ts # Reactive state (Svelte 5 runes)
│ ├── Sidebar.svelte # Dark vertical sidebar with stats
│ ├── TitleBar.svelte # Compact title bar with status badge
│ ├── DropZone.svelte # File picker + animated drag-and-drop
│ ├── TextDisplay.svelte # Page cards with ruled lines
│ └── ActionBar.svelte # Copy / Save buttons
src-tauri/ # Tauri backend
├── src/
│ ├── lib.rs # Tauri commands (extract_text, save_text)
│ └── pdf.rs # Data structures
├── sidecar/
│ ├── parser.mjs # LiteParse extraction logic
│ └── build-sidecar.mjs # Sidecar build script (esbuild + pkg)
MIT