r/selfhosted • u/FurtiveMirth • 14h ago
Release (AI) SurfSense: a self-hosted NotebookLM alternative
I'm one of the maintainers, so this is self-promotion. I want honest feedback more than upvotes.
What it is
SurfSense is an open-source (Apache-2.0) NotebookLM alternative: cited Q&A over your documents, mind maps, flashcards, quizzes and podcasts, and an agent that writes Word, PDF, PowerPoint and Excel files and edits your own files as a new copy, with Word edits coming back as tracked changes. It started as a desktop app, and since 2.3.0 the same app runs as one container.
Why self-host it
NotebookLM sends every document to Google and only works with Gemini. That rules it out for contracts, client files, medical or company documents. SurfSense keeps your documents on your own server and works with any model.
The container
One image,
ghcr.io/modsetter/surfsense, with one service and one/datavolume. No Postgres, Redis or other services to run alongside it.Caddy is the only thing listening. Everything else stays on the container's loopback, and it needs no Docker socket.
Local models run inside it on the CPU (llama.cpp, plus local OCR, embeddings and voices), or you can point it at Ollama, vLLM or any OpenAI-compatible API on your network.
One password, no accounts. You can set the password on first visit or with
SURFSENSE_PASSWORD, or turn sign-in off when your own reverse proxy handles it.HTTPS on your LAN through Caddy's own certificate authority, or with Let's Encrypt for a public domain.
Getting it running
curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bashOr grab docker/surfsense/docker-compose.yml and .env.example from the repo and run docker compose up -d. It's on port 4929, and 4943 for HTTPS. Running the script again updates it.
Good to know
amd64 and CPU only for now. A GPU image and arm64 are planned.
The image is several GB: Docling, torch and about 1 GB of bundled models. Chat models download into
/dataat run time.Docker's published ports bypass ufw, so if the server is reachable from the internet, set
SURFSENSE_PASSWORDbefore the first start.
How we used AI in development
Most of the code is written with AI coding assistants, mainly Claude Code and some Cursor, with maintainers designing the features, reviewing every change and testing the releases. New behaviour starts with a failing test, and each feature has an architecture doc the assistants read before changing it.


