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

csslinter

v1.0.15

Published

CSS linter

Readme

css-linter

This is a CSS linter created for the Carnegie Mellon Univeristy course '15-237: Developing Cross Platform Web Applications'.

MIT Lisence.

##Functionality Currently, the css linter has the following functionality:

  • Validating values of selected properties (see below for more info).
  • Validating consistent indentation (using tab characters or 4-space tabs).
  • Validating newlines following every declaration and rule.
  • Validating property uniqueness within any rule.
  • Validating declaraciton count (default: no more than 25 declarations/rule).
  • Validating correct spacing according to our style guide (see below for more info).

Additionally, the code exists for extracting ids and classes from .HTML files in case you want to add the functionality to cross-reference ids or classes between .HTML and .CSS files. The code is in csslint.js, but not exported to the module.

##Property-Value Validation In order to validate the correctness of properties and their values, we use the file dictionary.js. Currently, it only contains very few properties and values since adding them all would be very time consuming.

In order to add Property-Value pairs, you need to change the following code in dictionary.js:

module.exports = {
	background: [isColor, isUrl],
	position: ["static", "absolute", "fixed", "relative", "inherit"],
	color: [isColor]
}

You can add two types of values: strings or functions. In the example above position simply has an array of strings it accepts as values. On the other hand, background has two functions that it accepts as values. The functions should take in a string value and return true or false. For example, isColor accepts a string and uses regex to determine whether it is one of the default CSS colors or in the form of "#XXX" or "#XXXXXX".

##How to Use csslint.js exports two functions: parseCssFile(path, callback) and parseCssText(text).

parseCssFile is asynchronous (clearly...) and the callback passed to it should take two arguments (err, result). If there are any errors with the linter itself or any of the dependencies, err will be set to true, and otherwise null. The result object is of the form {err: boolean, messages[errmsg1, errmsg2, ...]} (where errmsg1 and errmsg2 are strings). The same result object is returned synchronously from parseCssText.

##Note About Declaration Count If you would like to change the number of declaration counts allowed within a single rule, see the 6th line of the parseCssText function in csslint.js.