Small tools. No accounts. This one counts on the server; the rest run in your browser.
i Give it a GitHub repository and it counts the lines, pinned to one commit, with the rules on the screen rather than in a footnote.
Checking sign-in status…
A repository in, a number out, and the rules it used beside it.
The rules are the whole point of this tool, so they are here rather than a link
away. A file is skipped when it is vendored or build output (any
path with a segment like node_modules, vendor,
dist, build, target, .next,
venv), when it is generated (minified bundles,
source maps, protobuf output, snapshots, lockfiles), or when it is
binary, judged first by extension and then by content: a NUL
byte or a high proportion of control bytes in the first 8 KiB.
What is left is counted as actual lines of actual files, read at one commit. Not
GitHub's language bar, which reports bytes per language computed by
Linguist with Linguist's exclusions rather than ours. Two people counting the
same commit get the same numbers, forever, which is what the
counter_version field is for: it changes when the algorithm does, so
a cached result can never quietly mean something different.
The long version, with every rule spelled out, is on how we count.