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

birdclaw

v0.12.1

Published

Local Twitter memory in SQLite for archives, DMs, likes, bookmarks, and moderation

Readme

birdclaw 🪶 — Your Twitter history, with a longer memory

CI npm Node Bun source toolchain License Homebrew Docs

Birdclaw imports Twitter/X archives into local SQLite, adds explicit cached live reads, and exposes the result through a web app, CLI, and optional read-only MCP server. It is for people who want their own searchable history, DMs, saved posts, and follow graph without a cloud backend.

Birdclaw's local Home timeline populated with demo data

Install

Homebrew is the shortest path on macOS and Linux:

brew install steipete/tap/birdclaw

The package is also published on npm:

npm install -g birdclaw

The npm and Homebrew installs retain the public Node.js >=26.5.1 <27 contract. Source development uses one checksum-pinned Bun 1.4.0-canary.1 build and keeps Node as a tested compatibility lane. See the installation guide for setup and the Bun canary reference for exact checksums, constraints, and rollback boundaries.

Quick start

Create a self-contained demo, search it locally, then open the web app:

birdclaw init --demo
birdclaw search tweets "local-first" --limit 3 --json
birdclaw serve

Open http://localhost:3000. The demo seeds sample tweets, DMs, profiles, and links without credentials or network requests.

Use your archive

A Twitter/X archive establishes the account identity for a new real database and imports tweets, DMs, likes, bookmarks, profiles, media, and follow edges:

birdclaw import archive ~/Downloads/twitter-archive.zip --json

Imports are idempotent and merge destination-only rows by default. Selected re-imports and exact replacement are documented in Archive import.

Birdclaw stores its database, configuration, and media under ~/.birdclaw. Set BIRDCLAW_HOME to use another root.

Add live data

Archive and local search work without an X login. Live sync delegates to xurl or an existing private bird installation and only runs when requested:

birdclaw sync timeline --limit 100 --refresh --json
birdclaw sync bookmarks --mode auto --limit 100 --refresh --json

Import an archive before the first live sync on a new database. The sign-in guide explains xurl setup and transport selection; the sync guide covers caching, pagination, and rate limits.

Work locally

SQLite is the canonical store. Archive imports and live transports converge on the same tables, and FTS5 powers local tweet and DM search.

| Surface | What it provides | Guide | | --- | --- | --- | | Web app | Home, mentions, saved posts, DMs, inbox, moderation, and network views | Quickstart | | CLI | Search, sync, moderation, research, JSON output, and scheduled jobs | CLI reference | | Backup | Deterministic JSONL shards that round-trip through Git | Backup | | MCP | Read-only cached tweet search and thread tools behind a dedicated token | MCP server |

Local reads do not trigger network traffic by default. The web server listens on loopback, live writes can be disabled with BIRDCLAW_DISABLE_LIVE_WRITES=1, and the MCP endpoint remains off until its token and public URL are configured.

Configuration

~/.birdclaw/config.json selects default accounts, transport preferences, mention sources, and backup behavior. Command flags override environment variables, which override the config file.

See Configuration for the complete file and environment reference. Product boundaries live in VISION.md, and storage and transport details live in Data and architecture.

Development

./scripts/bun-canary.sh install --frozen-lockfile
./scripts/bun-canary.sh run --bun check
./scripts/bun-canary.sh run --bun test
./scripts/bun-canary.sh run --bun build

The wrapper installs and verifies the exact Rust-port canary recorded in toolchains/bun-canary.conf; it refuses a newer rolling canary with a different checksum or revision. CI also runs Bun/Istanbul and Node/V8 coverage, dual-runtime installed-package smoke, and Playwright against the Bun production server.

License

MIT. Created by Peter Steinberger. Birdclaw is not affiliated with X Corp.