npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lintel/lintel

v0.0.19

Published

Schema validation for your entire repo

Downloads

846

Readme

Fast, multi-format JSON Schema linter for all your config files.

CI crates.io npm

Lintel validates JSON, YAML, TOML, JSON5, and JSONC files against JSON Schema in a single command. It auto-discovers schemas via SchemaStore, the Lintel catalog, inline $schema properties, and YAML modelines — zero config required.

Fast. Written in Rust with no async runtime, deterministic schema caching, and pre-compiled SchemaStore catalog matching. Warm runs are pure computation.

Drop-in CI check. Machine-parseable output, nonzero exit codes on failure, .gitignore-aware file walking. Add one line to your pipeline and catch config mistakes before they ship.

Zero config. Point it at your repo and go. Lintel figures out which schemas to use.

Installation

cargo install lintel

Or with npm:

npx @lintel/lintel check
bunx @lintel/lintel check
pnpx @lintel/lintel check

Or with Nix:

nix run github:lintel-rs/lintel

Usage

# validate with rich terminal output
lintel check

# validate with CI-friendly one-error-per-line output
lintel ci

# generate a lintel.toml with auto-detected schemas
lintel init

# convert between formats
lintel convert config.yaml --to toml

Schema Discovery

Lintel auto-discovers schemas in priority order:

  1. YAML modeline# yaml-language-server: $schema=...
  2. Inline $schema property — in the document itself
  3. lintel.toml mappings — custom [schemas] table entries
  4. Custom registries — additional catalogs from lintel.toml
  5. Lintel catalog — aggregates SchemaStore with additional schemas (Cargo.toml, Claude Code, devenv.yaml, and more)

Files without a matching schema are silently skipped. Lintel respects .gitignorenode_modules, target/, and build artifacts are skipped automatically.

The Lintel Catalog

The Lintel catalog is an aggregate of SchemaStore and additional schemas for tools that don't have SchemaStore entries. When both catalogs have a match, the Lintel catalog takes precedence.

See the lintel-rs/catalog repository for more information.

Currently includes additional schemas for:

  • Cargo.toml — Rust package manifests
  • Claude Code — agent, skill, and command definitions
  • devenv.yaml — devenv configuration

To add your own catalogs, use registries in lintel.toml:

registries = ["github:my-org/my-schemas"]

The github:org/repo shorthand resolves to https://raw.githubusercontent.com/org/repo/master/catalog.json.

Configuration

Lintel supports project configuration via lintel.toml:

# stop walking up the directory tree
root = true

# exclude files from validation
exclude = ["vendor/**", "testdata/**"]

# map file patterns to schema URLs
[schemas]
"my-config.yaml" = "https://example.com/my-schema.json"
".ci/*.yml" = "//schemas/ci.json" # // resolves relative to lintel.toml

# additional schema catalogs
registries = ["github:my-org/my-schemas"]

# rewrite schema URLs (e.g. for local development)
[rewrite]
"http://localhost:8000/" = "//schemas/"

# per-file overrides
[[override]]
files = ["schemas/vector.json"]
validate_formats = false

Adding Lintel to devenv

Add Lintel as an input in devenv.yaml:

inputs:
  lintel:
    url: github:lintel-rs/lintel
    flake: true

Then use it in devenv.nix:

{ pkgs, inputs, ... }:

let
  lintel = inputs.lintel.packages.${pkgs.system}.default;
in
{
  packages = [ lintel ];

  # optional: run lintel as a pre-commit hook
  git-hooks.hooks.lintel = {
    enable = true;
    name = "lintel";
    entry = "${lintel}/bin/lintel check";
    types_or = [ "json" "yaml" ];
  };
}

GitHub Action

Use the official lintel-rs/action:

- uses: lintel-rs/action@v0

License

Copyright Ian Macalinao. Licensed under the Apache License, Version 2.0.