Skip to content

LocalSynapse 2.18.0

Choose a tag to compare

@Ryan-gw-park Ryan-gw-park released this 27 Aug 01:22

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-mcp binary 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