Download Latest Version semlith-v0.51.1-x86_64-pc-windows-msvc.zip (24.5 MB)
Home / v0.33.1
Name Modified Size InfoDownloads / Week
Parent folder
semlith-v0.33.1-aarch64-apple-darwin.tar.gz 2026-09-30 24.5 MB
semlith-v0.33.1-aarch64-unknown-linux-gnu.tar.gz 2026-09-30 24.0 MB
semlith-v0.33.1-x86_64-pc-windows-msvc.zip 2026-09-30 22.2 MB
semlith-v0.33.1-x86_64-unknown-linux-gnu.tar.gz 2026-09-30 25.2 MB
SHA256SUMS 2026-09-30 448 Bytes
README.md 2026-09-30 3.2 kB
Semlith 0.33.1 source code.tar.gz 2026-09-30 4.1 MB
Semlith 0.33.1 source code.zip 2026-09-30 4.3 MB
Totals: 8 Items   104.3 MB 0

Search answers on a large multi-repository store

Found searching the 70-repository benchmark corpus (879,439 chunks, 66,333 files) through the daemon: every search ran for 31 to 244 seconds and then failed with "too many SQL variables", and other searches queued behind it.

The graph list's walk is bounded. The walk resolved every name it reached in one SQL IN list, past SQLite's limit of 32,766 variables; symbols_by_names now queries in batches. It visited up to 2,000 names in alphabetical order, and now visits at most 128, heaviest first. It also walked through and into names with hundreds of definitions — get has 712 — and joined every candidate definition. A name with more than 32 definitions is no longer walked through or into by search; semlith_neighbors, semlith_impact and semlith_path still resolve every edge.

Seeding the walk uses an index. The walk's seeds were looked up by chunk with no index on symbols.chunk_id, a scan of 1.25 million rows per seed chunk. An existing store builds the new index on its next open. The change is additive: nothing is re-indexed and the store format is unchanged.

A failed graph list no longer fails the search. It is logged, and the vector and keyword lists answer.

Measured through the daemon at 879,439 chunks on the M1 (8 GB), over three sessions: a concept search p50 257 to 363 ms and p95 500 to 920 ms, an identifier search p50 about 100 ms, and no errors. Retrieval is unchanged: the development set scores 56/61/67 of 77 at hit@1/3/8 with every question's rank identical to 0.33.0, and the sealed set 25/27/28 of 30 on both 0.33.0 and 0.33.1. The full table is in docs/performance.md.

Exact search finds every line ripgrep finds

Found comparing exact search against ripgrep over the same 66,333 files on the benchmark corpus, where one pattern counted 67 lines against rg's 68.

A < in HTML text no longer hides the lines after it. The HTML reader read every < as the start of a tag and skipped to the next >, so text such as input.pos < input.size in the zstd manual dropped the thirteen lines up to the next > from the index. A < now starts markup only when a letter, /, ! or ? follows it, as a browser reads it. EPUB chapters use the same reader. Already-indexed HTML and EPUB files pick this up when they are next re-read.

Every file is searched, and every line keeps its number. Exact search skipped any file whose stored chunks did not start at line 1, so twelve Markdown files on the corpus were never searched, and it could shift line numbers after a gap between chunks. A line no chunk holds is now an empty line.

Install

macOS and Linux

:::sh
curl -fsSL https://raw.githubusercontent.com/semlith/semlith/main/install.sh | sh

Windows

:::powershell
irm https://raw.githubusercontent.com/semlith/semlith/main/install.ps1 | iex

Or download the archive for your platform below, unpack it, and put semlith on your PATH. Intel macOS has no prebuilt binary: ONNX Runtime no longer publishes x86_64 macOS builds.

Verify a download against SHA256SUMS before running it.

Source: README.md, updated 2026-09-30