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

aesh

v1.1.0-reupload

Published

Encrypt and share files through IPFS via QR codes or NFC tags.

Readme

npm version

aesh

Encrypt and share files through IPFS via QR codes or NFC tags.

> npm i -g aesh

Requirements

  • Nodejs
  • IPFS (daemon running and the ipfs command installed in your PATH)

Usage

> aesh add <file.(txt|pdf|mp3|...)>

The above command will do four things:

  1. Encrypt a given (local) file using the aes-256-cbc algorithm

  2. Add (upload) the encrypted file to your local IPFS

  3. Register the file in your local MFS (IPFS) using the same path as on your local filesystem

  4. Return a QR code and the plain URL pointing to the file inside IPFS.

    Anyone with the presented link (URL or QR code) can decrypt and view
    or download the file through any modern web browser.

Disclaimer: Share the qr code / full link with people you trust only! The text behind the hash (#) in the end of the URL is the single and only thing needed to decrypt the uploaded file and should therefor be treated like a password.

Example

> aesh add hello-world.txt 

encryping contents..
uploading file..
 1.76 KiB / 1.76 KiB [============] 100.00%
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▀▄  ▀██▀ █▀▄  ▄▄▀   ▄▀ ▄▄█ ▄▄▄▄▄ █
█ █   █ █▀ ▄▄██▄▀▄█▀▄▄▄▄▄█▀▄▀██▄█▀█ █   █ █
█ █▄▄▄█ █▀██▀ ▀▄▄▄█▀▀▄█▄▄ █▄  ▀██▄█ █▄▄▄█ █
█▄▄▄▄▄▄▄█▄▀ ▀ █▄█ █▄▀ ▀▄█▄█▄█▄█ █▄█▄▄▄▄▄▄▄█
█ ▄▄▄ █▄▄ ▄ █▀ ▄▀ ▀█  █ █▄█▄▀▀▄█   ▀ ▀ █ ▀█
█▀▄ █▄▀▄▀▄▄▀▄█ ▄▄  ▀█▄ ▀▀▀▄█ ▄█▄█▄█ █ ▀█▀▀█
█  ▀██▄▄█ █▄▄▀▀▄▀▄█▀▄▄▀▀▀█▀▄▄█▄▀  ▀█▀▀▄ █▀█
████▀▀▀▄▄▀  █▀▄  ▄▄▀█▄▀▄█▀▄▀▄ ▄▄▀▄▀▀▄  ▄▀██
█  ▄▄  ▄ ▄▀▀▀▄█ ▄▀▄▀█ ▄▄▀▄▄▀    ▀▀█▀ ▀▄████
███▄ ▄ ▄▀▀█▄█ █▀▄▀█▄▀▀ █▀██ ▄▀█▀▀   ▄▄▀████
█▀▄ ██ ▄█▀▄▀█▄▀▀ ▀█▄█▀▀▀▀█▄▀▄▄▀█▄ ▀▀  ▄▄█ █
██▀▄▄  ▄█▀▄▄ ▄▄██▀█▀ ▀ ▀█▀▄ ▄█▄███▄▀▄█▀█▀██
█▄█ ▄██▄▀▄ ▄ █ ▄▀▀▀█ ▄ ▄▀▀▄ █▀██ █ ▀▀▀██  █
█▀ ▀█▄█▄▀▀█▀██ ▄ ▄ ▀▀▀ ▄█▀█▀▄▀▄▀▀ █▀ █▄▄█▀█
█ ▀▀█ ▄▄ █▀██▀▀▄▀▄█▀▄█▀▄ ▀  ▄▀▄█ ▀██▀▀   ▀█
█ █▀█ ▄▄▀▄  █▀▄  ▄█▀█ ▀▄█▀██▄ █▄█▄▀ █  ▄▀██
█▄██▄█▄▄█▀▄██▄█▄▄ ▄▀▄▀   █▀▄▄▄▄▀█ ▄▄▄ █▀ ▀█
█ ▄▄▄▄▄ █▄▀▀█▄█▀▄ █▄█▄▀▄█▀▄█▄▀▄▀  █▄█ █▄ ▀█
█ █   █ █ ▄▄█▄█▀ ▀█▄ ▄▄▄▀█  ▄▀▀▀▀▄▄▄▄▄▀▄█▀█
█ █▄▄▄█ █    ▄▄▄█▀▄▄█ ▀█▀▄█▄  ██▀ ▄▄▀▄▀▄▀██
█▄▄▄▄▄▄▄█▄██▄██▄██▄█▄▄█▄███▄██▄███▄▄▄█▄▄███

Share available at: https://ipfs.io/ipfs/Qmf6fQBPK7xLQy7cFzvAFZyN6YwqVdTcgyFoWboZoFTEpf#mVkPOFpkQoJgV1hSxRQlVvMgj7+O2E1zvy1qt1984fM=

How does it work?

When sharing a new file, aesh first reads its contents and encrypts them using the aes-256-cbc algorithm. The key used for encrypting the file is generated randomly and can later be used to decrypt it again.

The share-link presented later (which is also the link stored inside the QR code) contains this key in the fragment identifier (the # hash) of the URL – this section never leaves the browser during HTTP requests.

After encrypting your file, aesh embeds the encrypted contents in a small HTML file, that contains a few lines of JavaScript, which is what is actually being uploaded to IPFS.

Utilitizing the WebCrypto API, the HTML file takes the fragment identifiert (hash # section) from the URL used to access it to decrypt the baked-in contents of the original file.

After successful decryption, a Blob is generated from the decrypted contents, which is then either offered for download, or previewed in the browser directly, depending on the mime-type and browser support – as a fallback, a "download link" to the blob will be presented to the user.

By default, the program uses identify-stream to automatically determine the mime-type of the file selected for sharing.

Supported Mime-Types

Any mime-type supported by identify-stream.

Furthermore, the following types (based on file extension):

| Extension | Mime-Type | Presentation | | --------- | ---------------------- | ------------ | | .iso | application/x-cd-image | Download | | .htm[l] | text/html | Preview |

The fallback mime-type is text/plain.

Taking down local shares

Shares technically cannot be "removed" once they have been pinned by other IPFS nodes. Nevertheless, this is very unlikely to happen in the early stages of a share, or when it's link or QR code has not been distributed yet.

To conveniently remove the shared file from your local IPFS, use:

> aesh del <file.(txt|pdf|mp3|...)>

where the filename corresponds to the source file on your local disk.

Like add, the del-command works with relative paths just like you were referring to the source file on your disk.

ae-sh?

It's "ash" /ɛʃ/, but the reasonable separation would be aes-sh for AES-share.

Background

Inspired by dlnet.

Created to host a digital version of my bachelor thesis – which had to be encrypted – on IPFS. The QR codes were attached to the physical copies.

It was also planned to store the share-link inside NFC tags, but since the library where the thesis would eventually end up used RFID to identify print media, this was not implemented. Though the thought about an NFC tag, which grants access to a digital copy hosted on the decentralized web is still very fancy~.


aesh - Lesosoftware 2022