The ranger for your Go code
Format source and hunt down trouble before it reaches review.
One fast, self-contained binary for strict Go formatting, style policy, and package-aware correctness checks.

1static binary, zero dependencies
201checks
703 msto format SFTPGo
1,902 msto check SFTPGo
Benchmark timings measured on an Apple M4.
One command
Diagnostics with the code that caused them
strider check folds formatting drift, style policy, and package-aware correctness analysis into a single diagnostic pass. It is read-only by default, with explicit safe and unsafe fix modes when source should be updated. No plugin zoo, no tool matrix — files are parsed once and shared across every selected check.
$ strider check
format*: file is not formatted
┌─ tests/eventsearcher/main.go:1:1
│
1 │ package main
2 │
no-package-var: package variables introduce mutable global state
┌─ tests/eventsearcher/main.go:12:2
│
11 │ var (
12 │ errNotSupported = errors.New("unsupported parameter")
13 │ )
format*: file is not formatted
┌─ tests/ipfilter/main.go:1:1
│
1 │ package main
2 │
unused-parameter: parameter protocol is unused
┌─ tests/ipfilter/main.go:12:30
│
11 │
12 │ func (f *Filter) CheckIP(ip, protocol string) error {
13 │ if ip == "192.168.1.12" {
discarded-error-result 1689
modifies-parameter 924
cognitive-complexity 819
redundant-conversion 813
[...]
Checked 246 files in 3207ms. Ran 184 checks.
7385 issues: 2905 errors, 4480 warnings, 154 fixable