Thanks to visit codestin.com
Credit goes to alint.org

Fast, language-agnostic linter for repository shape, files, and content.

Declare the shape your repo should have (required files, naming conventions, content patterns, values inside package.json / Cargo.toml / GitHub workflows, cross-file relationships) in a single .alint.yml. alint enforces it. One static Rust binary, any language, any repo.

Cross-file relations, conditional when: rules, structured queries over JSON / YAML / TOML, and an agent-aware output format make polyglot trees declaratively enforceable. 30 working configs ship as case studies (kubernetes, rust, go, NixOS, flutter, dotnet, protobuf, and more), each with a writeup of what alint catches that the repo's existing tooling misses.

# Linux / macOS / Windows tarballs
curl -sSL https://raw.githubusercontent.com/asamarts/alint/main/install.sh | bash

# macOS / Linuxbrew
brew tap asamarts/alint
brew install alint

# npm (project-local or global)
npm install --save-dev @asamarts/alint

# Container
docker run --rm -v "$PWD:/repo" ghcr.io/asamarts/alint:latest

See alint in action

A polyglot tree (Rust, Node, Python) checked end to end. One shared .alint.yml extends five bundled rulesets plus a custom TODO rule. Colourful grouped output by directory, severity glyphs, per-rule policy links. alint finds what's missing, suggests what to add, auto-fixes what can be fixed.

Pick a stack. Drop in a .alint.yml. Done.

alint ships twenty-one bundled rulesets that cover most repos with one line of config. Layer them; override one or two rules; add your own.

README, LICENSE, SECURITY.md, hardened CI workflows.

version: 1
extends:
  - alint://bundled/oss-baseline@v1
  - alint://bundled/hygiene/no-tracked-artifacts@v1
  - alint://bundled/ci/github-actions@v1

What alint covers

Eight differentiators plus the composition depth behind them. One static Rust binary, zero network at runtime, every card linked to the doc that explains the underlying primitive.

Why a separate tool

ESLint and Clippy lint your code. Semgrep lints semantics. Repolinter (archived) and OpenSSF Scorecard lint policy. alint sits between code and policy, at the repository's filesystem shape: which files exist, what they're called, what's inside them, how they relate to each other. As coding agents land in more repos, the same shape rules double as the structural backstop the agent reads and self-corrects against.

That sounds narrow until you try to enforce it. "Every package has a README." "All Rust source files have a copyright header." "GitHub workflows pin actions to commit SHAs." "Cargo.toml declares edition 2024." Every one of those is a one-line rule in alint and a gnarly shell pipeline without it.

Filesystem shape doesn't live in any AST, isn't per-language, and crosses language boundaries, so no host tool has a natural home for it. Bazel, Nx, and Turborepo orchestrate builds; pre-commit and husky run hooks; per-language linters see only their slice of the tree. None of them know what to assert about the repository's structure. alint is the layer that does. See how it compares to the closest alternatives, or read more about the project →

Ready?

The shortest useful .alint.yml is three lines. Most users start there.