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

@bugsplat/elfy

v2.0.0

Published

Tiny utility for parsing ELF/SELF files.

Downloads

1,557

Readme

bugsplat-github-banner-basic-outline

BugSplat

Crash and error reporting built for busy developers.

elfy

A tiny utility for parsing ELF/SELF files. Works in both Node.js and browsers.

Usage

  1. Install this package
npm i @bugsplat/elfy
  1. Create an instance of ElfFile by passing a DataSource. The library provides several built-in data sources:

Browser (with File input)

import { ElfFile, BlobDataSource } from '@bugsplat/elfy';

// From a file input element
const file = document.getElementById('file-input').files[0];
const dataSource = new BlobDataSource(file);
const elfFile = new ElfFile(dataSource);

Browser (with fetch)

import { ElfFile, BlobDataSource } from '@bugsplat/elfy';

const response = await fetch('https://example.com/file.elf');
const blob = await response.blob();
const dataSource = new BlobDataSource(blob);
const elfFile = new ElfFile(dataSource);

Node.js (with FileHandle for large files)

import { open } from 'node:fs/promises';
import { ElfFile, DataSource } from '@bugsplat/elfy';

// Create a custom DataSource for Node.js file handles
class FileHandleDataSource implements DataSource {
  constructor(private fileHandle) {}

  async read(offset: number, length: number): Promise<Uint8Array> {
    const buffer = new Uint8Array(length);
    const { bytesRead } = await this.fileHandle.read(buffer, 0, length, offset);
    return buffer.slice(0, bytesRead);
  }
}

const fileHandle = await open('path/to/elf/file', 'r');
try {
  const dataSource = new FileHandleDataSource(fileHandle);
  const elfFile = new ElfFile(dataSource);
  // ... use elfFile
} finally {
  await fileHandle.close();
}

In-memory buffer

import { ElfFile, BufferDataSource } from '@bugsplat/elfy';

// From an ArrayBuffer or Uint8Array already in memory
const dataSource = new BufferDataSource(arrayBuffer);
const elfFile = new ElfFile(dataSource);
  1. Read the contents of a section using readSection. This method throws if the section does not exist.
const contents: Uint8Array = await elfFile.readSection('.note.gnu.build-id');
  1. You can also safely read the contents of a section using tryReadSection.
const { success, section } = await elfFile.tryReadSection('.note.gnu.build-id');

Data Sources

The library uses a DataSource interface to abstract reading bytes from any source:

interface DataSource {
  read(offset: number, length: number): Promise<Uint8Array>;
}

Built-in implementations:

  • BlobDataSource - For browser Blob/File objects. Reads only the requested bytes using Blob.slice().
  • BufferDataSource - For in-memory Uint8Array or ArrayBuffer data.

You can create custom implementations for other sources (e.g., Node.js FileHandle, HTTP range requests, etc.).

🐛 About

BugSplat is a software crash and error reporting service with support for game engines like Unreal Engine, and supports platforms such as PlayStation, Xbox and many more. BugSplat automatically captures critical diagnostic data such as stack traces, log files, and other runtime information. BugSplat also provides automated incident notifications, a convenient dashboard for monitoring trends and prioritizing engineering efforts, and integrations with popular development tools to maximize productivity and ship more profitable software.