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

@gittorrent/cli

v1.0.2

Published

A decentralised alternative to GitHub

Readme

gittorrent

Decentralised git collaboration. Push, pull, and clone repos peer-to-peer — no GitHub, no central server. Secrets management built in so you never have to WhatsApp .env files again.

Built on Hyperswarm + Autobase.

How it works

Developer A                          Developer B
    │                                    │
    │  git push origin master            │
    │  ──────► Autobase (local) ◄────────┤  git clone gittorrent://...
    │          │                         │
    │          ▼                         │
    │     Hyperswarm DHT                 │
    │     (peer discovery)               │
    │          │                         │
    └──────────┼─────────────────────────┘
               │
         Direct P2P connection
         (UDP hole punching)
  • Repos are identified by gittorrent:// URLs (base58-encoded public keys)
  • Writers are authenticated via ed25519 identity keys
  • Secrets are encrypted with sealed box crypto — only invited writers can decrypt

Install

git clone https://github.com/keanucz/gittorrent.git
cd gittorrent
npm install
export PATH="$PWD/bin:$PATH"

Quick start

Create a repo

cd my-project
git init && git add . && git commit -m "init"
gittorrent init                    # → gittorrent://ABC123...
git push origin master
gittorrent seed -d                 # seed in background

Clone it (another machine)

git clone gittorrent://ABC123...

Give someone write access

# They run:
gittorrent whoami                  # → prints their pubkey

# You run:
gittorrent invite <their-pubkey>

# Now they can push

Share secrets (no more WhatsApp .env files)

# Encrypt and store:
gittorrent secrets add .env
gittorrent secrets add prod.key --name keys/prod.key

# Collaborator retrieves:
gittorrent secrets get .env --output .env

# List stored secrets:
gittorrent secrets list

# After revoking someone, rotate the key:
gittorrent secrets rotate

Commands

| Command | Description | |---------|-------------| | gittorrent init | Initialise a gittorrent repo | | gittorrent whoami | Print your public key | | gittorrent invite <pubkey> | Add a writer (optionally --indexer) | | gittorrent revoke <pubkey> | Remove a writer | | gittorrent status | Show repo info, peers, writers | | gittorrent seed [-d] | Seed the repo (-d for daemon mode) | | gittorrent secrets add/get/list/rm/rotate | Manage encrypted secrets | | gittorrent help | Show help |

All commands support --help.

How secrets work

  1. First secrets add generates a random 256-bit symmetric key
  2. The key is sealed (asymmetric crypto) for each writer's ed25519 public key
  3. When you invite someone, the key is automatically sealed for their key too
  4. Secret files are encrypted with the symmetric key and stored in a Hyperbee
  5. secrets rotate generates a new key, re-encrypts everything, distributes to current writers
  6. Revoked writers never get the new key

Architecture

  • Autobase — multi-writer append-only log with deterministic state machine
  • Hyperswarm — DHT-based peer discovery with UDP hole punching
  • Corestore — manages Hypercore storage and replication
  • Hyperbee — sorted key-value store on top of Hypercore
  • sodium-native — ed25519 signatures, X25519 key exchange, sealed boxes

Environment variables

| Variable | Default | Description | |----------|---------|-------------| | GITTORRENT_DATA_DIR | ~/.gittorrent | Data directory | | GITTORRENT_LOG_LEVEL | warn | error\|warn\|info\|debug | | GITTORRENT_BOOTSTRAP_NODES | built-in relay | Custom DHT bootstrap nodes | | GITTORRENT_LINGER_MS | 3000 | Post-push replication time (ms) |

Development

npm test          # run all tests
npm run lint      # lint

License

MIT