Warning
Lume is still a prototype. Expect bugs, rough edges, and breaking changes in both data flow and UX.
Lume is a local-first desktop app for reading and organizing academic PDFs. It combines a paper library, reader, annotations, notes, metadata enrichment, translation, AI summaries, and citation export in one Tauri application.
- Local library with folders, subfolders, trash, rename, move, and search
- PDF import from file picker and drag-and-drop into the app window
- Multi-tab reading with lazy page loading, zoom presets, and in-document search
- Local annotations stored alongside PDFs and paper-level Markdown notes
- Metadata extraction from the PDF itself, then remote enrichment via arXiv, Crossref, and OpenAlex
- Metadata trace/report so you can inspect which provider filled which fields
- Citation generation and export
- Selection translation with
google,bingweb, orllm - AI paper summary and annotation digest
- Native CLI for listing, searching, exporting, tagging, and opening items
React 19 + TypeScript + ViteTailwind CSSfor stylingsrc/App.tsxorchestrates the shell layout, drag-drop import, tabs, reader panels, and library interactions- State is split into focused hooks:
useLibraryfor library actions and Tauri command callsuseSettingsfor persisted settings and theme/font applicationuseFeedbackfor toast notificationsuseI18nfor runtime locale loading
Tauri v2 + Rustsrc-tauri/src/lib.rswires shared app state, plugins, CLI IPC, and command registrationsrc-tauri/src/library_commands.rsowns library CRUD, search, notes, tags, export, translation, annotation sidecars, and settings persistencesrc-tauri/src/metadata_fetch.rsowns metadata parsing, provider orchestration, retries, caching, merge policy, and fetch reportssrc-tauri/src/pdf_handlers.rsowns PDFium-backed page rendering, text extraction, selection rects, and PDF-derived metadata hintssrc-tauri/src/cli.rsandsrc-tauri/src/cli_ipc.rsimplement the native CLI and single-instance handoff to the GUI
Lume currently uses a hybrid PDF stack:
pdfium-renderin Rust for raster rendering, text extraction, text-rect lookup, and metadata hintspdfjs-distin the frontend for document/page caching and warmup
So the project is no longer accurately described as a pure “PDFium app” or a pure “PDF.js app”; both are part of the current runtime.
Application data lives under Tauri app_data_dir():
library/for imported PDFstrash/for soft-deleted PDFslume_library.dbfor SQLite-backed items, attachments, notes, tags, settings, and caches- per-PDF annotation sidecars stored next to the imported file as
.<filename>.Lume-annotations.json
The app is local-first: imported files are copied into Lume-managed storage instead of being referenced in place.
Lume’s current metadata flow is modeled as a staged pipeline rather than a single lookup:
- Parse candidate title/authors/year/DOI/arXiv ID directly from the PDF.
- Run exact identifier lookups first (
arXiv ID,Crossref DOI,OpenAlex DOI). - If metadata is still incomplete, run fuzzy title searches (
OpenAlex,Crossref,arXiv) with title variants plus author/year scoring. - Merge results field-by-field with provider priority and preprint-aware rules.
- Cache the result and persist a metadata fetch report for later inspection in the UI.
This is designed to improve noisy PDF imports and avoid letting preprint metadata overwrite a confirmed venue/publication result.
- AI summaries and LLM translation use a user-configured OpenAI-compatible completion endpoint
- Non-LLM selection translation can use:
googlevia the public web endpointbingvia the Bing Translator web flow
llmtranslation requires the AI endpoint settings to be configured
npm install
npm run tauri devExamples:
Lume list
Lume list --json
Lume search "transformer" --json
Lume export --format bibtex -o refs.bib
Lume open /absolute/path/to/paper.pdfDuring development:
npm run cli:listnpm run tauri buildDetailed packaging and release notes are in docs/build-and-release-guide.md.
- Desktop shell:
Tauri v2 - Frontend:
React 19,TypeScript,Vite - Styling:
Tailwind CSS - Backend:
Rust - Database:
SQLiteviarusqlite - PDF engines:
pdfium-renderandpdfjs-dist - Network metadata sources:
arXiv,Crossref,OpenAlex
The app is moving fast. The current codebase already contains the foundations for a serious local research workflow, but it is not stable yet. If you are evaluating the project, the best framing is:
- usable for development and experimentation
- not yet safe to trust as your only literature manager
For roadmap context, see docs/zotero-gap-analysis.md.