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

xlinter

v0.1.0

Published

Agent-first repository-policy and agent-workspace linter engine

Readme

xlinter

An agent-first repository-policy linter: it checks the structure of a repository — file naming, required pairings, document frontmatter, index completeness, structured-file invariants — rather than the code inside it. Its home niche is the agent workspace: repositories that carry AGENTS.md/CLAUDE.md instruction files, skills, and machine-readable policy that today nothing lints.

xlinter orchestrates established linters instead of reimplementing them (markdownlint ships as the first adapter) and adds the repository-policy layer they don't model.

Why another linter

  • Repository-policy linting has no maintained incumbent (Repolinter is archived).
  • Agent workspaces have real, checkable invariants — instruction files that must pair, budgets that must hold, docs that must stay indexed — currently enforced by ad-hoc shell.
  • Agents are first-class users: stable rule IDs, machine-readable JSON output, per-finding remediation text, a published config JSON Schema, and one doc page per rule that xlinter explain <rule> prints.

Install / run

npm install -D xlinter
npx xlinter .

Requires Node >= 22.

Configuration

.xlinter.yaml at the repository root. Rule types are engine code; your config instantiates them as named rule instances:

version: 1
namespace: myrepo
rules:
  adr-frontmatter:
    type: nodes
    targets: { include: ["docs/decisions/*.md"] }
    parse: frontmatter
    select: "$"
    assert:
      - path: "$.status"
        required: true
        enum: [Proposed, Accepted, Rejected]
  agent-files:
    type: file-pairing
    left: AGENTS.md
    right: CLAUDE.md
adapters:
  markdownlint:
    config: .markdownlint.yaml

Shared policy is distributed as a preset package consumed via extends. The full config schema is published as xlinter/schema.json.

Rule types (M1)

| type | invariant | | --- | --- | | file-name | basenames match a pattern, with an allow-list | | file-pairing | sibling files must co-exist (e.g. AGENTS.mdCLAUDE.md) | | first-heading | first H1 matches a pattern (${stem} substitution) | | index-completeness | an index file and its directory stay bidirectionally complete | | nodes | structured-file assertions over YAML / JSON / frontmatter via JSONPath selection |

Plus the markdownlint adapter (exact-pinned upstream, config passthrough, findings normalized into xlinter's output with severity overrides per upstream rule).

Agent-first surface

  • xlinter --format json — versioned envelope, config errors included.
  • xlinter explain <ruleId> — the rule's doc page, offline.
  • xlinter rules / xlinter validate-config — discovery and self-validation for config authors.
  • Exit codes: 0 clean, 1 findings, 2 config error, 3 internal error.
  • Every finding: stable ruleId + ruleType, kind, locator (file/line/docPath), expected / found, and a remediation sentence an agent can act on.
  • Exemptions are ratcheted: an exemption that suppressed nothing this run is itself an error — the list can only shrink.

Status

Early (M1 bootstrap). The engine, five rule types, the markdownlint adapter, and the fixture harness are real and dogfooded on this repository (see .xlinter.yaml). Planned: agent-workspace rule library, per-node expectation tables for structured policy, MCP server mode, GitHub Action packaging, SARIF.

License

Apache-2.0.