Skip to content

v0.7.0 - Path-scoped and external local search

Choose a tag to compare

@clemlesne clemlesne released this 12 Jun 16:52

This release expands seek from searching only the current Git repository to searching the local working set you point at.

You can now pass path operands after the query:

seek 'handleRequest'                 # current Git worktree
seek 'handleRequest' ./src ./cmd     # selected paths
seek 'TODO' ../notes                 # folder outside Git
seek 'needle' ./src/server.go        # exact file

Highlights

  • Added seek [flags] <query> [path...] support.
  • Added scoped search for files and directories inside the current Git worktree.
  • Added search for external Git repositories and worktrees, preserving Git ignore semantics.
  • Added search for regular folders and exact files outside Git.
  • Moved Zoekt indexes out of searched repositories and folders into the user cache:
    • macOS: ~/Library/Caches/seek/corpora/<id>/
    • Linux: ${XDG_CACHE_HOME:-~/.cache}/seek/corpora/<id>/
  • Added corpus-aware result formatting. Multi-root searches show the matching root with [git: ...] or [folder: ...].
  • Added folder delta refreshes, stale-shard handling, missing-shard rebuilds, and bounded indexing for large corpora.

Performance and reliability

  • Optimized warm search by loading Zoekt shards directly instead of using the directory searcher.
  • Added parallel shard loading for multi-shard indexes.
  • Added fast Git path resolution for normal repositories, avoiding an unnecessary git rev-parse subprocess on the common path.
  • Reduced allocation overhead in state hashing and dirty-file fingerprinting.
  • Added indexing budgets to fail predictably on very large inputs instead of reading unbounded local content:
    • 10 MiB max indexed file size
    • 5 GiB max indexed bytes per corpus
    • 1,000,000 candidate files for standard folders
    • 10,000,000 candidate files for Git corpora

Usage notes

Existing seek '<query>' usage continues to work.

A few syntax rules now matter more:

  • Flags must come before the query: seek -n 5 'Foo' ./src
  • Query filters still stay inside one quoted query argument: seek 'sym:Foo file:bar'
  • Tokens after the query are filesystem paths, not extra query filters.
  • Path operands must exist and cannot be symlinks.
  • Standard folder mode indexes regular files and only skips .git metadata directories. It does not apply .gitignore, vendor, dependency, build, or cache directory rules by name. Use narrower path operands for large folders.

Old per-repository .seek-cache directories are no longer used by v0.7.0 indexes. They are not migrated or deleted automatically.

Development

  • Migrated CI, release, and CodSpeed jobs to GitHub-hosted runners.
  • Switched unit test runs to gotestsum with JUnit XML output.
  • Expanded regression coverage for path operands, user-cache indexes, external Git roots, folder corpora, exact-file search, stale shards, indexing caps, corrupt shards, and concurrent search/reindex behavior.

Full changelog: v0.6.0...v0.7.0