I've been digging into two tools that both promise to be your "personal AI" but couldn't be more different in how they deliver on that promise. SurfSense bets on your browser history. Onyx bets on your entire company's knowledge.
I've been sitting on this comparison for a while because I kept changing my mind. Not about which tool is better, but about whether they're even competing. The short version: these two tools solve different problems, and picking the wrong one for your situation will make you hate both of them. What SurfSense Actually Is SurfSense is built around one observation: most of the information you care about passes through your browser, and you lose almost all of it. You read a great article about database indexing strategies, you close the tab, it's gone. You skimmed a thread about Rust's ownership model at midnight, you don't remember where. SurfSense tries to fix that. A browser extension captures content from pages you visit (or explicitly save), syncs it to a backend, and then you can query across everything using natural language. The retrieval layer uses Qdrant for vector storage, and you can point it at whatever LLM you want via an OpenAI-compatible API, including local models through Ollama. Setup is genuinely fast. Most of the config lives in a .env file: # .env (SurfSense backend) OPENAI_API_KEY=your_key_here QDRANT_URL=http://localhost:6333 DATABASE_URL=postgresql://user:password@localhost:5432/surfsense Then docker-compose up and you're basically done. I had it running and capturing pages on a fresh Ubuntu VM in under 25 minutes, which for a self-hosted AI tool is honestly refreshing. The whole thing felt like something one person built because they were personally annoyed by the problem. That's usually a good sign. What I like most is that it doesn't try to be anything else. No team features, no connector ecosystem, no enterprise pricing page lurking behind a "contact sales" button. It's a personal tool, and that constraint makes the UX clean. What Onyx Actually Is Onyx , which used to be called Danswer (you might know it by that name if you were looking at this space a year ago), is a different category of tool entirely. It's open-source enterprise search with an AI layer on top. The whole point is connecting to everywhere your team stores knowledge: Confluence, Slack, Google Drive, GitHub, Notion, Jira, Linear, Zendesk, probably a few more by the time you read this. The pitch is that someone on your team can ask "what's our rollback procedure for the payments service?" and instead of pinging three different senior engineers, they just ask Onyx. It searches across your connected sources, finds the relevant docs and Slack threads, and gives an answer with citations back to the original content. Getting it running is a heavier lift. It spins up Postgres, Vespa (the search backend), a model server, a background indexing worker, and a few other services. The docker-compose file is long. Not scary-long, but you should set aside an actual afternoon and not assume it'll be a 20-minute job. I learned that the hard way when I tried to squeeze it in between meetings on a Wednesday. The Confluence connector is where I spent most of my testing time. I pointed it at a documentation space from the API gateway project we wrapped up last quarter, threw questions at it that I already knew the answers to, and the citation accuracy was genuinely solid. Better than I expected, honestly. Functionality, Side by Side The Use Cases Where Each One Actually Wins I think people overcomplicate this. Here's how I'd actually make the call. Use SurfSense if: You're an individual contributor who reads a lot and wants a personal knowledge base that doesn't require a PhD to maintain You do research-heavy work and you're tired of losing things you read six weeks ago Privacy matters and you want everything local You want a tool that does one thing well and stays out of your way Use Onyx if: You're building or managing a team knowledge base Your team's information is scattered across four different tools and nobody can find anything You want new hires to be able to ask questions and get real answers without bugging senior people for the first three weeks You have someone who can own the infrastructure (or you're fine with their hosted option) And honestly, there's a third scenario I keep coming back to: running both. SurfSense for personal research, Onyx as the team-facing layer. They don't really overlap. I haven't fully committed to this yet, but the more I think about it the more it makes sense. How the RAG Pipelines Actually Differ Worth understanding the retrieval-augmented generation setup for each, because it affects what you can realistically expect. SurfSense keeps it simple. Content gets chunked and embedded, stored in Qdrant, and at query time it does a similarity search and passes the retrieved chunks to your LLM as context. Standard RAG stuff. But it works, and you can tune it. Swapping the embedding model or pointing at a local Ollama instance is just a few env var changes: OLLAMA_BASE_URL=http://localhost:11434 EMBEDDING_MODEL=nomic-embed-text CHAT_MODEL=llama3.1:8b Onyx runs a more complex pipeline, which makes sense because it's handling multiple content types, permission filtering, and freshness tracking across many sources simultaneously. It uses Vespa as the search backend, and Vespa does hybrid retrieval out of the box, meaning it combines keyword search and semantic (vector) search in the same query. That distinction matters more than it sounds. Pure vector search will miss exact term matches. Pure keyword search will miss queries where the words don't appear verbatim but the meaning is there. Hybrid gets you both, and for a team knowledge tool where people ask questions in all kinds of ways, that's the right call. The cost is operational complexity. Running Vespa is not the same as running Qdrant. Qdrant is a focused vector database that's easy to reason about. Vespa is a full search platform with its own schema language, configuration model, and operational surface area. Worth it at scale. Overkill for personal use. My Honest Take After Six Weeks SurfSense is part of my daily workflow now. I have it running locally with Llama 3.1, and I've been querying across research I've saved over the past two months, mostly technical articles, RFCs, and documentation pages related to the distributed tracing work we've been doing. The quality is good. Not perfect, I asked it about a specific paragraph from an OpenTelemetry spec I'd saved and it confidently gave me a slightly wrong answer (okay, well, it wasn't completely wrong, it was more like it conflated two different sections, but still), but good enough that I trust it for most things. Onyx I'd push for at the team level, and I've been making the case internally for deploying it against our engineering team's Confluence and Slack. The "ask a question, get an answer with a source link" pattern is exactly what onboarding should look like. Right now we have a Confluence space that people technically know exists and a Slack history that's searchable in the same way a junk drawer is searchable. It's all there, somewhere. Onyx would make it actually usable. Both projects are actively maintained, which I want to flag because it's not guaranteed in this space. I looked at probably eight or nine personal AI assistant repos earlier this year and at least three had gone quiet in the previous six months. SurfSense and Onyx both have recent commits and active issue trackers. That matters when you're building anything on top of them. If someone asked me right now which one to try first, I'd say SurfSense without hesitating. Lower barrier, immediate personal value, runs fine on a laptop with a local model. But if you're already thinking at the team level, skip the personal tool and go straight to Onyx. Just block off the afternoon. The "use both" question is still open for me. I suspect the answer is yes, but I want to actually live with that setup for a month before I tell anyone else to do it.