Components were calling useSearchParams() at the top level but only reading the value inside useEffect or callbacks, never in JSX. This subscribed the entire component tree to every URL query change. Fix: read from window.location.search directly inside the effect so no React subscription is created. Changes: - new-chat/page.tsx: read commentId inside effect + popstate listener for SPA back/forward support; removes subscription from 1500+ line tree - dashboard/page.tsx: read window.location.search at redirect time; removes searchParams from dep array - public-chat-footer.tsx: one-shot mount read for action=clone param - TokenHandler.tsx: one-shot mount read for token + refresh_token params Implements Vercel React Best Practices Rule: rerender-defer-reads (5.2) |
||
|---|---|---|
| .cursor/skills | ||
| .github | ||
| .rules | ||
| .vscode | ||
| docker | ||
| docs | ||
| surfsense_backend | ||
| surfsense_browser_extension | ||
| surfsense_desktop | ||
| surfsense_web | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .recurseml.yaml | ||
| .secrets.baseline | ||
| biome.json | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.es.md | ||
| README.hi.md | ||
| README.md | ||
| README.pt-BR.md | ||
| README.zh-CN.md | ||
| skills-lock.json | ||
SurfSense
Connect any LLM to your internal knowledge sources and chat with it in real time alongside your team. OSS alternative to NotebookLM, Perplexity, and Glean.
SurfSense is a highly customizable AI research agent, connected to external sources such as Search Engines (SearxNG, Tavily, LinkUp), Google Drive, OneDrive, Dropbox, Slack, Microsoft Teams, Linear, Jira, ClickUp, Confluence, BookStack, Gmail, Notion, YouTube, GitHub, Discord, Airtable, Google Calendar, Luma, Circleback, Elasticsearch, Obsidian and more to come.
Demo
https://github.com/user-attachments/assets/cc0c84d3-1f2f-4f7a-b519-2ecce22310b1
Video Agent Sample
https://github.com/user-attachments/assets/012a7ffa-6f76-4f06-9dda-7632b470057a
Podcast Agent Sample
https://github.com/user-attachments/assets/a0a16566-6967-4374-ac51-9b3e07fbecd7
How to Use SurfSense
Cloud
- Go to surfsense.com and login.
- Connect your connectors and sync. Enable periodic syncing to keep connectors synced.
- Till connectors data index, upload Documents.
-
Once everything is indexed, Ask Away (Use Cases):
- Video Generation
- Basic search and citation
- Document Mention QNA
- Report Generations and Exports (PDF, DOCX, HTML, LaTeX, EPUB, ODT, Plain Text)
- Podcast Generations
- Image Generations
- And more coming soon.
Self Hosted
Run SurfSense on your own infrastructure for full data control and privacy.
Prerequisites: Docker Desktop must be installed and running.
For Linux/MacOS users:
curl -fsSL https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.sh | bash
For Windows users:
irm https://raw.githubusercontent.com/MODSetter/SurfSense/main/docker/scripts/install.ps1 | iex
The install script sets up Watchtower automatically for daily auto-updates. To skip it, add the --no-watchtower flag.
For Docker Compose, manual installation, and other deployment options, see the docs.
How to Realtime Collaborate (Beta)
-
Go to Manage Members page and create an invite.
-
Teammate joins and that SearchSpace becomes shared.
-
Make chat shared.
-
Your team can now chat in realtime.
-
Add comment to tag teammates.
Key Features
| Feature | Description |
|---|---|
| OSS Alternative | Drop in replacement for NotebookLM, Perplexity, and Glean with real time team collaboration |
| 50+ File Formats | Upload documents, images, videos via LlamaCloud, Unstructured, or Docling (local) |
| Hybrid Search | Semantic + Full Text Search with Hierarchical Indices and Reciprocal Rank Fusion |
| Cited Answers | Chat with your knowledge base and get Perplexity style cited responses |
| Deep Agent Architecture | Powered by LangChain Deep Agents planning, subagents, and file system access |
| Universal LLM Support | 100+ LLMs, 6000+ embedding models, all major rerankers via OpenAI spec & LiteLLM |
| Privacy First | Full local LLM support (vLLM, Ollama) your data stays yours |
| Team Collaboration | RBAC with Owner / Admin / Editor / Viewer roles, real time chat & comment threads |
| Video Generation | Generate videos with narration and visuals |
| Presentation Generation | Create editable, slide based presentations |
| Podcast Generation | 3 min podcast in under 20 seconds; multiple TTS providers (OpenAI, Azure, Kokoro) |
| Browser Extension | Cross browser extension to save any webpage, including auth protected pages |
| 27+ Connectors | Search Engines, Google Drive, OneDrive, Dropbox, Slack, Teams, Jira, Notion, GitHub, Discord & more |
| Self Hostable | Open source, Docker one liner or full Docker Compose for production |
Full list of External Sources
Search Engines (Tavily, LinkUp) · SearxNG · Google Drive · OneDrive · Dropbox · Slack · Microsoft Teams · Linear · Jira · ClickUp · Confluence · BookStack · Notion · Gmail · YouTube Videos · GitHub · Discord · Airtable · Google Calendar · Luma · Circleback · Elasticsearch · Obsidian, and more to come.
FEATURE REQUESTS AND FUTURE
SurfSense is actively being developed. While it's not yet production-ready, you can help us speed up the process.
Join the SurfSense Discord and help shape the future of SurfSense!
Roadmap
Stay up to date with our development progress and upcoming features!
Check out our public roadmap and contribute your ideas or feedback:
Roadmap Discussion: SurfSense 2026 Roadmap
Kanban Board: SurfSense Project Board
Contribute
All contributions welcome, from stars and bug reports to backend improvements. See CONTRIBUTING.md to get started.
Thanks to all our Surfers:
Star History