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

ordpool-parser

v2.0.3

Published

Zero-dependency TypeScript parser for Bitcoin digital artifacts: Inscriptions, Runes, BRC-20, SRC-20, CAT-21, Atomicals, and Labitbu. Works in Node.js and browsers.

Readme

ordpool-parser

Yes, Bitcoin is money. Everything else is an attack on Bitcoin. We get it. BIP 110 will fix this.

But you still want to know what's inside your blocks, don't you? Know your enemy! ;-)

ordpool-parser is a zero-dependency TypeScript parser that detects and extracts digital artifacts from raw Bitcoin transactions: Inscriptions, Runes, BRC-20, SRC-20 Stamps, CAT-21, Atomicals, and Labitbu.

Works in Node.js and browsers out of the box. Used by ordpool.space.

npm install ordpool-parser

What does it parse?

| Protocol | What it detects | Key data extracted | |----------|----------------|-------------------| | Inscriptions | OP_FALSE OP_IF "ord" envelope in witness | Content, content type, metadata, parents, delegates, galleries (tag 17 properties with items + traits) | | Runes | OP_RETURN runestone | Etching, mint, transfers, cenotaphs | | BRC-20 | JSON inscriptions with "p": "brc-20" | Deploy, mint, transfer operations | | SRC-20 | RC4-encrypted stamp data in multisig outputs | Deploy, mint, transfer operations | | CAT-21 | Transactions with nLockTime == 21 | Deterministic cat image (SVG) + traits | | Atomicals | OP_FALSE OP_IF "atom" envelope in witness | Operation type, CBOR payload, args, file attachments | | Labitbu | WebP image in Taproot control block (NUMS key) | 4096-byte WebP image |

Quick start

The parser expects transactions in Esplora API JSON format (used by mempool.space and blockstream.info).

Parse everything at once

import { DigitalArtifactsParserService } from 'ordpool-parser';

const response = await fetch(`https://mempool.space/api/tx/${txId}`);
const tx = await response.json();

// Returns all digital artifacts found in the transaction
const artifacts = DigitalArtifactsParserService.parse(tx);

Parse specific types

import {
  InscriptionParserService,
  Cat21ParserService,
  RuneParserService,
  AtomicalParserService,
  LabitbuParserService,
  Src20ParserService,
} from 'ordpool-parser';

// Inscriptions (can return multiple — batch inscriptions)
const inscriptions = InscriptionParserService.parse(tx);
if (inscriptions.length) {
  console.log(inscriptions[0].contentType);
  console.log(await inscriptions[0].getContent());

  // Galleries (tag 17 properties)
  const properties = await inscriptions[0].getProperties();
  if (properties) {
    console.log(properties.gallery);  // Array of { inscriptionId, title?, traits? }
  }
}

// CAT-21
const cat = Cat21ParserService.parse(tx);
if (cat) {
  console.log(cat.getImage());   // SVG string
  console.log(cat.getTraits());  // { genesis, gender, designIndex, ... }
}

// Runes
const rune = RuneParserService.parse(tx);
if (rune?.runestone?.etching) {
  console.log(rune.runestone.etching.runeName);
}

// Atomicals
const atomical = AtomicalParserService.parse(tx);
if (atomical) {
  console.log(atomical.operation);   // 'nft', 'dft', 'ft', 'mod', ...
  console.log(atomical.getArgs());   // { request_ticker, mint_amount, ... }
  console.log(atomical.getFiles()); // [{ name, contentType, data }]
}

// Labitbu
const labitbu = LabitbuParserService.parse(tx);
if (labitbu) {
  console.log(labitbu.getDataRaw()); // 4096-byte WebP image
}

Analyze a full block

import { DigitalArtifactAnalyserService } from 'ordpool-parser';

// Analyze all transactions in a block — returns per-type counts, fees, mint activity
const stats = await DigitalArtifactAnalyserService.analyseTransactions(blockTxns);

License

MIT