Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 22 Mar 09:00
· 10 commits to main since this release

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-server exposes 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 ecko binary.
  • 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