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

climaker

v0.0.6

Published

Tool to create CLI interfaces.

Downloads

47

Readme

climaker

This library is used for creating nice, clean and consistent CLI UI tools in Node.js, with great speed.

Features

  • Automated help screen generation for all commands and subcommands
  • Automated "Did you mean?" helper on command error
  • Automated command-line parameters and argument validation
  • Localization support for help content, with default fallback to English

How to use

The following commands will help you get set up:

npm install -g climaker

# Create a project with a single binary
climaker create myCommand

# Add commands to the binary
climaker command create newCommand
climaker command create new subCommand

# Add a second binary
climaker binary create mySecondCommand

# Add commands to the second binary
climaker command create -b mySecondCommand create newCommand
climaker command create -b mySecondCommand create new subCommand

Manually creating commands

Under the bin/ folder of your package, add a script with the following content:

#!/usr/bin/env node

var path = require('path');
var packageInfo = require('../package.json');

var maker = require('../../climaker');
var commandName = 'mytool'

maker(commandName, packageInfo.version, path.join(__dirname, '../commands'));

Then:

chmod +755 bin/mytool
mkdir ./commands

And, finally, under ./commands/index.js:

exports.describe = {
	en: 'My sweet command line',
	fr: 'Ma commande de ligne sucrée (tee hee)'
};

And start coding! Add your commands in the ./commands folder:

// ./commands/create.js
exports.describe = {
	en: 'Create a new organization.',
	ja: '新しい組織を作成する。'
};

exports.unnamedParams = {
	name: 'something',
	describe: 'I no bother with localize',
	allow: true, // or int for how many to allow, or false if you want to be strict
	demand: true // required, set up a count, or false to make optional
};

exports.params = [{
	name: 'name',
	demand: true,
	describe: {
		en: 'Name',
		ja: '名前です'
	}
}];

// See https://www.npmjs.com/package/yargs#option-key-opt
exports.options = {
	d: {
		alias: 'dest',
		demand: true
	},
	f: {
		alias: 'force',
		describe: 'Force create',
		boolean: true
	}
};

// Options will contain all your options as well as
// unnamed parameters
exports.execute = function (options, name, callback) {
	console.log('HERE IS YOUR NEW ORG');
	callback();
};

You can create sub-folders as well: they will become nested commands. However, you must make sure to put an index.js script with the description of this nested command's subcommand.

For instance, to create the command:

mytool module create myModule --lang=csharp

You would need to create the folder ./commands/module, add a description for the module subcommand in ./commands/module/index.js, and the nested command itself in ./commands/module/create.js.

Todo

  • [ ] Windows testing
  • [ ] Documentation in Japanese, French, and other languages
  • [ ] Dictionary feature, to simplify localization of command output
  • [ ] Autocompletion script generation for Bash, ZSH and PowerShell
  • [ ] autocomplete attribute on options and parameters (specify a command that should return autocompletion data)
  • [ ] Test suite
  • [ ] Health-check command: check that this project's binaries and commands are complying with how things are supposed to be structured
  • [ ] Get feedback!

License

MIT.