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

@heyditto/cli

v1.1.3

Published

Ditto Memory CLI — save, search, fetch, and traverse the Ditto memory graph from the shell.

Readme

Ditto CLI

@heyditto/cli — save, search, fetch, and traverse the Ditto memory graph from the shell.

npm install -g @heyditto/cli
export DITTO_API_KEY=ditto_mcp_…   # https://app.heyditto.ai/mcp/newkey

ditto save "I prefer TypeScript over JS for new projects"
ditto search "language preferences"
ditto subjects "memory architecture" --top-k 5

Install

npm install -g @heyditto/cli
# or one-shot via npx
npx -y @heyditto/cli search "what did I say about X"

The package installs two equivalent binaries: ditto and heyditto. They run the same CLI — use whichever you prefer.

macOS: name collision with Apple's /usr/bin/ditto

On macOS, Apple ships /usr/bin/ditto (a file-copy utility). On a default PATH that puts /usr/bin ahead of /opt/homebrew/bin, plain ditto will run Apple's tool instead of this one — which produces confusing errors like unrecognized option '--output'.

Two ways to disambiguate:

# 1. Use the alias bin shipped by this package:
heyditto status

# 2. Or check which 'ditto' binary your shell resolves first:
type -a ditto
# /usr/bin/ditto                    ← Apple's tool
# /opt/homebrew/bin/ditto           ← @heyditto/cli (use this)

You can also reorder your PATH so the npm global bin comes before /usr/bin, or invoke @heyditto/cli directly via its full path.

Auth

Set DITTO_API_KEY in your environment. Get a key at https://app.heyditto.ai/mcp/newkey.

export DITTO_API_KEY=ditto_mcp_…
# add to ~/.zshrc / ~/.bashrc to persist

Commands

ditto save <content> [--source <s>] [--source-context <c>]
ditto search <query>...
ditto fetch <pair-id>...
ditto subjects <query> [--top-k <n>]
ditto memories <subject-id>...
ditto network <pair-id> [--limit <n>]
ditto status
ditto config
ditto help

save

Persist a memory pair from an external source.

ditto save "Project X uses Bun + SolidJS, deployed to Cloud Run"
ditto save "$(cat note.md)" --source document --source-context note.md

search

Semantic search across memories. Multiple positional args become an array of queries.

ditto search "typescript preferences"
ditto search "typescript" "language choices"

fetch

Fetch the full conversation text for memory pair ids (output of search).

ditto fetch 3a1084ae-235a-433d-9493-2335a0dfeb57

subjects

Search the subject (topic) graph. Returns subject ids you can pass to memories or network.

ditto subjects "memory architecture"
ditto subjects "performance" --top-k 5

memories

Fetch memory previews scoped to specific subjects.

ditto memories <subject-id>

network

Traverse a memory's network (related memories via shared subjects).

ditto network <pair-id> --limit 30

status

Print whether DITTO_API_KEY is set and the configured MCP endpoint resolves.

config

Print a Claude Desktop / Cursor / generic-MCP-client config snippet for the Ditto memory server.

Environment

  • DITTO_API_KEY (required) — MCP API key. https://app.heyditto.ai/mcp/newkey
  • DITTO_API_BASE (optional) — API base URL. Defaults to https://api.heyditto.ai. Useful for local dev (http://localhost:3400).

Output

Every data command and status accepts --output <format>, where <format> is one of:

  • json — guaranteed structured JSON (parses the server text block, re-emits pretty-printed JSON).
  • text — the server's text block as-is (the default; for data commands this is already JSON).
  • markdown — same as text; reserved for future markdown rendering.
  • raw — the full MCP response envelope as JSON.
ditto search "X" --output json | jq '.results[] | {id, similarity, preview: .userPreview}'
ditto status --output json | jq '.tools'

Related

  • @heyditto/mcp — local stdio MCP bridge with OAuth (different surface; pair with Claude Desktop / Cursor).
  • ditto-clawhub — the ClawHub / OpenClaw skill that ships alongside this CLI.
  • Web app: https://app.heyditto.ai

Development

just install
just check       # tsc --noEmit
just build       # tsc to dist/
just verify      # check + build + pack --dry-run

Releases are automated via semantic-release on push to main. npm provenance is enabled — every published version is signed by the GitHub Actions OIDC identity. Trusted publishing is configured at the npm registry.

License

MIT — see LICENSE.