Repository navigation
2.2.2 makes sources usable seconds after you add them, and adds speech recognition that runs on this computer: recordings become sources, and a mic in the composer turns your voice into text. PDFs with a text layer and Word files no longer wait on Docling, and on x64 Windows and Linux the bundled embedder runs at full precision, about 6 times as fast on our Windows test PC. In our tests on one Windows PC, the mean time from adding a file to it being ready fell from 476 s to 44 s across 231 real files. In Agentic chats, plugins get ready sooner, one plugin that hangs no longer takes the others with it, and each tool's permission is a choice of three. This release upgrades the library database, so read Known issues before updating.
Highlights
- Sources are ready in seconds. A PDF made on a computer is read from its own text layer, and Docling reads only a PDF's scanned or picture pages. A 46-page budget PDF was ready in about 9 s instead of about 2 minutes. Word files have their own reader, about 9 times as fast, with numbering that matches Word and searchable footnotes. On x64 Windows and Linux the bundled embedding model runs at full precision, about 6 times as fast on our Windows test PC. Long scans give way to new uploads and notes, and Cancel stops them within 8 pages. (#2289)
- Speech recognition on this computer. Add
.wav,.mp3,.flac,.oggor.ogarecordings as sources, and SurfSense transcribes them, with a time at the start of each passage. A mic beside Send in every chat turns your voice into text, and nothing goes to an online service. Settings › Speech recognition offers Nemotron 3.5 ASR Streaming 0.6B (931 MB, 26 languages, detects the language) and Canary 180M Flash (249 MB, English, German and French). (#2264, #2273) - Plugins get ready sooner, and one bad plugin no longer stops the rest. Plugins are prepared while your sources sync, where a cold chat with 8 plugins used to spend about 2 to 9 s on them first. A plugin that hangs shows "Couldn't reach" with its name after 25 s, and the others keep working. SurfSense's own plugins are faster and give the agent each result's data, and Amazon search returns products again. (#2260, #2291, #2262)
- Three permissions per tool, and plugin search. In a plugin's details each tool is Always allowed, Needs approval or Blocked, and each group has a menu that sets every tool at once. Settings › Plugins has a Search plugins box that looks through Yours and Browse together. (#2270, #2256)
- License status updates at once. Importing, replacing or removing a license updates SurfSense's paid plugins right away, and a plugin your license doesn't unlock is no longer offered after
@or given to the agent. (#2261) - Use your ChatGPT plan in one click. A new row below Use a server, in Settings › Text gen › Add model and in onboarding, signs in with a ChatGPT Plus or Pro plan. (#2259)
- Podcasts as MP3. Studio's Podcast saves the episode as MP3, about a sixth of the size of the WAV it used to be. (#2183)
- Failures that say so. A reply that the model's server cuts off with an error now fails with Retry instead of being saved as a finished answer. An agent that keeps crashing is retried after 10 s and 20 s, then stops with one "The agent stopped" notification, and Agentic chats fail at once instead of after a minute. (#2170, #2235)
Known issues
- The first start needs free disk space. 2.2.2 upgrades your library database on its first start and saves a copy of it first. It needs free space about the size of
~/.surfsense/surfsense.db. If there isn't enough, SurfSense closes without a message. Free some space and start it again. - Going back to 2.2.1 needs a manual restore. 2.2.1 can't open a database that 2.2.2 has upgraded. Before you reinstall 2.2.1, quit SurfSense and replace
~/.surfsense/surfsense.dbwith the copy saved at the upgrade,~/.surfsense/backups/0029-0030.db. Ifsurfsense.db-walorsurfsense.db-shmis still there, delete it too. Anything you added after updating won't be in the copy, and that includes sources, recordings, chats and notes. If you updated straight from 2.2.0, the copy is0027-0030.db. To get back the speech model's disk space, delete the model in Settings › Speech recognition first. - Sources you already have aren't read again. PDF and Word sources added before 2.2.2 keep their earlier reading, and nothing is re-indexed. To get the new reading, delete the source and add it again.
- Figures come after the text. A PDF read from its text layer, or a Word file with images, gets its figures in a background pass after it shows as ready. A PDF over 40 pages, or one whose charts are drawn as lines, gets them only when the agent or Studio asks. Until then the agent is told to ask again in a minute, and a Studio draft places no figures from that source. The pass keeps the CPU busy for a few minutes after your sources are ready, and a model running on this computer shares the CPU with it.
- PDFs read from their text layer are plain text. They have no headings, and a table becomes lines of values without columns, which is what citations show.
- Scans are as slow as before. A scanned PDF is still read by Docling, so a 20-page scan takes about as long as it did, and a long reading shows no progress in Sources.
- No faster embedding on Macs. The macOS build is arm64 only, and its embedding model runs as before. The new PDF and Word readers still apply.
- Some recording formats can't be added yet. Opus (in
.ogg,.ogaor.opusfiles),.m4a,.aacand.webmaren't supported, and many apps save voice notes as Opus. A file can be up to 500 MB. A recording can't be played, and a citation can't open it at its time. - Speech recognition needs a download and free memory. The model is a one-time download of 931 MB or 249 MB. Loading it needs about 2.9 GB of free memory for Nemotron or 1.9 GB for Canary, which a busy 8 GB computer may not have.
- Tell Canary the language you speak. Canary can't detect the language, and set to the wrong one it may write English instead of a transcript. It doesn't offer Spanish yet. One Spoken language covers both recordings and voice input.
- Voice input uses your default microphone, with no choice of device. If the speech recognition engine crashes, the notice reads "A background service stopped" and asks you to restart, though SurfSense restarts it by itself.
- Three plugin tools turn off once. With the plugin host update, YouTube's
scrapeandcommentsand TikTok'sscrapehave new descriptions, so they're marked Changed and stay off until you allow them again in the plugin's details. This happens in 2.2.1 too. Google Search now returns 4 to 9 People Also Ask questions instead of 9 to 12. - Notion has more tools than a chat gives the agent. Notion lists 39 tools, and a chat gives the agent the first 24 plugin tools plus every tool of a plugin you mention. Type
@notionwhen you want the agent to use it.
Turning the new readers off
Each is an environment variable with no setting in the app. Set one and restart SurfSense.
SURFSENSE_LOCAL_PDF_TEXT_LAYER=offsends every PDF to Docling whole again.SURFSENSE_LOCAL_DOCX_READER=doclingreads Word files with Docling again, which keeps their figures at ingest.SURFSENSE_LOCAL_EMBED_PRECISION=fp16runs the bundled embedder as shipped, without the FP32 speed-up.
What's Changed
- docs(proposals): local speech recognition by @MODSetter in #2254
- docs(plugins): remote plugins move from proposal to architecture, with a guide to listing one by @AnishSarkar22 in #2255
- feat(plugins): search connected and listed plugins together by @AnishSarkar22 in #2256
- feat(registry): Verified by maintainers, and CI connects to each new or changed plugin by @AnishSarkar22 in #2257
- feat(registry): DeepWiki as Verified, and Notion listed by @AnishSarkar22 in #2258
- feat(models): sign in with a ChatGPT plan in one click, beside Use a server by @AnishSarkar22 in #2259
- fix(plugins): a paid plugin's license verdict shows at once, from the plugin host by @AnishSarkar22 in #2261
- feat(web): redesign the marketing site by @AnishSarkar22 in #2263
- feat(local): local speech recognition, for recordings as sources and voice input by @MODSetter in #2264
- perf(plugins): make the scraper plugins fast, and let the agent read their results by @MODSetter in #2262
- perf(agent): get plugins ready beside the sync, and stop waiting on the plugin check by @MODSetter in #2260
- feat(local): give a refine's refusals codes the interface can translate by @ybai08 in #2247
- ci(desktop): run desktop tests on pushes to dev, and on Windows and macOS by @MannXo in #2240
- feat(local): generate third-party notices at build time by @Cedric921 in #2185
- feat(local): three-way tool permissions, one shared Button, nested dialogs that block by @AnishSarkar22 in #2270
- fix(local): name Visual Studio's generator when compiling audio.cpp on Windows by @MODSetter in #2271
- docs(import): align thread recovery documentation by @fukalous in #2248
- feat(local): encode a podcast episode as MP3 by @Cedric921 in #2183
- fix(local): fail a reply the endpoint cuts off with an in-stream error by @MohammadHijjawi97 in #2170
- fix(agent): back off opencode restarts and fail Agentic fast when it cannot stay up by @MannXo in #2235
- fix(local): print a script's traceback relative to its run folder by @TonyWu2333 in #2203
- feat(local): add Canary 180M Flash as a second speech model by @AnishSarkar22 in #2273
- chore: plain Apache LICENSE, and the site and README say the plugins have shipped by @MODSetter in #2272
- chore: trim the pricing notes and the Reddit line, and list the plugins in a README table by @MODSetter in #2274
- docs(readme): the Plugins section and the BSL folders in every translated README by @MODSetter in #2275
- docs(readme): License says Apache-2.0 only, in every README by @MODSetter in #2276
- chore: link the new subreddit, r/SurfSenseAI by @MODSetter in #2277
- docs(readme): Plugins before How it compares, in every README by @MODSetter in #2278
- fix(local): stage audio.cpp again when it lacks a curated family by @MODSetter in #2279
- docs(changelog): the desktop releases, 2.0.0 to 2.2.1 by @MODSetter in #2280
- feat(web): each announcement gets its own page, like the blog by @MODSetter in #2281
- chore(web): drop AnythingLLM from the homepage comparison by @MODSetter in #2282
- chore(web): the downloads heading says the license comes with it by @MODSetter in #2283
- feat(web): announce SurfSense 2.0, and retire the old announcements by @MODSetter in #2284
- docs(proposals): use your Claude plan through the user's own Claude Code by @AnishSarkar22 in #2285
- docs(adr): a Claude plan runs through the user's own Claude Code by @AnishSarkar22 in #2286
- perf(local): sources usable in seconds: PDF text layer, Word reader without Docling, FP32 embedder on x86-64 by @MODSetter in #2289
- fix(local): tunnels through SurfSense's proxy work under uvloop by @AnishSarkar22 in #2291
- docs(changelog): v2.2.2 by @MODSetter in #2292
- [Local|Release] Release desktop 2.2.2 by @MODSetter in #2293
New Contributors
- @TonyWu2333 made their first contribution in #2203
Full Changelog: v2.2.1...v2.2.2