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

ansible-lint-win

v0.1.4

Published

Windows-native Ansible language server — no Python required

Readme

ansible-lint-win

npm license Socket Badge

A lightweight Ansible language server that runs natively on Windows (and everywhere else Node.js runs) without requiring Python, ansible-lint, or WSL.

Why this exists

The official ansible-language-server requires a working Python environment with ansible-lint installed. On Windows that means setting up WSL, dealing with PATH issues, and accepting a multi-second startup. For developers who just want completions and hover docs while authoring playbooks — especially on Windows — that's a lot of overhead.

ansible-lint-win is a pure Node.js LSP: one npm install, no Python, no WSL, no global tooling. It ships pre-generated module metadata for 120+ collections so it works fully offline.

Features

  • Completions — context-aware: play keywords, task keywords, module FQCNs (filterable by short name), module options (required first), value choices
  • Hover documentation — module docs with options table, option details, keyword descriptions
  • 10 lint rules — name-required, fqcn-required, yaml-truthy, no-changed-when, key-order, jinja-spacing, no-duplicate-keys, play-has-hosts, deprecated-modules, no-free-form
  • Go-to-definition — Ctrl+click on include_tasks, import_tasks, vars_files, roles, and template src paths
  • 8900+ modules from 120+ collections out of the box, with support for auto-discovering all collections from the ansible-collections GitHub org

Install in Zed

The extension is pending review in the Zed Extension Registry. Until then, install it as a dev extension (see Developing below).

Once accepted, install will be:

  1. Open Zed
  2. Ctrl+Shift+P / Cmd+Shift+Pzed: extensions
  3. Search for Ansible Lint Win and install — the language server auto-installs from npm

Then add the file-type associations to your Zed settings (Ctrl+Shift+P → "open settings"). A reference config is in settings.example.json:

{
  "languages": {
    "Ansible": { "tab_size": 2 }
  },
  "file_types": {
    "Ansible": [
      "**.ansible.yml",
      "**.ansible.yaml",
      "**/tasks/*.yml",
      "**/handlers/*.yml",
      "**/playbooks/*.yml",
      "**/roles/**/tasks/*.yml",
      "**site.yml"
    ]
  }
}

(See settings.example.json for the full set of patterns.)


Install for Other LSP-Compatible Editors

The language server is on npm. Install it globally:

npm install -g ansible-lint-win

Find the path to the installed server:

npm root -g
# e.g. C:\Users\you\AppData\Roaming\npm\node_modules   (Windows)
# e.g. /usr/local/lib/node_modules                     (macOS/Linux)

The server is at <npm-root>/ansible-lint-win/dist/server.js. Substitute that path in the examples below.

Neovim (nvim-lspconfig)

local lspconfig = require('lspconfig')
local configs = require('lspconfig.configs')

configs.ansible_lint_win = {
  default_config = {
    cmd = { 'node', '<npm-root>/ansible-lint-win/dist/server.js', '--stdio' },
    filetypes = { 'yaml', 'yaml.ansible' },
    root_dir = lspconfig.util.root_pattern('ansible.cfg', '.ansible-lint', 'inventory', 'playbooks'),
  },
}

lspconfig.ansible_lint_win.setup({})

Helix (~/.config/helix/languages.toml)

[language-server.ansible-lint-win]
command = "node"
args = ["<npm-root>/ansible-lint-win/dist/server.js", "--stdio"]

[[language]]
name = "yaml"
language-servers = ["ansible-lint-win"]

Sublime Text (LSP package)

{
  "clients": {
    "ansible-lint-win": {
      "enabled": true,
      "command": ["node", "<npm-root>/ansible-lint-win/dist/server.js", "--stdio"],
      "selector": "source.yaml"
    }
  }
}

Developing

If you want to hack on the server or extension locally:

# Build the server
cd server
npm install
npm run bundle         # esbuild → single dist/server.js

# Sideload the extension in Zed
# Command palette → "zed: install dev extension" → select the extension/ directory

Refreshing module data

Module data is pre-generated from GitHub. To regenerate:

cd server

# Fetch specific collections (no token needed for a few)
npm run generate-data -- community.general ansible.windows amazon.aws

# Fetch ALL collections (auto-discovers from the ansible-collections GitHub org)
GITHUB_TOKEN=ghp_xxx npm run generate-data

Project structure

ansible-lint-win/
├── server/                     # Node.js language server (published to npm)
│   ├── src/
│   │   ├── server.ts           # LSP entry point
│   │   ├── parser/             # YAML parsing + context detection
│   │   └── providers/          # completion, hover, diagnostics, definition
│   ├── data/                   # Pre-generated JSON (modules, keywords)
│   └── dist/                   # Build output (shipped to npm)
│
├── extension/                  # Zed extension (Rust → WASM)
│   ├── extension.toml
│   ├── Cargo.toml
│   ├── src/lib.rs
│   └── languages/ansible/      # Language config + syntax highlights
│
└── scripts/
    └── generate-module-data.ts # Fetches module docs from GitHub

License

MIT — see LICENSE.