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

chatternet-lib

v0.11.0

Published

ChatterNet implementation

Readme

Chatter Net

Chatter Net is a modern decentralized web with social identity at its core.

Find more information chatternet.github.io.

Warning: Chatter Net is currently in the prototype phase. Features are missing, features are broken, and the public interface will change.

Technology

Chatter Net is a library and protocol for building open social web platforms.

Networking

The network stack is implemented with Libp2p. It allows for secure peer-to-peer and peer-to-server communication.

Data format

Activity Stream is semantic, self-describing JSON-based data format. It can be used to describe arbitrary digital data as well as interactions between actors and the data.

Identity

The did key standard uses public-private key pair cryptography to prove identity. User accounts are created locally by a user, and the private credentials created by that user allow them to prove their identity to other users. Verifiable credentials are used to attach information (e.g. a name, avatar, number) to an identity.

Project Objectives

  • Open: anyone can participate in, extend, and innovate on the platform.
  • Decentralized: there is no central point of failure, network consensus determines what content arrives to a user.
  • Spam resistant: only contacts are able to send one another data, and that data contains the chain of contacts linking back to its author.
  • Platform: Chatter Net is not itself the innovation, rather innovation can be built on top of Chatter Net.

Examples

Coming soon.

Development

Requirements

The only system requirement is Node JS and a web browser. You can get Node JS on macOS or Linux with the following command:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install --lts

Installation

Get the source code using Git:

git clone https://github.com/chatternet/chatternet-lib.git

Or by downloading and extracting from https://github.com/chatternet/chatternet-lib/archive/refs/heads/main.zip.

Then install using NPM:

npm install

Commands

  • npm run clean: remove the built package
  • npm run fmt: format all source code
  • npm run build: build the package
  • npm run test: run all tests (in a node environment)
  • npm run deploy: chain together commands used to prepare for deployment

Package configuration

Package building is handled by aegir: https://ipfs.github.io/aegir/. This is a Typescript template which necessitates further configuration: https://github.com/ipfs/aegir/blob/master/md/ts-jsdoc.md.

package.json

  • The types key is set to module such that the project is exported as an ESM.
  • TS types are output at dist/src/index.d.ts.
  • The files key avoids packaging the compiled tests.
  • The exports key specifies which module exports can be imported from the package.
  • The typesVersions key is a workaround to allow importing types for other parts of the code.

Testing

Test are added to the test directory with the suffix .spec.ts. They can import from src using Typescript imports and ESM imports.

The tests are themselves built and output in dist/test. From there, they import from the built dist/src. In this way the tests run as compiled JS, calling code from the distributed module.

TODO

Here is a list of short term development priorities:

  • Data lifecycle policy: currently a node accumulates data and could eventually overwhelm the browser storage. A lifecycle policy can be developed to discard old data.
  • Multi-device: currently a user account is tied to a single device.
  • Account migration: currently if an account is lost or stolen, the user has no recourse. A system can be developed such that a new account can be made to replace the old one, and the contacts of the old account can vouch for the migration to the new one. A system can be developed to synchronize account data between multiple devices.
  • Batch synchronization: currently data is exchanged one record at a time. A protocol can be developed to allow two nodes to synchronize large numbers of records (e.g. on first connect).
  • Share server information: currently servers can be used for stability an availability, but only one server is hard coded in the source. Server information can be exchanged dynamically between peers.
  • Decouple storage from the indexed DB implementation: currently storage (persistence) is achieved only using indexed DB which is not available in node-based (server) environments. The library can rely on a generic interface which can be backed by different storage technologies.
  • Audience filter: currently every user receives every record from the network. A user can be able to specify their interests and receive only records matching those interests.
  • Optimizations: the library is developed with to the point of being correct, but not optimal. Many optimizations will be necessary for the library to operate in various networking conditions.

Help

  • Typescript library development and deployment
  • Libp2p best practices and future-proofing
  • Open source community management