Corpus is an open-source, self-hosted document Q&A system that ingests PDFs and web pages, answers natural-language questions with citations back to source text, and is aimed at teams and individuals who need grounded answers across a private document collection rather than across the public web.
What it is
Corpus is a Python application — FastAPI on the backend, React with Vite on the frontend — that builds a retrieval and question-answering layer over documents a user uploads. Documents are stored in S3-compatible storage (LocalStack when run locally), indexed for full-text search in Elasticsearch, tracked in PostgreSQL, cached in Redis, and processed through RabbitMQ queues orchestrated by Temporal workflows. Answers are generated by large language models and always carry citations linking back to the source text, so a reader can verify the passage an answer came from.
The concrete problem it replaces is the manual work of searching a document collection by hand. Instead of opening PDFs one at a time and grepping for a term, a user asks a question in natural language and receives an answer assembled from the relevant documents, with workspace and document-set organisation keeping unrelated material out of the retrieval scope. It also replaces ad-hoc one-off summarisation by providing cross-correlation across documents and automatable workflows whose results can be viewed and exported.
Key capabilities
- Upload PDFs and web pages as source material.
- Ask questions in natural language and receive answers with citations linking back to source text.
- Organise documents into workspaces and document sets to scope retrieval.
- Cross-correlation: compare answers across documents.
- Workflow creation and execution, with output that can be viewed and exported.
- Pluggable LLM providers: OpenAI (GPT-4o, GPT-4), Anthropic (Claude 4, Claude 3.5), Google (Gemini), and xAI (Grok).
- Embedding providers from OpenAI and Voyage AI.
- Full local stack ships with Docker Compose, including Temporal UI at
http://localhost:8080 and the RabbitMQ management interface at http://localhost:15672.
Who uses it and how
- Teams handling a private document corpus who cannot send material to a third-party hosted Q&A service and therefore run the stack on their own infrastructure.
- Reviewers comparing how different documents treat the same question, using the cross-correlation demo path to evaluate sources side by side.
- Operators building repeatable pipelines: upload once, then define workflows that run over the corpus and export results instead of re-asking manually.
- Developers extending the retrieval or model layer, running the API locally at
http://localhost:8000 with interactive docs at http://localhost:8000/docs and the frontend at http://localhost:3001.
- Single users with Docker and Docker Compose installed who want the whole stack up without provisioning each service individually.
Getting started
The documented path is to clone https://github.com/noetic-sys/corpus.git, copy backend/.env.example to backend/.env and vite/.env.example to vite/.env.development, then run docker-compose up, which starts the frontend, API, Temporal UI, and RabbitMQ management interface. Running services individually instead requires bringing up the infrastructure services first and then poetry install, poetry run alembic upgrade head, and poetry run uvicorn api.main:app --reload in backend, plus npm install and npm run dev in vite.
How it compares
No comparable or paid products are named anywhere in the supplied facts, and the repository carries no topics, so no honest comparison to alternatives can be drawn here. On the evidence available, Corpus stands alone in this registry; readers should treat any similarity to other document-Q&A tools as unverified rather than documented.
When to use it — and when not to
A self-hoster must operate a substantial stack: PostgreSQL, Elasticsearch, RabbitMQ, Temporal, Redis, and S3-compatible storage, plus API credentials for whichever LLM and embedding providers are chosen, since no bundled or local model is documented. It licenses under AGPL-3.0, which is a copyleft licence that will not suit teams intending to embed the code in a closed product. The project also shows signals worth weighing before adoption: 13 stars, 0 forks, 25 open issues, an empty topic list, and no tags, package name, or published image in the README, so setup depends on building from source via Docker Compose rather than installing a released artifact.