Skip to content
Latchkey

golangci-lint "unknown linters" config error in CI

golangci-lint rejects your config because it names a linter it does not recognize. Linters get deprecated and removed across releases (for example golint, maligned, interfacer), so an upgraded binary fails on an old config.

What this error means

golangci-lint fails at config load with "level=error msg=\"[config_reader] unknown linters: 'golint', 'maligned'; ...\"" and does not lint.

golangci-lint
level=error msg="[config_reader] unknown linters: 'golint', 'maligned';
run 'golangci-lint help linters' to see the list of supported linters"

Common causes

A removed or renamed linter in the config

Linters like golint, maligned, scopelint, and interfacer were removed; configs that still enable them break on newer golangci-lint.

A typo in the linter name

A misspelled entry under linters.enable does not match any registered linter.

How to fix it

Remove or replace the unknown linters

  1. Run golangci-lint help linters to see what the installed version supports.
  2. Delete removed names and swap in their replacements (for example revive for golint).
  3. Re-run to confirm the config loads.
Terminal
golangci-lint help linters
golangci-lint run ./...

Pin the golangci-lint version

Pin the binary so config and supported linters stay in sync, then migrate the config deliberately on upgrade.

.github/workflows/ci.yml
- uses: golangci/golangci-lint-action@v6
  with:
    version: v1.59.1

How to prevent it

  • Review the golangci-lint changelog before bumping the version.
  • Pin the linter version in the action.
  • Run golangci-lint config verify (or help linters) after upgrades.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →