RAG Assistant for Zotero icon

RAG Assistant for Zotero

Semantic search and cited answers over your Zotero library. Ask questions in plain language and get responses grounded in your own PDFs, with citations to the exact document and page. Runs fully local with Ollama or LM Studio — your library never leaves your machine.

View on GitHub
macOS Windows Linux Local AI Apache 2.0

What it does

RAG Assistant indexes the PDFs in your Zotero library and uses retrieval-augmented generation to answer questions grounded in their content. Every answer includes citations to the specific sources and page numbers used, so you can verify each claim and follow up on interesting findings rather than trusting a summary that obscures where the information came from.

It's built for researchers navigating large literature collections — preprints, embargoed work, sensitive material. With a local model via Ollama or LM Studio, your documents and queries never leave your machine. When you'd rather use a cloud model, it connects to OpenAI, Anthropic, Google, Mistral, Groq, or OpenRouter.

Hybrid Search Combines dense semantic embeddings with BM25 keyword search, merged by Reciprocal Rank Fusion, then reranked by a cross-encoder that scores the query and each passage together. Captures both conceptual similarity and exact terminology, so specific terms and proper nouns aren't lost.
Cited Answers Responses reference the specific documents and page numbers they draw from. An Evidence Panel shows the exact text passages used to generate each answer, and document titles open straight in Zotero or your PDF reader.
Metadata Filtering Filter by year, tags, collections, authors, or item type — either through manual controls or by describing the constraint in natural language, which an LLM extracts into structured filters. If auto-extracted filters return nothing, the system retries without them to avoid over-restriction.
Conversational Follow-ups Follow-up questions with pronouns or contextual references are rewritten into standalone queries before retrieval, so they match the corpus correctly without you repeating yourself. Sessions are trimmed to fit each provider's context window.
Multiple LLM Providers Run local models via Ollama or LM Studio with no API key, or connect to OpenAI, Anthropic, Google, Mistral, Groq, or OpenRouter. Switch providers and models anytime; retrieval limits scale automatically to the active model's context window.
Profiles Maintain separate workspaces with their own settings, libraries, and chat histories — one profile per research project. Academic scaffolding prompt templates are built in for common literature-review tasks.

How it works

PDFs are extracted with page-level granularity and split into roughly 800-character chunks with 200-character overlap, cut on sentence boundaries. Each chunk carries its item ID, title, authors, year, tags, collections, item type, and page number — the metadata behind both filtering and citations.

Embeddings are generated with SentenceTransformers (downloaded automatically on first use) and stored in ChromaDB. Choose from BGE-base (default, best quality), SPECTER (scientific papers), MiniLM-L6 (balanced), or MiniLM-L3 (fastest); each model creates its own collection, so you can switch without re-indexing if the index already exists. The backend is FastAPI, the frontend React and TypeScript, packaged as an Electron desktop app with automatic updates.

Install

On macOS, install via Homebrew. On Windows, install via winget. Linux .deb builds are available from the GitHub Releases page.

brew tap Quiet-Signals-Lab/rag-assistant-for-zotero brew install --cask rag-assistant-for-zotero
winget install aahepburn.RAGAssistantForZotero

System requirements

macOS macOS 11 Big Sur or later. Apple Silicon (M1/M2/M3 or newer) only — there are no Intel builds. Signed and notarized.
Windows Windows 10 or later (64-bit). Install via winget or the installer from Releases. May show a SmartScreen warning, as the build isn't code-signed.
Linux Debian/Ubuntu-based distributions (Ubuntu 18.04+, Debian 10+). Install the .deb package; Python and all dependencies are bundled.
Zotero The Zotero desktop client, installed with your library synced. The app reads your local zotero.sqlite database for PDFs and metadata.

Documentation

Setup and usage guides covering LLM providers, profiles, and prompting. Browse all docs →

LLM Providers & API Keys Connect local models (Ollama, LM Studio) or cloud providers, and where to get each API key.
Profiles Separate workspaces with their own settings, library, and chat history — one profile per project.
Prompting & Generation How answers are generated, how to tune generation, and how the prompt is structured.

Frequently asked questions

Does my library leave my machine?

All indexing and processing happen locally. If you use a local model via Ollama or LM Studio, nothing leaves your machine at all. If you choose a cloud provider, only your queries and the retrieved document chunks are sent to their API — never your full library.

Do I need an API key?

Not if you run a local model with Ollama or LM Studio. Cloud providers (OpenAI, Anthropic, Google, Mistral, Groq, OpenRouter) require an API key you add in Settings.

Can it index scanned PDFs?

Only if they contain selectable text. Scanned documents without OCR cannot be indexed — run OCR on them first.

How long does indexing take?

It depends on library size. Initial indexing builds embeddings for every PDF and can take a while for large collections; subsequent runs only process new or changed items.

How much does it cost?

The app is free and open source under Apache 2.0. Your only potential cost is cloud LLM API usage, if you opt for a cloud provider instead of a local model.

Support

RAG Assistant for Zotero is built and maintained by Quiet Signals Lab. Bug reports and feature requests are welcome as GitHub issues; contributions are welcome too — open an issue to discuss significant changes first.

For issues, include your OS, the LLM provider you're using, and a description of what happened. For anything else, reach out directly.

hello@quietsignalslab.com →