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

plan-things

v0.0.2

Published

Like notecards-on-a-table, but portable, digitized, scriptable and in a git repository

Readme

Plan Things

Like notecards-on-a-table, but portable, digitized, scriptable and in a git repository

$ plan help

Plan things, in a kind-of-xtreme way. Plans get saved in the
~/.plans directory, which you can version nicely in git.

USAGE: plan show GROUP
       plan move [thing id] GROUP
       plan edit [thing id] [[task id]]
       plan help

GROUP is one of the following.

  proposed
  current
  passed
  done

plan show: List the things and tasks in a group.
  In addition to the four groups above, you can
  specify "all", which will list all the things.

plan move: Move a thing to a different group.

plan help: Show this help.

plan edit: Edit the description of a story or task
           and the estimated duration of a task.

Structure of the ~/.plans directory

The plans directory is structured like so.

~/.plans/
  .gitignore
  .cache
  proposed/
    plan_trip/
      thing.sh
      book_flight.sh
      call_bob.sh
    ...
  current/
    make_a_cardboard_comma/
      thing.sh
      buy_glue.sh
      find_cardboard.sh
    ...
  passed/
    ...
  done/
    ...

Now I explain that structure in more precision.

Root level

The ~/.plans directory contais four directories, called proposed, current, passed, and done. These directories are called groups, and each group ctories contains a bunch of things.

The ~/.plans directory contais two other files, .gitignore and .cache. .gitignore just says .cache\n, and .cache is a cache file.

Things

Each thing directory contains a file called thing.sh. This file has most of the thing-specific information. All of the other files are tasks, named ${task_name}.sh, and they contain the task-specific information.

The one piece of information that is not encoded in the thing directory is the group of which the thing is a part. This information is instead encoded as the group directory in which the thing directory is located.

Newly created things start in the proposed directory. Running plan edit thing -[bcp] moves them between directories. They can only be moved to the "done" directory/group from the "current" group, and this happens when all of the tasks have been marked "done", with plan edit thing task -d.

File format of the .sh files

All of the variables are set as shell scripts that are sourced. (It doesn't seem like there's a native shell configuration language or anything.)

Here's an example thing file.

MESSAGE=$(cat<<EOF
As someone who runs plan-things on barebones computers,
I want plan-things to work with POSIX-compliant shell rather
than just BASH so that I can use plan-things on all my computers.
EOF)

And here's a task file.

DAYS=0.25
MESSAGE=$(cat<<EOF
Set up the tests to run in multiple shells.
EOF)

Development

Run tests with urchin.

npm install -g urchin
urchin ./test