SU

SurfSense

Customizable AI research agent connected to your knowledge

Self-Hosted AI ★ 16.3k stars Medium setup Apache-2.0

SurfSense is a self-hosted AI research assistant that connects to your documents, browser history, and external sources to answer questions with citations. It functions as a private alternative to NotebookLM and Perplexity.

Key features

  • Cited research answers
  • Connectors for many sources
  • Local and cloud LLM support
  • Podcast generation

Pros & cons

Strengths

  • Answers with citations
  • Many source connectors
  • Private NotebookLM alternative

Trade-offs

  • Young project
  • Multi-service stack

SurfSense replaces

Last reviewed Aug 26, 2026 · 796 words

SurfSense is the closest thing to a self-hosted NotebookLM I have run that also does Perplexity-style live search, and it answers with citations you can click through to the source paragraph. It is also a 2024 project shipping a Python backend, a Next.js frontend, Postgres with pgvector and optional parsing services, so the honest summary is: the right idea, moving fast, and to be treated as a beta you back up rather than a product you depend on.

Cited answers over your own material are the point

The core loop is: ingest documents, web pages and connector data into a search space, then ask questions and get an answer with numbered citations to the exact chunks used. Retrieval is hybrid, combining vector similarity with full-text search inside Postgres rather than a separate vector database, which is one less service and the reason the whole thing runs on 2 GB. Uploads cover PDFs, Office files, Markdown and more, and a browser extension saves pages you are reading into the space, which is how it earns the "Surf" in its name. Compared with pointing Open WebUI at a folder of PDFs, the difference is that SurfSense is built around research sessions across many sources rather than chat with one model, and the citations are grounded rather than decorative.

Connectors are the moat and the maintenance burden

The connector list is long and growing: Slack, Notion, GitHub, Linear, Jira, Confluence, Discord, YouTube transcripts and web search through SearxNG or a hosted search API, among others at last check. This is what separates it from single-purpose document chat tools. It is also where a young project shows its age, because each connector is an OAuth flow or a token, an indexing job and a schema, and any of them can break when the upstream API changes. Turn on the 2 or 3 you actually use. A search space fed by everything is slower to index and no easier to trust.

Fully local is achievable with Ollama

Model access goes through a provider abstraction, so an Ollama endpoint is a model string and a base URL, and embeddings can come from a local model as well. That makes a completely offline setup possible: local LLM, local embeddings, Postgres on the same box, nothing leaving the network. The cost is answer quality and speed. A 7B or 8B model on a CPU-only box gives you cited answers in tens of seconds and misses nuance a frontier model catches; on a GPU with a 14B to 30B class model it is genuinely useful. Most people I know run a local embedding model for privacy and a cloud LLM for the final answer, which sends retrieved chunks but not the whole corpus. The self-hosted AI stack piece covers the hardware trade-offs in more depth.

What the compose stack actually is

The Docker Compose brings up the FastAPI backend, the Next.js frontend and Postgres with pgvector, driven by two .env files, one for each side. Document parsing can use a local pipeline or an external ETL service, and the local option is the one to pick unless you have a specific reason. Budget for 2 GB of RAM plus whatever the models need if they run on the same machine, and expect breaking changes between releases: pin the image tags, take a Postgres dump before upgrading, and read the changelog. Apache-2.0 license, 16,012 GitHub stars, Python and TypeScript. It is a multi-service stack, and the catalogue's two drawbacks, "young project" and "multi-service", are the same drawback seen from two angles.

Podcast generation is a party trick until it is not

Like NotebookLM, SurfSense can turn a search space into a two-voice audio summary using a TTS provider. It is fun to demo, and for a long report you will genuinely listen to in the car it is useful. It is not why you install the tool. If you have a local TTS service already, wire it in; otherwise leave it for later.

What I'd do

Install it on a box with 4 GB free and a GPU if you have one, Postgres on its own volume, behind Caddy with authentication in front. Connect the browser extension and one connector, index a few hundred documents, and use it for 2 weeks before deciding. Run local embeddings, and a cloud model for answers unless your threat model forbids it. Back up the database weekly, because rebuilding the index from connectors is slow. As a NotebookLM alternative for one person it is the best self-hosted option I have found; as a team knowledge base, wait for it to settle.

Compare SurfSense

7 head-to-head comparisons.

Similar self-hosted ai apps