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

@crouton-kit/zigzag

v0.2.0

Published

Command-line interface for the Zigzag collaborative board. Designed so an AI agent can read and modify a user's board on their behalf.

Readme

zigzag — Zigzag Board CLI

Command-line interface for Zigzag Board. Designed so an AI agent can read and modify a board on the user's behalf.

Version 0.2.0 — JSON-default output, noun-verb structure, no --json flag.

Install

npm install -g @crouton-kit/zigzag

For local development:

cd cli && npm install && npm run build && npm link

Configure

export ZIGZAG_API_URL=http://localhost:8787   # override API endpoint

Credentials are stored at ~/.config/zigzag/credentials.json (mode 0600).

I/O contract

  • Stdout: always JSON (single-shot). No --json flag, no human mode.
  • Stderr: diagnostic chatter only (warnings, browser-open notices). Never carries results.
  • Errors: { error, message, received?, expected?, next? } on stdout, exit code 1.

Command tree

zigzag
├─ auth
│   ├─ login            device-flow browser authentication
│   ├─ logout           revoke session and delete local credentials
│   └─ whoami           print identity, API URL, and org memberships
├─ org
│   ├─ list             list orgs sorted by name ascending
│   ├─ use <id|slug>    set active org in local credentials
│   ├─ create <name>    create org and set it active
│   ├─ invite           show current invite URL (owner-only)
│   └─ invite-rotate    regenerate invite URL (owner-only)
├─ board
│   └─ show             read lanes + cards at a path (default root)
├─ lane
│   ├─ list             list lanes at a path
│   ├─ add              create a lane
│   ├─ update <id>      rename / retype a lane
│   ├─ move <id>        reorder a lane
│   └─ rm <id>          hard-delete a lane (server refuses if non-empty)
└─ card
    ├─ list             list cards with optional lane/status filters
    ├─ show <id>        read a card and its nested board
    ├─ add              create a card
    ├─ update <id>      change text, status, lane, or position
    ├─ move <id>        change lane and/or position
    ├─ restore <id>     restore an archived card as todo
    └─ rm <id>          PERMANENT hard-delete (no archive entry created)

Pass -h to any node for full Input/Output/Effects documentation.

Nested boards

Cards can contain their own boards. Use --path <cardId> (repeatable) to descend:

zigzag board show --path c-abc --path c-def
zigzag lane list --path c-abc
zigzag card add --lane l-xyz --text "subtask" --path c-abc

Migrating from 0.1.0

| 0.1.0 | 0.2.0 | Notes | |---|---|---| | zigzag login | zigzag auth login | moved under auth branch | | zigzag logout | zigzag auth logout | moved under auth branch | | zigzag whoami [--json] | zigzag auth whoami | JSON always; output shape changed | | zigzag org list [--json] | zigzag org list | JSON always; orgs sorted by name | | zigzag org use <id> | zigzag org use <id> | output is now JSON | | zigzag org create <name> [--json] | zigzag org create <name> | JSON always | | zigzag board show [--json] | zigzag board show [--path …] | JSON always; path support added | | zigzag card add | zigzag card add | added --path; JSON always | | zigzag card move <id> | zigzag card move <id> | added --path; JSON always | | zigzag card edit <id> --text … | zigzag card update <id> --text … | renamed editupdate; update now also handles status/lane/position | | zigzag card rm <id> | zigzag card rm <id> | added --path; JSON always | | zigzag lane add | zigzag lane add | added --path; JSON always | | zigzag lane rename <id> --name … | zigzag lane update <id> --name … | renamed; update also handles --type | | zigzag lane type <id> --type … | zigzag lane update <id> --type … | merged into lane update | | zigzag lane rm <id> | zigzag lane rm <id> | added --path; JSON always | | (new) | zigzag org invite | show invite URL | | (new) | zigzag org invite-rotate | regenerate invite URL | | (new) | zigzag lane list | list lanes at a path | | (new) | zigzag card show <id> | read card + nested board | | (new) | zigzag card restore <archivedItemId> | restore archived card | | --json flag everywhere | removed | stdout is always JSON |