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

puppy-api-docs

v0.0.6

Published

Genernate material api docs from your comments.

Readme

puppy-api-docs

Generate beautiful api docs directly from your code comments.

Install

Install the package globally.

npm install -g puppy-api-docs

Usage

Puppy api docs are very easy to use. All you have to do is write comments in your code, puppy will automatically extract them and generate minimal yet beautiful looking documentation.

Here is a simple example.

/*
@docstart
{
    "title": "Login",
    "method": "POST",
    "description": "Login with email and password.",
    "path": "/login"
}
@docend
*/
router.post('/login', (req, res) => {...})

In any of your js file go ahead and create a comment as above. Make sure you add @docstart and @docend, as puppy will only read content between those tags.

Inside the start and end tags, goes a json object. You have to make sure that this json object is well formatted, else it won't be included in the generated docs.

Inside this json object you can specify various properties. Here we have only specified title, description, method, and path.

Once you are done writing the comment, in your project root, go ahead and run the following command.

puppy-generate-api

Puppy will automatically search all the js files for comments and extract the information.

The docs will be generated and saved in a folder named api_docs. In this folder you will find doc.html which contains the generated docs.

Properties

Here are all properties supported by puppy at the moment.

/*
@docstart
{
    "title": "Login",
    "method": "POST",
    "group": "Authentication",
    "description": "Login with email and password.",
    "path": "/login",
    "response": {
        "status": 200,
        "message": "Help message depending on success",
        "success": true
    },
    "request": {
        "data": {
            "email": "User's email",
            "password": "User's Password"
        }
    },
    "requestHeaders": {
        "Content-Type": "application/json"
    },
    "responseHeaders": {
        "token": "session token"
    }
}
@docend
*/

Grouping

Puppy supports the concept of grouping where in you can put a bunch of api's in a particular group.

So suppose you can put login and sign up api's in a group named Auth. All you have to do is specify the group property in the comment.

Example.

/*
@docstart
{
    "title": "Login",
    "group": "Auth",
    "method": "POST",
    "description": "Login with email and password.",
    "path": "/login"
}
@docend
*/
router.post('/login', (req, res) => {...})

/*
@docstart
{
    "title": "Sign Up",
    "group": "Auth",
    "method": "POST",
    "description": "Sign up with email and password.",
    "path": "/signup"
}
@docend
*/
router.post('/signup', (req, res) => {...})

/*
@docstart
{
    "title": "Get Todos's",
    "method": "GET",
    "description": "Get a list of all todos for a user.",
    "path": "/todos"
}
@docend
*/
router.get('/todos', (req, res) => {...})

Here you can see that we have provided a group value in both login and signup api. In the third api, /todos we han't provided any group. By default if you don't provide a group, the generated api doc will fall under a common group named API's.