northlint started as a pre-commit hook in a documentation repository that had quietly accumulated two hundred broken anchors over four years of renamed headings.
The renames were all reasonable. Nothing warned about them, because a heading is not an API and no compiler watches it. Every link kept pointing at a fragment that no longer existed, and the site kept serving a page that scrolled to the top instead of to the section somebody had linked. Nobody filed a bug, because from the outside it just looks like the documentation is bad.
Offline by default. A checker that touches the network fails for reasons outside your repository, and a check that fails for outside reasons gets disabled within a month. Everything northlint reports is reproducible from the files on disk.
Output, not source. Static site generators rewrite links in ways that are hard to predict from the source text: slugs get normalised, index pages get folded, prefixes get added for versioned docs. Checking the generated tree measures what readers actually receive.
No configuration file. Flags only. A tool small enough to
learn from --help should not need a file whose schema is another
thing to document and version.
northlint is maintained in the pace of a side project: bug reports get looked at, feature requests usually get declined. The rule set is close to final, and the interesting remaining work is performance on very large trees.
It is used in production on several documentation sites and has been stable since 0.5. Version numbers stay below 1.0 because the JSON output format may still change.