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

@orbital-stellar/orbital-indexer

v0.2.0

Published

Auto-publish indexer: discovers unknown contracts' interfaces via WASM auto-discovery and publishes them to the on-chain ABI registry as part of normal engine operation.

Readme

@orbital-stellar/orbital-indexer

Auto-publish indexer for Orbital's semantic layer (maintainer.md stage 4). Watches an EventEngine's contract stream for contractIds the ABI registry doesn't yet have a spec for, discovers their interface via WASM auto-discovery (@orbital-stellar/abi-registry's discoverContractSpec), and publishes the result to the on-chain registry - so Orbital writes on-chain continuously as part of normal operation, with manual abi-registry publish staying available as the override path for teams that want custom naming.

Usage

import { EventEngine } from "@orbital-stellar/pulse-core";
import { OnChainAbiRegistryClient, OnChainRegistryPublisher } from "@orbital-stellar/abi-registry";
import { AutoPublishIndexer } from "@orbital-stellar/orbital-indexer";

const engine = new EventEngine({ network: "testnet" });
engine.start();

const registryClient = new OnChainAbiRegistryClient({
  contractId: REGISTRY_CONTRACT_ID,
  rpcUrl: RPC_URL,
  networkPassphrase: NETWORK_PASSPHRASE,
  publisher: ORBITAL_PUBLISHER_ADDRESS,
});

const publisher = new OnChainRegistryPublisher({
  contractId: REGISTRY_CONTRACT_ID,
  rpcUrl: RPC_URL,
  networkPassphrase: NETWORK_PASSPHRASE,
  publisherSecret: ORBITAL_PUBLISHER_SECRET,
});

const indexer = new AutoPublishIndexer({
  engine,
  registryClient,
  publisher,
  rpcUrl: RPC_URL,
  network: "testnet",
  pointerStrategy: async (spec, canonicalJson) => {
    // Host canonicalJson somewhere and return the URL it's served from.
    return await uploadSpecBlob(spec.contractId!, canonicalJson);
  },
});

indexer.start();

Not wired into any public-facing route - anonymous visitors triggering real signed transactions per typed contract ID is an abuse vector. This is a standalone process/script, not part of a public request path.

Behavior

  • Skips contracts the registry already has a spec for.
  • Concurrent events for the same not-yet-known contract share one in-flight discovery - no duplicate publish attempts.
  • Contracts with no embedded spec section (NoEmbeddedSpecError - stripped or non-Rust) are cached as undiscoverable and retried after a backoff window (undiscoverableTtlMs, default 30 minutes) rather than retried on every single event.