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

@hostasis/swarm-stamper

v0.3.0

Published

Client-side stamping and upload for Swarm.

Readme

@hostasis/swarm-stamper

Client-side stamping and upload for Swarm with derived reserve keys.

Features

  • Client-side stamping: Sign chunks with your reserve key (no gateway key needed)
  • Parallel uploads: Upload multiple chunks concurrently for maximum speed
  • Merkle tree support: Efficient chunking for large files
  • Manifest creation: Automatic Mantaray manifest generation for collections
  • SPA support: Single Page App mode with proper routing
  • Progress tracking: Real-time upload progress callbacks
  • TypeScript: Full type definitions included

Installation

npm install @hostasis/swarm-stamper

Usage

Basic Upload

import { StampedUploader } from '@hostasis/swarm-stamper';

const uploader = new StampedUploader({
  gatewayUrl: 'https://swarm.o8.is',
  batchId: '0x...', // Your postage batch ID
  privateKey: '0x...', // Your private key for signing
  depth: 20
});

// Upload files
const result = await uploader.uploadFiles(files, {
  isSPA: false,
  onProgress: (progress) => {
    console.log(`${progress.phase}: ${progress.message} (${progress.percentage}%)`);
  }
});

console.log('Reference:', result.reference);
console.log('URL:', result.url);
console.log('CID:', result.cid);

Single File Upload

const file = new File(['Hello, Swarm!'], 'hello.txt');
const result = await uploader.uploadFiles([file]);

console.log('File available at:', result.url);

Website Upload (SPA Mode)

// Upload a React/Vue/etc. SPA
const result = await uploader.uploadFiles(files, {
  isSPA: true, // Routes all 404s to index.html
  indexDocument: 'index.html'
});

console.log('Website live at:', result.url);

Progress Tracking

await uploader.uploadFiles(files, {
  onProgress: (progress) => {
    console.log(progress.phase); // 'chunking' | 'stamping' | 'uploading' | 'complete'
    console.log(progress.message); // Human-readable status
    console.log(progress.percentage); // 0-100
    console.log(progress.chunksProcessed, '/', progress.totalChunks);
  }
});

Upload Raw Data

const data = new Uint8Array([1, 2, 3, 4, 5]);
const result = await uploader.uploadData(data);

console.log('Data reference:', result.reference);

API Reference

StampedUploader

Constructor

new StampedUploader(config: StampedUploaderConfig)

Config:

  • gatewayUrl: Swarm gateway URL
  • batchId: Postage batch ID (hex string)
  • reservePrivateKey: Private key of batch owner (reserve key)
  • depth: Batch depth

Methods

uploadFiles(files: File[], options?: UploadOptions): Promise<UploadResult>

Upload files to Swarm with client-side stamping.

Options:

  • isSPA: Enable SPA mode (routes 404s to index.html)
  • indexDocument: Custom index document path
  • errorDocument: Custom error document path
  • onProgress: Progress callback function

Returns:

  • reference: Swarm hash (hex)
  • url: Full URL with CID subdomain routing
  • cid: CIDv1 representation
uploadData(data: Uint8Array): Promise<{ reference: string }>

Upload raw data as chunks.

License

MIT