Repository navigation
v2.0.0
Complete rewrite -- Rust + tree-sitter
Ecko v2.0.0 replaces the Python + external-tool architecture with a single native Rust binary powered by tree-sitter.
Highlights
- 28 native checks -- all core checks are tree-sitter queries compiled into the binary. No external tool dependencies (ruff, biome, vulture, knip no longer required).
- MCP server --
--mode mcp-serverexposes 5 tools via the Model Context Protocol:check_file,check_workspace,status,dry_run,explain. - Go and Rust language support -- 4 native checks each, plus optional external adapters (golangci-lint, clippy).
- Fix suggestions -- checks can emit inline fix suggestions (byte-range replacements).
- Custom tree-sitter checks -- define project-specific checks in ecko.yaml using tree-sitter query syntax.
- Binary distribution -- pre-built binaries for 5 platforms (linux-x64, linux-arm64, macos-x64, macos-arm64, windows-x64) with checksum verification.
Breaking changes
- Rust binary replaces Python runner -- all hooks now invoke the compiled
eckobinary. - Removed config keys:
ruff_use_project_config,biome_use_project_config,ruff_extra_rules. - New config keys:
custom_checks,fix_suggestions.
Languages supported
| Language | Native checks |
|---|---|
| Python | 12 (unused-imports, singleton-comparison, bare-except, star-imports, mutable-default-args, builtin-shadowing, placeholder-code, unreachable-code, duplicate-keys, test-conditional, fixed-wait, mock-spec-bypass) |
| JS/TS | 8 (unused-imports, unreachable-code, debugger-statement, no-var, duplicate-keys, empty-block-statements, useless-catch, placeholder-code) |
| Go | 4 (unused-imports, empty-error-check, unreachable-code, placeholder-code) |
| Rust | 4 (unused-imports, todo-macro, unreachable-code, placeholder-code) |
| Universal | 3+ (unicode-artifacts, banned-patterns, import-layers) |
283 Rust unit tests (~0.9s).
Full Changelog: v1.3.0...v2.0.0