-
v0.4.1
StableSome checks failedCI / cargo fmt (pull_request) Failing after 15sCI / cargo clippy (pull_request) Has been skippedCI / cargo test (pull_request) Has been skippedCI / cargo fmt (push) Failing after 16sCI / cargo clippy (push) Has been skippedCI / cargo test (push) Has been skippedRelease Build / Generate Version (push) Successful in 15sRelease Build / Build linux-x86_64 (push) Successful in 3m54sRelease Build / Build linux-aarch64 (push) Successful in 4m18sRelease Build / Build windows-x86_64 (push) Successful in 4m39sRelease Build / Create Forgejo Release (push) Failing after 1m1sreleased this
2026-06-04 15:41:06 +02:00 | 268 commits to master since this releaseSecurity hardening
Completes the parser recursion-depth hardening started in v0.4.0.
v0.4.0 capped every plugin's
walkrecursion, but the self-recursive type-expression helpers in the Python, C#, and TypeScript plugins were still unbounded. A crafted file with a deeply nested type expression (List[List[...]],List<List<...>>,Array<Array<...>>) is reached via a shallow walk but recurses thousands of levels insideemit_type_ref/emit_receiver_type_refs, overflowing the daemon's worker stack — whichcatch_unwindcannot intercept.Each helper now routes through a depth-aware core guarded by
MAX_PARSE_DEPTH. Extraction behavior is unchanged; a deep-nested-type regression test per plugin confirms the guard (verified to SIGABRT with the cap disabled). PHP's type helper is structurally flat and needs no guard.With this, all six language parsers are fully guarded against the deeply-nested-input stack-overflow DoS — closing the last residual from the v0.4.0 ultradeep review.
Changes:
v0.4.0...v0.4.1Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.4.0
StableSome checks failedCI / cargo fmt (pull_request) Failing after 18sCI / cargo clippy (pull_request) Has been skippedCI / cargo test (pull_request) Has been skippedCI / cargo fmt (push) Failing after 18sCI / cargo clippy (push) Has been skippedCI / cargo test (push) Has been skippedRelease Build / Generate Version (push) Successful in 21sRelease Build / Build linux-x86_64 (push) Successful in 5m9sRelease Build / Build linux-aarch64 (push) Successful in 5m32sRelease Build / Build windows-x86_64 (push) Successful in 5m40sRelease Build / Create Forgejo Release (push) Failing after 1m3sreleased this
2026-06-04 15:30:50 +02:00 | 269 commits to master since this releaseHighlights
Ruby is now a fully supported language (sixth indexed language), with Rails-aware extraction — and this release closes a stack-overflow DoS that affected every language parser.
Ruby plugin
- Detects
.rb/.rake/.gemspecand the extensionlessRakefile/Gemfile. - Modules, classes (+ superclass type refs), instance & singleton methods, top-level functions, constants,
attr_*fields,require/require_relativeimports, bare-call vs receivermethod_callrefs, andinclude/extend/prependmixin refs. - Rails-aware associations:
has_many/has_one/belongs_to/has_and_belongs_to_manyemit a type reference to the associated model class — honoringclass_name:and singularizing plural names — sofind_referenceson a model surfaces its association sites.
Security: parser recursion-depth guard
A crafted file of deeply nested literals (well under the 2 MiB size cap) could overflow the worker stack and crash the long-lived daemon — and
catch_unwindcannot intercept stack exhaustion. All six language plugins now cap recursion depth, so a single malicious file can no longer take down the daemon. Verified with a 2 MiB-stack regression test on 20 000-deep input.Parity & tests
Wired Ruby into qualified-name separators, project-root detection (
Gemfile/*.gemspec), entry-point heuristics, ctags cross-validation, and the init template. Ships 25 unit tests, full e2e + Rails-association + parity coverage, and a 5-layercorrectness_rubycross-validation against ripgrep/ctags.Reviewed ultradeep by a multi-agent pass (correctness, security, performance, test coverage, cross-language parity, production readiness) with adversarial verification of every finding.
Changes:
v0.3.3...v0.4.0Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Detects
-
v0.3.3
StableSome checks failedRelease Build / Generate Version (push) Successful in 20sCI / cargo fmt (push) Successful in 29sCI / cargo clippy (push) Successful in 47sCI / cargo test (push) Failing after 2m47sRelease Build / Build linux-x86_64 (push) Successful in 4m34sRelease Build / Build linux-aarch64 (push) Successful in 5m16sRelease Build / Build windows-x86_64 (push) Successful in 5m29sRelease Build / Create Forgejo Release (push) Failing after 1m3sreleased this
2026-06-04 14:29:17 +02:00 | 270 commits to master since this releaseFix
Release builds previously set
panic = "abort", which silently turned thecatch_unwindguard inparse_with_plugininto a no-op: a panicking tree-sitter grammar would SIGABRT the whole long-lived daemon instead of being caught and recorded as aparse_errorrow. This release switches[profile.release]topanic = "unwind"so that resilience holds in production. The size optimizations (lto,codegen-units,strip) are unchanged.Verified end-to-end under the real release profile: a panicking plugin is caught and recorded (
IndexStats.parse_errors=1, exit 0); a negative control underpanic = "abort"aborts with exit 134, confirming the regression was real.Note: this regression is invisible to
cargo test— the test harness forcespanic = "unwind"regardless of profile.Changes:
v0.3.2...v0.3.3Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
code-index v0.3.2
StableSome checks failedCI / cargo fmt (push) Successful in 15sRelease Build / Generate Version (push) Successful in 16sCI / cargo clippy (push) Successful in 1m37sCI / cargo test (push) Failing after 2m54sRelease Build / Build linux-x86_64 (push) Successful in 4m51sRelease Build / Build windows-x86_64 (push) Successful in 5m10sRelease Build / Build linux-aarch64 (push) Successful in 5m13sRelease Build / Create Forgejo Release (push) Successful in 1m32sreleased this
2026-05-21 22:04:36 +02:00 | 274 commits to master since this releasecode-index v0.3.2
Build: v0.3.2+local
Three-binary release:
code-index-mcp(MCP stdio bridge — the usual entry),code-index-daemon(long-lived watcher + RPC server, auto-spawned), andcode-index(CLI: init, index, watch, doctor, link).Downloads
Platform Archive Linux x86_64 code-index-v0.3.2-linux-x86_64.tar.gz Linux ARM64 code-index-v0.3.2-linux-aarch64.tar.gz Windows x64 code-index-v0.3.2-windows-x86_64.zip Wire into Claude Code
{ "mcpServers": { "code-index": { "command": "/usr/local/bin/code-index-mcp", "args": ["--root", "/path/to/your/project"] } } }SHA256 checksums (.sha256 files) available for every archive.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
code-index v0.3.1
StableAll checks were successfulRelease Build / Generate Version (push) Successful in 16sCI / cargo fmt (push) Successful in 26sCI / cargo clippy (push) Successful in 1m15sCI / cargo test (push) Successful in 2m29sRelease Build / Build linux-x86_64 (push) Successful in 4m21sRelease Build / Build linux-aarch64 (push) Successful in 4m36sRelease Build / Build windows-x86_64 (push) Successful in 4m45sRelease Build / Create Forgejo Release (push) Successful in 1m29sreleased this
2026-05-20 12:19:09 +02:00 | 276 commits to master since this releasecode-index v0.3.1
Build: v0.3.1+local
Three-binary release:
code-index-mcp(MCP stdio bridge — the usual entry),code-index-daemon(long-lived watcher + RPC server, auto-spawned), andcode-index(CLI: init, index, watch, doctor, link).Downloads
Platform Archive Linux x86_64 code-index-v0.3.1-linux-x86_64.tar.gz Linux ARM64 code-index-v0.3.1-linux-aarch64.tar.gz Windows x64 code-index-v0.3.1-windows-x86_64.zip Wire into Claude Code
{ "mcpServers": { "code-index": { "command": "/usr/local/bin/code-index-mcp", "args": ["--root", "/path/to/your/project"] } } }SHA256 checksums (.sha256 files) available for every archive.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
code-index v0.3.0
StableSome checks failedCI / cargo fmt (push) Successful in 16sRelease Build / Generate Version (push) Successful in 14sCI / cargo clippy (push) Successful in 46sCI / cargo test (push) Failing after 2m20sRelease Build / Build linux-x86_64 (push) Successful in 4m9sRelease Build / Build linux-aarch64 (push) Successful in 4m37sRelease Build / Build windows-x86_64 (push) Successful in 4m56sRelease Build / Create Forgejo Release (push) Successful in 1m30sreleased this
2026-05-12 09:58:37 +02:00 | 281 commits to master since this releasecode-index v0.3.0
Build: v0.3.0+local
Three-binary release:
code-index-mcp(MCP stdio bridge — the usual entry),code-index-daemon(long-lived watcher + RPC server, auto-spawned), andcode-index(CLI: init, index, watch, doctor, link).Downloads
Platform Archive Linux x86_64 code-index-v0.3.0-linux-x86_64.tar.gz Linux ARM64 code-index-v0.3.0-linux-aarch64.tar.gz Windows x64 code-index-v0.3.0-windows-x86_64.zip Wire into Claude Code
{ "mcpServers": { "code-index": { "command": "/usr/local/bin/code-index-mcp", "args": ["--root", "/path/to/your/project"] } } }SHA256 checksums (.sha256 files) available for every archive.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)