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 🙏

© 2025 – Pkg Stats / Ryan Hefner

copycop

v1.0.9

Published

``` npx -y copycop <path-to-file>.md ```

Downloads

989

Readme

copycop

npx -y copycop <path-to-file>.md

Copycop reads a markdown file and analyzes it for common composition issues. Copycop is different from a standard grammar checker because it focuses on document structure rather than sentence structure Copycop optimizes for simplicity and consistency.

These rules are heavily inspired by The Elements of Style by William Strunk Jr and E. B. White.

Rules

Here is some more information on the rules in the linter.

Correlate parallel ideas

Strunk and White put it best in rule #15, "Express coordinate ideas in similar form":

Expressions of similar content and function should be outwardly similar. The likeness of form enables the reader to recognize more readily the likeness of content and function.

In prose, this rule dictates the order of words. For example:

  • A time not for words, but action
  • A time not for words, but for action

The repeated preposition ("for") carries the meaning through the sentence.

In technical writing, this rule extends to structured data:

  • Headings
  • Menu items
  • List items
  • Buttons
  • Rows

Each heading in a page section, link in a menu, button in a CTA, cell in a table column, or item in a list should follow the same structure; each should use the same tense, mood, and approximate length. If one has a conjunction ("Fruits and vegetables") then all should ("Meats and dairy"). If one is a gerund ("Cycling") then all should be ("Running").

Define a subject

The passive voice omits a subject. A complete sentence is take the form of subject-predicate-object. ("The dog wags the tail.") A passive sentence is effectively object-predicate. ("The tail is wagged.") A passive sentence lacks vigor because it possesses no "main character."

The passive voice offers a convenient shortcut when the instigator of an action is unclear (e.g. who or what is invoking the subprocess command?). But the shortcut bypasses an opportunity to find more meaning for both writer and reader. Identify a subject and put them into the sentence.

Take it from Strunk and White, who say the passive is "less direct, less bold, and less concise."

Passive voice may be employed occasionally to soften a sentence, vary tone of voice, or generalize.

Introduce each section

It's tempting to go from an H2 straight to a subordinate H3, but this calls the usefulness of the H2 into question. After an H2, introduce the section before continuing to an H3. If there is nothing to say, consider restructuring.

Only use headings in multiples

When it comes to headings and subheadings, use none or at least two. Never use a single heading. Headings serve to subdivide content into useful categories. There is almost* never a reason to subdivide content into a single category. (*Except when dictated by convention, as sometimes happens in API documentation.)

Advice

  • Cover one topic per paragraph
  • Define jargon
  • Use the positive form
  • Vary sentence length
  • Introduce a list with an independent clause
  • Avoid gerunds