v2.1.0
MODSetter/SurfSensev2.1.0Oct 4, 2026by CREDO23
Upgrading?
AI Summary
This release introduces a comprehensive plugin system, direct Anthropic API connectivity, and voice podcast capabilities. It also includes significant UI polish, visual enhancements, and various stability fixes for local models and chat interactions.
Key Highlights
- New Plugin System with SDK, CLI, and Manifest validation
- Direct Anthropic API connection using only an API key
- Voice podcast generation feature
- Vision model support with image upload capabilities
- UI enhancements including wordmark and Windows overlay scrollbars
New Features
- Plugin SDK for runtime execution
- Direct Anthropic API key connection
- Voice podcast generation with server audio models
- Image upload support for vision chat models
- Markdown rendering of thinking traces
- Windows overlay scrollbars
Full Release Notes
## What's Changed * feat(web,local): add wordmark, Windows overlay scrollbars, and marketing site polish by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/1935 * fix(local): delete an artifact's files when it is deleted as a document by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/1934 * fix(indexing): keep a table's last row when it ends the document by @MohammadHijjawi97 in https://github.com/MODSetter/SurfSense/pull/1936 * fix(export): number nested BlockNote lists on their own by @MohammadHijjawi97 in https://github.com/MODSetter/SurfSense/pull/1937 * feat(local): connect to Anthropic directly with just an API key by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/1933 * docs(architecture): delete Known gaps that v2.0.3 closed by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2014 * docs(documents): record that deleting an artifact document removes its files by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2015 * fix(local): don't offer Retry for model_cannot_run / context_too_long chat errors by @biggdawg320 in https://github.com/MODSetter/SurfSense/pull/2016 * docs(local): propose sending images to vision models in chat by @vintcessun in https://github.com/MODSetter/SurfSense/pull/2031 * [Docs|Plugins] Plan the plugin lifecycle by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2043 * [Docs|Plugins] Release plugins with the app by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2048 * fix(license): answer 503 before Keygen when SMTP config is invalid by @mehul2409 in https://github.com/MODSetter/SurfSense/pull/2047 * feat(local): read one document with its body by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2045 * fix(local): open the issue dialog from About's Report an issue by @MannXo in https://github.com/MODSetter/SurfSense/pull/2026 * fix(local): withdraw a host's egress grant when its last connection is deleted by @8rulerstar in https://github.com/MODSetter/SurfSense/pull/2027 * fix(release): refuse to publish a prerelease desktop version by @MannXo in https://github.com/MODSetter/SurfSense/pull/2025 * fix(local): read a stored license issued ahead of the clock as clock_untrusted by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2019 * fix(local-catalog): log why a broken manifest falls back to empty by @GhostCoder6969 in https://github.com/MODSetter/SurfSense/pull/2017 * fix(models): explain searched build fit failures by @fukalous in https://github.com/MODSetter/SurfSense/pull/2042 * fix(studio): trust the server format catalog by @fukalous in https://github.com/MODSetter/SurfSense/pull/2038 * fix(local): stop a cancelled podcast or office job at the next boundary by @vintcessun in https://github.com/MODSetter/SurfSense/pull/2030 * feat(local): pass a JSON schema from run_model, starting with the quiz by @vintcessun in https://github.com/MODSetter/SurfSense/pull/2032 * fix(studio): translate unavailable reasons as sentences by @fukalous in https://github.com/MODSetter/SurfSense/pull/2036 * fix(local): discard a chat turn that ends with no answer text by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2037 * fix(chat): send no citation rules when retrieval finds nothing by @MONISMALIK1 in https://github.com/MODSetter/SurfSense/pull/2028 * fix(local): read the size in a Featherless-shaped listing row's id by @jamalkamaladdin in https://github.com/MODSetter/SurfSense/pull/2029 * fix(sunset): gate the web redirect on DEPLOYMENT_MODE by @MannXo in https://github.com/MODSetter/SurfSense/pull/2023 * fix(sunset): pause hosted recurring user work by @sb123sb123 in https://github.com/MODSetter/SurfSense/pull/2020 * ci(web): run the surfsense_web unit tests on pull requests by @MannXo in https://github.com/MODSetter/SurfSense/pull/2024 * fix(sunset): include sunset_url in the 410 export-only body by @MannXo in https://github.com/MODSetter/SurfSense/pull/2022 * test(sunset): cover hosted account purge guards by @fukalous in https://github.com/MODSetter/SurfSense/pull/2040 * fix(local): inspect llama.cpp model size at selection by @fukalous in https://github.com/MODSetter/SurfSense/pull/2034 * test(local): run the frontend tests in UTC by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2050 * fix(local): lint formatMessage values that are not written as a literal by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2054 * fix(ui): connect tooltip descriptions to screen readers with role and aria-describedby by @AdamMagued in https://github.com/MODSetter/SurfSense/pull/2018 * fix(local): link license settings to the trial and pricing pages by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2052 * fix(local): keep a model the manifest cannot call out of the pickers and the selection by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2059 * fix(local): give a loopback connection's unknown model the compact prompt by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2051 * fix(local): refuse a curated install that will not fit before any bytes move by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2056 * fix(local): record an install file by file, so a cut-off one is never called installed by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2058 * fix(local): say once on the chat model screen that the runtime is down by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2057 * feat(local): render the thinking trace as markdown by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2049 * test(local): cover a chat reply the client hangs up on by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2041 * fix(local): cap a chat question at its share of the window by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2053 * feat(local): send images to vision chat models, keep upload filenames, drop sources into the panel by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2060 * [Plugins|Manifest] Validate manifest.json by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2069 * [Plugins|Manifest] Accept the stamped version, explain name rules by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2070 * [Plugins|SDK] Add the plugin SDK by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2073 * [Plugins|CLI] Design the author commands by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2075 * [Plugins|SDK] Test the SDK against the real app by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2076 * [Plugins|CLI] Add the author commands by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2079 * [Local|Sources] Reload Sources on document events by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2081 * feat(local): voice podcasts with server audio models by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2083 * [Plugins|Runtime] Run a plugin in its own process by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2082 * [Plugins|Runtime] Stop a run the plugin does not end by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2084 * refactor(local): name the curated fit refusal in llama.cpp's check by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2071 * feat(local): constrain the flashcards reply with a JSON schema by @vintcessun in https://github.com/MODSetter/SurfSense/pull/2074 * feat(local): ground a large Studio selection on every document, by prompt where it has one by @vintcessun in https://github.com/MODSetter/SurfSense/pull/2078 * fix(chat): preserve pre-stream error details by @fukalous in https://github.com/MODSetter/SurfSense/pull/2035 * fix(chat): shield disconnect cleanup by @fukalous in https://github.com/MODSetter/SurfSense/pull/2062 * fix(local-models): refuse gated repo installs by @fukalous in https://github.com/MODSetter/SurfSense/pull/2063 * fix(local-models): skip unchanged preset writes by @fukalous in https://github.com/MODSetter/SurfSense/pull/2064 * fix(desktop): report sidecar crashes by @fukalous in https://github.com/MODSetter/SurfSense/pull/2065 * fix(local-models): explain unpaired projectors by @fukalous in https://github.com/MODSetter/SurfSense/pull/2066 * fix(local-models): reconcile copied gguf files by @fukalous in https://github.com/MODSetter/SurfSense/pull/2067 * fix(local): ask before fetching an image URL from a host the endpoint names by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2072 * docs(proposals): preview source files in the desktop app by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2088 * ci(coderabbit): review pull requests against dev automatically by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2091 * feat(local): show live CPU, RAM and GPU usage above Studio by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2092 * fix(desktop): recommend the Vulkan loader in the Linux deb by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2090 * fix(local): send a curated chat model's publisher temperature by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2085 * fix(license): let support correct a trial's address by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2086 * fix(license): suspend only the license a fully refunded charge paid for by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2087 * fix(license): refuse trial emails on the disposable-email-domains list by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2095 * fix(local): parse images offline, cut OCR errors and speed up Docling by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2096 * docs(proposals): GPU for the document parser by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2097 * fix(export): give each exported document its own path by @MohammadHijjawi97 in https://github.com/MODSetter/SurfSense/pull/2093 * docs(proposals): run the desktop stack in Docker, with CPU and CUDA images by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2098 * docs(proposals): order the Docker work as fourteen runnable steps by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2099 * fix(mcp): bump anyio, cryptography and pyjwt for security advisories by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2115 * fix(sandbox): bump fast-uri, js-yaml and undici in the remotion lockfile by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2116 * fix(whatsapp-bridge): bump sharp, protobufjs, qs and body-parser by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2117 * fix(local): patch pdfjs-dist, undici, urllib3 and other dependency advisories by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2118 * fix(web): patch next, pdfjs-dist and vulnerable transitive dependencies by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2119 * fix(backend): patch dependency advisories with lock bumps and floor raises by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2120 * fix(backend): lift the starlette and pyarrow caps, move transformers to 5 by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2121 * feat(local-backend): read CORS origins from SURFSENSE_LOCAL_CORS_ORIGINS by @qwist1233-cpu in https://github.com/MODSetter/SurfSense/pull/2122 * fix(plugins): stop failing runs queued in the worker's first second by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2129 * feat(desktop): preview PDF sources in-app by @kaaloo in https://github.com/MODSetter/SurfSense/pull/2128 * feat(local): move resource usage into Settings › Resources by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2130 * [Docs|Agent] Settle how opencode runs inside SurfSense by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2133 * [Agent|opencode] Let the agent answer a chat thread by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2135 * docs(sunset): say in both runbooks that the flag needs DEPLOYMENT_MODE=cloud by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2125 * perf(local): reload the Studio list on workspace events instead of polling every 1.5s by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2126 * fix(local): say whether the chosen image model's server is running by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2127 * feat(local): fall back to VITE_API_BASE for the API base by @MannXo in https://github.com/MODSetter/SurfSense/pull/2134 * docs(license): say Keygen ignores the case of metadata keys by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2139 * docs(local): record that the workspace stream leaks a listener per retry by @MODSetter in https://github.com/MODSetter/SurfSense/pull/2140 * fix(workspaces): clean up abort listener on retry timer and return early when aborted by @DYNOSuprovo in https://github.com/MODSetter/SurfSense/pull/2142 * fix(web): state the 18 October 2026 deletion date on /sunset by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2138 * feat(local): show how far the model has read a long prompt by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2144 * feat(local): choose the embedding model in onboarding by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2136 * [Agent|Engine] Give the agent only to models that can call tools by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2150 * feat(local): use a ChatGPT Plus or Pro plan as a chat model by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2151 * [Agent|Engine] Let the developer switch try models newer than the catalog by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2153 * [Agent|Tools] Give the agent SurfSense's search and Studio by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2152 * fix(local): keep a rename or note edit made while a document ingests by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2148 * feat(local): write notes and rename sources from the sources panel by @Cedric921 in https://github.com/MODSetter/SurfSense/pull/2132 * fix(local): stop Chromium's spellchecker from downloading dictionaries by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2145 * feat(local): add a switch to turn thinking off for chat answers by @ybai08 in https://github.com/MODSetter/SurfSense/pull/2143 * feat(local): source preview in the sidebar, grouped settings, Report issue tab, composer add menu by @AnishSarkar22 in https://github.com/MODSetter/SurfSense/pull/2160 * [Agent|Release] Keep opencode off until a model passes the agent test by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2163 * [Web|Lint] Format the files Biome flags on dev by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2165 * [CI|Node] Build the website and the installers on Node 24 by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2162 * [Local|Release] Set the desktop version to 2.1.0 by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2164 * [CI|Release] Run the artifact actions on Node 24 by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2166 * [Local|Release] Release desktop 2.1.0 by @CREDO23 in https://github.com/MODSetter/SurfSense/pull/2167 ## New Contributors * @Cedric921 made their first contribution in https://github.com/MODSetter/SurfSense/pull/1934 * @MohammadHijjawi97 made their first contribution in https://github.com/MODSetter/SurfSense/pull/1936 * @biggdawg320 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2016 * @vintcessun made their first contribution in https://github.com/MODSetter/SurfSense/pull/2031 * @mehul2409 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2047 * @ybai08 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2045 * @MannXo made their first contribution in https://github.com/MODSetter/SurfSense/pull/2026 * @8rulerstar made their first contribution in https://github.com/MODSetter/SurfSense/pull/2027 * @GhostCoder6969 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2017 * @fukalous made their first contribution in https://github.com/MODSetter/SurfSense/pull/2042 * @MONISMALIK1 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2028 * @jamalkamaladdin made their first contribution in https://github.com/MODSetter/SurfSense/pull/2029 * @sb123sb123 made their first contribution in https://github.com/MODSetter/SurfSense/pull/2020 * @AdamMagued made their first contribution in https://github.com/MODSetter/SurfSense/pull/2018 * @qwist1233-cpu made their first contribution in https://github.com/MODSetter/SurfSense/pull/2122 * @kaaloo made their first contribution in https://github.com/MODSetter/SurfSense/pull/2128 * @DYNOSuprovo made their first contribution in https://github.com/MODSetter/SurfSense/pull/2142 **Full Changelog**: https://github.com/MODSetter/SurfSense/compare/v2.0.3...v2.1.0
Related Repositories
public-apis/public-apis★ 491,192
A collective list of free APIs
NousResearch/hermes-agent★ 256,049
The agent that grows with you
yt-dlp/yt-dlp★ 200,218
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,540
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,701
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.