Repository navigation
LocalSynapse 2.18.0
LocalSynapse 2.18.0
This release changes how LocalSynapse notices that your files changed, makes the connector fully
independent of the main window, and — for everyone still working through the large re-embedding
that began with 2.16.0 — makes that work faster, quieter, and finally visible.
About the re-embedding some of you are seeing
Some users upgrading from 2.15.x found LocalSynapse re-embedding their whole corpus and asked
why. The honest summary: 2.16.0 fixed a text-processing defect that had been silently corrupting
a large share of tokens before embedding. Correct search required rebuilding those embeddings —
genuine one-time work — but the 2.16.0 release notes failed to say so, which made it look
like a later release had thrown your work away. It had not, and 2.17.0 halved the total by
deduplicating identical content; but the surprise was our fault, and we have added a permanent
release gate so a change with this consequence can never ship silently again. Full detail is in
issue #4.
2.18.0 then changes how that work runs:
- The scheduler no longer idles half of every cycle. We measured the old design (normal
CPU priority, 50% duty) as the worst combination for foreground responsiveness; the new one
runs continuously at low priority with a hard ceiling of 70% of your CPU cores in every mode —
quieter in our measurements, and finishing in substantially less wall time (we will publish
measured completion numbers rather than estimates). - Content is processed in groups again. A change in 2.17.0 had it processing one item at a
time; on machines with many CPU cores that roughly halved the rate. Groups are back — but only
where they actually help: LocalSynapse now measures both approaches on your machine during
the first minutes of work and keeps whichever is faster. We found the answer genuinely
differs by machine — grouping was about twice as fast on a 32-core machine and about a third
slower on a 12-core one — so the software measures rather than assumes. The result is
re-measured if you change the indexing mode. - A progress panel finally tells you what is happening: how many unique pieces of content
remain, an estimate from your machine's actually-observed rate (shown only once enough
samples exist — never an invented number), and a reminder that keyword search works normally
throughout. - Upgrades can no longer silently restart embedding. A new upgrade-preservation test suite
pins it: same storage lineage → nothing re-embeds; and any future lineage change must ship
with an explicit release-note disclosure.
Scanning is now event-driven
Instead of repeatedly walking every folder on a timer, LocalSynapse now listens to the operating
system's change notifications and checks only what actually changed. If nothing changed, it does
not touch your disk at all.
- File changes are noticed as they happen through OS change notifications. The next
indexing pass (within ten minutes) then checks only those paths instead of walking the whole
disk. - Quiet cycles cost almost nothing. On our test machine (~97,000 files and folders), a
routine scan pass used to walk all of them in about 3 seconds, every 10 minutes, all day
(~14 million directory entries enumerated daily). After this release, a cycle with a handful
of changes checks just those paths, and a cycle with no changes skips enumeration entirely.
This matters most on large or networked drives: on one user's setup a single pass took ten
minutes and repeated every twenty-five, spending more of the machine's time re-reading an
unchanged network share than doing the indexing work they were waiting for. - Full scans still happen where they belong: once at every app start (so the index is
verified against reality), once a day as a correction pass, and whenever notifications could
have missed something — a burst of thousands of changes, or a drive that cannot be watched —
the app automatically falls back to a full scan. Reliability does not depend on the
notifications being perfect.
The connector no longer needs the app at all
The MCP connector is now fully independent of the main window, and we simplified how it ships:
instead of a separate limited binary, the connector is the main program running in a
windowless mode — same capabilities, one surface to maintain. What that changes for you:
- Semantic search always works through the connector, regardless of the search mode chosen
in the app — and the response now says honestly whether the semantic pass actually ran, so a
connected assistant can tell a keyword-only answer from a semantic one. - Several AI clients can connect at the same time — multiple Claude Desktop sessions, Claude
Code, and other MCP-capable agents, concurrently. Previously a second client could silently
fail to start. - The index stays fresh with the app closed: the connector process runs the indexing
pipeline itself whenever the app isn't running (and steps aside the moment you open it).
While idle it releases the embedding model from memory; only the first semantic query after a
long pause pays a short reload. - The old standalone
localsynapse-mcpbinary is retired and removed on upgrade; existing
connector registrations are repaired automatically at app start if they still point at it.
A "Check everything now" button
The data settings screen gains a manual full-scan button. If you ever doubt the index — after a
big move, a restored backup, an unplugged drive — one click re-verifies everything instead of
waiting for the daily pass.
Fewer pointless errors while indexing
- Office lock files are skipped. While a document is open, Word/Excel/PowerPoint keep a small
hidden companion file next to it. LocalSynapse was trying to read those as documents and failing.
On one user's diagnostic log they accounted for 41% of all parse failures — every one of them
from a file that was never a document. They are now excluded outright. - When a file genuinely fails to parse, the reason is recorded. Previously the diagnostic log
said only "parse error" with no explanation, and one failure path discarded the reason entirely.
If you ever send us a diagnostic log, we can now tell you why a file was skipped instead of
guessing.
A new, honest status line
The data screen gains a "last full check" line. It moves only when a genuine full scan ran —
never for a partial pass — while the file-count progress numbers stay current on every cycle.
The display never claims a check that did not happen.
Search behavior, ranking, and your index contents are unchanged — this release changes when and
how the scanner runs, not what it finds. (A new scan-behavior test suite of 147 checks, plus a
scan golden master, pins the equivalence: an event-narrowed check must produce exactly the same
index state as a full walk.)
Install
Download the installer below and run it. Existing installations upgrade in place and keep their
index and settings.
Verify the download against SHA256SUMS.txt if you would like to.
— Ryan