github dualeai/seek v0.4.0

latest releases: v0.16.2, v0.16.1, v0.16.0...
5 months ago

What's Changed

Parallel committed + uncommitted indexing

When dirty files exist, committed and uncommitted indexing now run concurrently. They write to different shard files (repo name vs uncommitted prefix), so no coordination is needed. On repos with dirty files, this eliminates the sequential wait — both indexers finish in the time of the slower one.

Smaller zoekt shards for faster cold index

Reduced shard size from zoekt's default 100MB to 10MB. On kubernetes (29k files), this produces ~23 shards instead of ~3, letting zoekt's parallel shard builder use ~5 cores instead of ~1.7 — 2.7× faster cold index. No measurable impact on warm search latency.

Lightweight post-verification via restat

Replaced the full git status call after indexing (~250–450ms on large repos) with cheap Lstat calls on only the known dirty files (~0.004ms). Detects mtime, size, and inode changes during the indexing window. New untracked files and HEAD changes are deferred to the next search's git status, which always runs.

Automatic core.untrackedCache

seek now enables core.untrackedCache in .git/config (per-repo, reversible). This lets git skip scanning unchanged directories during git status — reducing it from ~400ms to ~70ms on large repos (6–7×).

Measured benchmarks

README now reports measured numbers instead of estimates:

Repo Files Cold index Warm search Dirty re-index
spf13/cobra 66 0.4s 75ms 89ms
prometheus/prometheus 1,583 1.4s 82ms 96ms
kubernetes/kubernetes 29,179 7.5s 132ms 145ms
torvalds/linux 93,016 59s 295ms 301ms

New make test-bench-repo SEEK_BENCH_REPO=/path target and BenchmarkLargeRepo_Phases suite for profiling individual pipeline stages.

Full Changelog: v0.3.4...v0.4.0

Don't miss a new seek release

NewReleases is sending notifications on new releases.