v0.4.0
Released: May 17, 2026 ยท Download
โจ New features
idx read โ file streaming with access logging
New command to stream file contents directly from the terminal.
idx read internal/core/services/search/search_command_service.go
idx tracks every file you read in .idx/read_log.idx and uses that data to boost recently accessed files in search results.
- 30-day TTL โ old entries are pruned automatically
- Inode-based rename detection โ log entries follow the file even after a rename
- Deletion pruning โ stale entries for deleted files are removed on next read
- 5-minute write cache โ batches log writes to avoid hammering disk on rapid reads
idx config show โ active configuration inspector
New subcommand that prints all 13 tunable keys with clear highlighting of which values come from .idx.yml vs. built-in defaults.
idx config show
Parallel directory indexing
idx init now indexes directories concurrently across all available CPU cores using a two-phase collect + index approach bounded by runtime.NumCPU. Large repositories index significantly faster.
Status reporting during idx init now shows a live spinner with per-directory progress.
Project-level .idx.yml configuration
Place an .idx.yml at your Git root to configure idx per-project. Supports all 13 tunable keys including BM25 parameters (k1, b), proximity weight, max workers, and cache TTL.
search:
k1: 1.5
b: 0.85
maxWorkers: 8
Precedence: built-in defaults โ .idx.yml โ CLI flags.
๐ Improvements
Rich idx status panel
idx status now renders a formatted overview panel instead of a bare success message:
- Project name and Git root path
- File and directory count
- Index size on disk
- Human-readable last-updated age
- Daemon status with PID and start time
- Active config overrides from
.idx.yml
Enhanced idx version output
Version output now includes full build information: Go version, target OS/arch, and commit SHA alongside the styled logo.
Watch command refactor
Cleaner daemon lifecycle management and more reliable incremental sync on file system events. Reduced surface area between the watch coordinator and the underlying indexing service.
Error messages
Unindexed directory errors now include the offending path and a concrete hint (idx init) instead of a generic failure.
๐๏ธ Architecture
- ADR 0014 โ project-level
.idx.ymlat Git root; pointer-field YAML adapter for override detection; defaults โ file โ flag precedence - ADR 0015 โ parallel directory indexing with bounded concurrency (
runtime.NumCPU) using two-phase collect + index - ADR 0016 โ
idx readstreams files viabufio.Scanner; access log at.idx/read_log.idxtracks reads with 30-day TTL, inode-based rename detection, deletion pruning, and a 5-min write cache ReadLogRepositoryandReadCommandServicefully tested with fake implementations- Core services refactored to meet cyclomatic complexity < 15 per function and SRP rules