v0.8.0
Released: June 11, 2026 Β· Download
β¨ New features
idx server renamed to idx agent
The background process that keeps the index up to date is now exposed as idx agent instead of idx server. The old name is retained as a silent backward-compatible alias β existing scripts do not break.
idx agent start # start the background agent
idx agent stop # stop it
idx agent status # show health, PID, and uptime
idx agent status now includes the PID, making it easy to kill the process manually if needed:
β
Agent running (PID: 12345, uptime: 4m10s)
All user-facing messages were updated to remove JSON-RPC and daemon terminology. See agent.md.
Richer search result output
idx search text output was significantly improved:
Results header β every search now opens with a summary line before the results:
π Found 8 file(s) matching your search
When --skip or --limit is active:
π Found 8 file(s) matching your search (showing 3 with pagination)
ANSI-colored file paths β file paths are rendered in the idx accent color in terminal mode. The --compact flag disables coloring for agent/script consumption.
Tree-prefix line format β context lines now use βββ and βββ prefixes with inline term highlighting, making it easier to scan matches:
internal/features/search/service.go
βββ 42: func (s *SearchService) Run(query string, opts Options) (Results, error) {
βββ 55: }
Stale file warning β if a file in the index no longer exists on disk, the result row now shows an inline warning instead of failing or silently returning broken data:
internal/old/removed.go
βββ β file not found β index is outdated, run idx sync
Compact mode format β --compact output now uses lineNum:content (without tree prefix), which is more token-efficient for AI agent consumption.
Score display β --explain now shows the BM25 score inline with the file path:
internal/features/search/service.go (score: 0.8432)
Blank line separator β a blank line is printed between results in normal mode, improving readability when --context is used.
bm25.popularity_weight now visible in idx config show
bm25.popularity_weight is now listed as a first-class configurable key (the 14th key) and appears in idx config show output with its resolved value and an override indicator when set in .idx.yml.
idx init no longer requires the agent to be running
idx init now executes in-process as a bootstrap exception. You can initialize a fresh project without starting the agent first:
# Both workflows now work on a clean project:
idx init && idx agent start
# or
idx agent start # auto-initializes via ensureRootIndex on first watch event
After a successful first init, a hint is printed:
π‘ Run `idx agent start` to enable search
See ADR 0022 for the rationale.
release-idx developer skill
A new internal skill (/release-idx) automates the end-to-end release workflow: doc gap analysis, test suite, semver determination, release notes, tagging, and push. The check-docs.sh script was rewritten to perform a real diff-based analysis since the last tag instead of trivial file-existence checks.
π Breaking changes
search.relaxation type changed from string to int in .idx.yml
The relaxation value in .idx.yml is now a plain integer. The old ">N" string format is no longer accepted.
# Before (v0.7.0)
search:
relaxation: ">2"
# After (v0.8.0)
search:
relaxation: 2
The --relax N CLI flag is unchanged.
ποΈ Removed
--hits / --matches-only search flag removed
The --hits and --matches-only flags have been removed from idx search. Context lines around matches are available via --context N / -c N.
π Improvements
CI workflow security hardening
All GitHub Actions workflows now use least-privilege permissions (contents: read by default, elevated only where needed).
π¦ Dependency updates
| Package | From | To |
|---|---|---|
github.com/stretchr/testify |
1.9.0 | 1.11.1 |
charm.land/bubbletea/v2 |
2.0.6 | 2.0.7 |
github/codeql-action |
3.28.18 | 4.36.1 |
goreleaser/goreleaser-action |
6.4.0 | 7.2.2 |
actions/checkout |
6.0.2 | 6.0.3 |
ποΈ Architecture
- ADR 0022 β
idx initexecutes in-process as a bootstrap exception;idx agent startno longer requires prior init.