testless

Cut your test time to the minimum.

Run 5 tests instead of 500.

testless statically analyzes your code down to the function level and picks exactly the tests a change could break. It reads your code, not your coverage.

Install

Pick your ecosystem

testless ships a single Rust binary with native entry points for every ecosystem it supports. All three are equal citizens.

JS / TS

npm i -D testless-cli

Go

curl -fsSL https://testless.itaywol.tools/install.sh | sh
brew install itaywol/testless/testless

Rust

cargo binstall testless

Prefer a prebuilt binary? Grab one from the releases page.

Demo

See it pick the tests

Terminal recording of testless indexing a repository, then selecting the small set of tests impacted by a code change

testless indexes the repo into a graph of functions, tests, and imports.

A changed function is diffed structurally, comments and formatting are free.

The reverse impact walk prints only the tests that could break, ready to run.

Scale checked on real repos: astro (6,121 tests, indexed in 3.1s), gin (677 tests, 0.3s), openclaw (106,594 tests across 22,797 files, 86s).

How it works

Three steps, one guarantee

01

Parse

tree-sitter builds a graph of every function, test, and import across your codebase.

02

Diff

A structural AST diff finds what actually changed. Comments and formatting are free.

03

Walk

A reverse impact walk finds every test that can reach the change and prints your runner's own CLI invocation.

Selection is always a superset of the truly impacted tests. testless widens instead of guessing, and never silently skips a test that could fail.