v2.1.0
reacherhq/check-if-email-existsv2.1.0Oct 4, 2026by CREDO23
Upgrading?
AI Summary
This release focuses on UI polish, local model enhancements, and the planning of a plugin system. It includes marketing site improvements, direct Anthropic API connections, and various fixes for document handling and chat errors.
Key Highlights
- Added wordmark, Windows overlay scrollbars, and marketing site polish
- Connected to Anthropic directly with just an API key
- Documented and planned the plugin lifecycle
- Improved document reading and chat error handling
New Features
- Plugin SDK and lifecycle execution
- Render thinking trace as markdown
- Voice podcasts with server audio models
- Send images to vision chat models
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
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one