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

@johntalton/eefs

v2.1.1

Published

Implementation of [NASA EEFS](https://github.com/nasa/eefs) for Browser and Node

Readme

EEFS (eeprom file system)

Implementation of NASA EEFS for Browser and Node

npm Version GitHub package.json version CI

Usage

EEPROM file systems are best target for a write-once read many use case.

The example bellow shows writing to an offline EEPROMArrayBuffer implementation, which then can be copied in-full to the eeprom once files are generated and stored as-desired.

Using live EEPROM device is also fully supported

Example

import {
  EEFS,
  EEFS_SUCCESS,
  O_CREAT, O_WRONLY
} from '@johntalton/eefs'
import { EEPROMArrayBuffer } from '@johntalton/eefs/eeprom-array-buffer'

// create a mock 32K eeprom
const ab = new ArrayBuffer(32 * 1024 / 8)
const eeprom = new EEPROMArrayBuffer(ab)

const BASE_ADDRESS = 0
const options = {
  eeprom
}

const handle = await EEFS.initFS(options, BASE_ADDRESS)
if(handle.status !== EEFS_SUCCESS) { /* handle it */ }

const fd = await EEFS.open(handle, 'config.json', O_CREAT|O_WRONLY)
if(fd < 0) { /* not ok */ }

// ... etc

// make sure to close 👍
await EEFS.close(handle, fd)

Example with Custom TextDecoder / Collator

initFS can take in an encoder decoder and collator in order to process File Name. The default is utf-8 and fatal (which is common for most all cases).

However, if loading a filesystem that has been written with utf-16be (or other encodings) or there is a change of decoding issues (set fatal to false), the use of custom decoder can preserver what may be otherwise "invalid" file names.

This can also be useful when debugging a fs that may or may-not be in proper format.

Similarly, if a collator is passed in, it will be used to compare file names where function take in filename as a parameter. This can be useful for supporting custom filenames etc.

import { EEFS } from '@johntalton/eefs'
import { EEPROM } from '@johntalton/eeprom'

const eeprom = /* see EEPROM docs */

const options = {
  eeprom,
  encoder: new TextEncoder(),
  decoder: new TextDecoder('utf-16', { fatal: false, ignoreBOM: true })
  collator: Intl.Collator()
}

const handle = await EEFS.initFS(options, BASE_ADDRESS)
for await (const { filename } of EEFS.listInodes(handle)) {
  // note: because fatal is false, this be garbage-ish
  console.log('filename:', filename)
}

Micro

The original source include a "micro" implementation that can be used to bypass most of the inode/fileDescriptor ceremony and directly access file. While the use case is less interesting it is included here.

The findFile method take in similar parameter as initFS (including custom encoders etc) and returns a standard File implementation.

import { MicroFS } from '@johntalton/eefs/micro'

const eeprom = /* form some place */
const baseAddress = 0
const file = await MicroEEFS.findFile(eeprom, baseAddress, 'boot.txt')
if(file === undefined) { /* handle it ⛔️ */ }

console.log('last modified', file.lastModified)

// always an octet stream as eefs has not mime concept
// file.type === 'application/octet-stream'

const u8 = await file.bytes()
/* process buffer */

License

The original EEFS states that is licensed under NASA Open Source Agreement and on Wikipedia.

A listing can be found on NASA Site

Reference number: GSC-16852-1

This implementation is a whole cloth original creation inspired by the open sourced code base.

Original license as follows:

 Copyright (c) 2010-2014, United States government as represented by the
 administrator of the National Aeronautics Space Administration.
 All rights reserved. This software was created at NASAs Goddard
 Space Flight Center pursuant to government contracts.

 This is governed by the NASA Open Source Agreement and may be used,
 distributed and modified only pursuant to the terms of that agreement.