Changelog
0.4.0
Rename
- indexify → loupe. The binary, VS Code extension, index directory (
.loupe/), VS Code settings keys (loupe.*), and documentation now use the loupe name consistently. - Marketplace id
ukitomato.loupe-search. The extension package name isloupe-search(display name Loupe Search) because the short nameloupeis already taken on the Marketplace.
CLI / core
- Read-only mode when the index is locked. If another process (e.g.
loupe serve) holds the Tantivy writer lock,loupe searchand the MCP server open the index read-only and continue serving searches instead of failing withLockBusy. Build/sync remain unavailable until the writer is released.
0.3.0
CLI / core
- 2-character search. The index now stores bigrams as well as trigrams, so 2-char substring queries work — most useful for 2-char Japanese words (e.g.
契約,顧客) that were previously unsearchable. 1-char queries remain unsupported (nothing to pre-filter on). - Regex pre-filter accepts ≥2-char literal runs, including CJK. A pattern like
契約.*情報now uses the index instead of erroring; previously only ASCII literal runs of ≥3 chars counted. - Incomplete-result notice. When a query's candidate set hits the internal cap (so some matching files were not verified — most likely for a very common short query), the CLI prints a note on stderr and the MCP / sidecar responses flag it, instead of silently returning a partial set.
Rebuild required
The index format changed (bigrams added). Run loupe build --force once after upgrading. A plain sync only reindexes changed files, so it will not backfill bigrams into an existing index.
0.2.0
VS Code extension
- Sidebar search view (Activity Bar → loupe icon,
Ctrl+Alt+Shift+F) — persistent panel with streaming results grouped by file, match highlighting, and file-at-line navigation.- File group headers show the filename on its own line with the directory path below; hover the header to see the full path as a tooltip.
Aacase-sensitive toggle..*regular-expression toggle.- Max results dropdown — 50 / 100 / 300 / 1000 / ∞.
···reveals path filter fields:- Files to include — glob patterns to restrict results (e.g.
src/,*.java). - Files to exclude — glob patterns to hide results (e.g.
*.min.js,test/). - Both support
*(within segment),**(across segments),?(single char), or plain substring. Filters are applied client-side without re-searching.
- Files to include — glob patterns to restrict results (e.g.
CLI / core
--case-sensitiveflag forloupe search— exact-case substring and regex matching. The trigram phase still uses lowercase for fast candidate selection; the verify step re-checks original bytes when--case-sensitiveis set.
CI
vscode.yml: changed trigger fromrelease: publishedtoworkflow_runto work around the GitHub Actions restriction thatGITHUB_TOKEN-created releases do not cascade to other workflows.
0.1.0
Initial release.
- Fast indexed full-text code search over a Tantivy trigram index.
- One binary, three front-ends sharing a single index: a CLI (
init/build/sync/search/status), an MCP stdio server (mcp), and an NDJSON sidecar (serve) for the VS Code extension. - Roots and per-folder encodings are configured in
settings.json— the single source of truth read by all three front-ends. - Per-folder encoding decoded at index time: UTF-8, Shift_JIS, and EUC-JP coexist in one index.
- Substring and regex search: trigram candidates → exact verify (parallel).
- Search auto-syncs changed files first; a filesystem watcher keeps the index fresh incrementally.
- Index stored in
<workspace>/.loupe/(settings.jsonis committable; the index body is git-ignored). - Native binaries per platform; no Docker, no runtime dependencies.