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

@dapi/zulip-cli

v0.2.0

Published

JSON-first Zulip CLI for AI agents and automation

Readme

zulip-cli

Non-interactive, JSON-first Zulip CLI for AI agents and automation. It reads, searches, and sends messages; discovers channels, topics, and users; and uploads files through the official Zulip REST API.

Install CLI + agent skill

Requires Node.js 20 or newer on macOS or Linux:

curl -fsSL https://raw.githubusercontent.com/dapi/zulip-cli/v0.2.0/install.sh | sh

Manual installation:

npm install -g github:dapi/zulip-cli#v0.2.0
npx skills add https://github.com/dapi/zulip-cli/tree/v0.2.0 \
  --skill zulip-cli --agent '*' -g -y

Restart the agent session after installing the skill.

Configure access

Create an API key in Zulip under Personal settings → Account & privacy → API key, then export:

export ZULIP_SITE=https://zulip.example.com
export [email protected]
export ZULIP_API_KEY=<api-key>

Keep ZULIP_API_KEY in a secret manager. Do not commit it or save it in a plaintext .env file.

Connectivity and authentication checks:

zulip server-info
zulip user-me

Every operational command returns a stable JSON envelope:

{"ok":true,"data":{}}

Errors are emitted to stderr with a non-zero exit code:

{"ok":false,"error":{"code":"AUTH_ERROR","message":"...","details":null}}

Commands

zulip commands
zulip server-info
zulip user-me
zulip user-list
zulip stream-list --subscribed
zulip topic-list --stream-id 42

zulip message-list --limit 50 --raw
zulip message-list --stream general --topic deploy --limit 100 --raw
zulip message-search --query "release failed" --stream general --raw
zulip message-info --message-id 123 --raw

zulip message-send --stream general --topic deploy --content @message.md
printf '%s\n' 'Hello' | zulip message-send --to [email protected] --content -
zulip message-delete --message-id 123
zulip file-upload --file ./report.pdf

Use zulip --help for human-readable help or zulip commands for a machine-readable command catalog.

Message filters

message-list and message-search accept --stream, --topic, --sender, and --raw. message-list also accepts --search and --narrow-json for an arbitrary Zulip narrow array.

zulip message-list \
  --narrow-json '[{"operator":"is","operand":"unread"}]' \
  --limit 100 \
  --raw

Authentication variables

| Variable | Required | Description | |---|---:|---| | ZULIP_SITE | Yes | Organization base URL, for example https://zulip.example.com | | ZULIP_EMAIL | For authenticated commands | User or bot email address | | ZULIP_API_KEY | For authenticated commands | API key belonging to that email |

The equivalent --site, --email, and --api-key options are available, but putting secrets on the command line is discouraged.

Development

npm install
npm test
npm run check

Releases

Releases follow Semantic Versioning. package.json is the version source of truth. A pushed vX.Y.Z tag must match it; GitHub Actions then runs the checks, creates the npm package tarball and checksum, and publishes a GitHub Release.

Prepare a release by updating the package version and every pinned install example, then verify and tag it:

npm version patch --no-git-tag-version # or minor / major
npm run release:check -- vX.Y.Z
npm test
npm run check
git add package.json package-lock.json README.md SKILL.md install.sh
git commit -m "chore(release): vX.Y.Z"
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin main vX.Y.Z

License

MIT