v2.2.0

MODSetter/SurfSensev2.2.0Oct 9, 2026by MODSetter

Upgrading?

AI Summary

This release introduces major enhancements to the File Agent with Office and PDF support, background processing for chat replies, and Studio improvements like downloadable Markdown and a floating Refine box. It also adds new curated models and redesigns the plugin architecture.

Key Highlights

  • File Agent now supports editing files, Office documents, and PDF tools with inline previews.
  • Studio format gains downloadable Markdown documents and a floating Refine box.
  • Chat and agent replies can now run in the background without blocking the UI.
  • New curated model Qwen3.8 27B is available.
  • Plugins have been redesigned as MCP servers behind a unified tool gateway.

Breaking Changes

  • The database is upgraded on the first start, making it impossible to downgrade to 2.1.0 without manually restoring a backup.
  • Plugins have been redesigned as MCP servers, requiring updates to client-side integrations.

New Features

  • File Agent: edit files as tracked changes, support for PowerPoint and Excel, PDF tools, templates, and data analysis.
  • Studio: downloadable Markdown documents and a floating Refine box.
  • Background processing for chat and agent replies.
  • New curated model Qwen3.8 27B added to the chat models list.
  • Resizable sidebars and comments in the Word viewer.
  • Smooth streaming for live replies.
  • Plugins redesigned as MCP servers.

Full Release Notes

## Known issues

- **The first start needs free disk space.** 2.2.0 upgrades your library database on its first start and saves a copy of it first, so 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.1.0 needs a manual restore.** 2.1.0 can't open a database that 2.2.0 has upgraded. Before reinstalling 2.1.0, quit SurfSense and replace `~/.surfsense/surfsense.db` with the copy saved at the upgrade, `~/.surfsense/backups/0023-0027.db`.
- **An interrupted import from the hosted web app can miss chats.** If an import stops part-way, importing the same export again doesn't bring in the chats it missed (#1958). Keep your export ZIP, delete the imported workspace, and import the ZIP again.

## What's Changed
* fix(export): strip every citation marker form from exported chats by @MohammadHijjawi97 in https://github.com/MODSetter/SurfSense/pull/2094
* test(license): cover the portal routes, their rate limits and Keygen by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2123
* fix(local): keep a model installed when a server still holds its file open by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2124
* fix(local): announce a finished reply and name the conversation by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2131
* fix(local): tell a dead pin and a checksum mismatch apart in installs by @DidusOleh in https://github.com/MODSetter/SurfSense/pull/2137
* feat(local): give a Studio format's unavailable reason a code to translate by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2146
* fix(desktop): retry the staging rename while Windows holds the folder by @DevSchretl in https://github.com/MODSetter/SurfSense/pull/2161
* docs(local): say the bundled embedder is FP16, with its measured size and speed by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2158
* fix(local): refuse a chat turn whose images outgrow the model's window by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2154
* fix(local): revoke the ChatGPT refresh token on sign-out and delete by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2156
* test(local): cover how host memory is read from the OS by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2157
* feat(local): give install events a code the interface can translate by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2168
* File agent: folders, PowerPoint and Excel, templates, per-chat folders, inline previews and model capability levels by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2177
* feat(chat): keep chat and agent replies running in the background by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2179
* feat(sources): tidy the sources panel and rebuild its drag and drop by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2180
* [Local|Cache] Let the model reuse the start of every prompt by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2178
* feat(studio): downloadable Markdown documents and a floating Refine box by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2190
* refactor(local): drop the disk-space error wrapper nothing sends a body for by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2169
* test(local): keep the PDF letters test passing on a computer with no CJK font by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2186
* fix(local): say the database copy failed when removing its partial file fails too by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2187
* test(local): upload each file under its own name when its path uses backslashes by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2188
* fix(agent): commit before a sync waits for its thread's lock by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2189
* fix(local): offer a new chat when an agent thread's model cannot run it by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2175
* feat(local): send a curated chat model's publisher top_p, top_k and min_p by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2182
* refactor(local): hold the Studio list in TanStack Query so open artifacts refresh too by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2176
* feat(local): call each remote model on its own route, and run the agent on a ChatGPT plan by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2192
* feat(local): add Qwen3.8 27B to the curated chat models by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2193
* File agent: edit users' files as tracked changes, Office support, PDF tools and data analysis by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2194
* Resizable sidebars, comments in the Word viewer, and small models reading the ticked file by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2195
* Smooth streaming: render only the live reply, and stop the code-highlight leak by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2197
* ci(local): gate build-sdcpp on the staged sd-server generating an image by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2159
* perf(models): debounce model search and cache Hugging Face results by @Ehaan-Dadarkar in https://github.com/MODSetter/SurfSense/pull/2198
* feat(local): give a fit badge a code the interface can translate by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2191
* fix(local): retire the pre-host egress grants in revision 0027 by @8rulerstar in https://github.com/MODSetter/SurfSense/pull/2061
* test(local): do not count what macOS gives every process as a leak into a script by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2199
* feat(proxy): add NodeMaven provider by @alkaz-nodemaven in https://github.com/MODSetter/SurfSense/pull/2196
* Basic (Q&A) and Agentic modes, a 270-model tested list, and the agent in installers by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2207
* test(local): wait for the error tooltip to close, not for its text to change by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2201
* docs(local): name the 0027 migration test in data-model.md by @8rulerstar in https://github.com/MODSetter/SurfSense/pull/2202
* fix(local): offer no thinking switch in an agent thread by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2173
* fix(local): revoke the grant a ChatGPT sign-in replaces by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2174
* feat(local): give a model that cannot run a code the interface can translate by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2200
* perf(models): follow-ups to search debounce and cache by @Ehaan-Dadarkar in https://github.com/MODSetter/SurfSense/pull/2204
* feat(desktop): route main process warnings into the session log by @Ehaan-Dadarkar in https://github.com/MODSetter/SurfSense/pull/2205
* test(local): find the office pack's staging folder on macOS too by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2208
* docs(plugins): redesign plugins as MCP servers behind one tool gateway by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2206
* feat(chat): simplify the composer's mode menus and hide model capability tags in production by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2211
* docs(readme): a shorter README led by the format table, translated into ten languages by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2212
* [Local|Release] Release desktop 2.2.0 by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2214

## New Contributors
* @DidusOleh made their first contribution in https://github.com/MODSetter/SurfSense/pull/2137
* @DevSchretl made their first contribution in https://github.com/MODSetter/SurfSense/pull/2161
* @Ehaan-Dadarkar made their first contribution in https://github.com/MODSetter/SurfSense/pull/2198
* @alkaz-nodemaven made their first contribution in https://github.com/MODSetter/SurfSense/pull/2196

**Full Changelog**: https://github.com/MODSetter/SurfSense/compare/v2.1.0...v2.2.0

Related Repositories