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

filebus

v0.2.4

Published

I/O based on inotify and file watchers

Readme

filebus

Build Status Coverage Status

Social Media Photo by Juan Encalada on Unsplash

A communication channel based on files watcher.

Example

You can clone this repository and inotifywait-spawn in the same folder, enter into the filebus/example directory and launch npm start to see Python and NodeJS communicating with each other.

You can also grasp most of this utility via the following example:

const FileBus = require('filebus');

// new instance with either an input to listen for
// or an output to send messages ... or both!
const fb = new FileBus(
  input,  // optional input file to watch
  output  // optional output file to write
);

// INPUT relatd API

// will be triggered when the file will contain
// "ready" with eventually extra data as JSON
fb.on('ready', console.log);

// triggered when there are reading errors
// from the watched input file
fb.on('error', console.error);

// stop listening to events
// no more events triggered
fb.stop();


// OUTPUT related API

// will write the following into the output file
// "ready {"optional":"data"}"
// if there is a watcher listening for "ready",
// or any other event name, it will be invoked
// receiving the object {optional: 'data'}
fb.send('ready', {optional: 'data'}).then(() => {
  // executed once the content has been written
  // and also synced with the system
});


// HANDSHAKE

// whenever the input/output files are between two
// different instances of FileBus or two different PLs
// the handshake, from one of the two sides, grants
// that both instances are setup and ready to react

fb = new FileBus('.python', '.js', true);
// Python counterpart: fb = FileBus('.js', '.python')

// will happen once Python responds
fb.once('handshake', () => {
  fb.send('update-display', 'Hello World');
});

fb.handshake();

Communicate with Python 3

This module contains a python/filebus.py file where you can import FileBus and use pretty much exact same API.

Please note the python file also relies in this module dependencies, so that inotifywait-spawn module must be installed too, otherwise its python/inotifywait.py would be missing.

inotifywait requires the Python 3 inotify_simple module.

sudo pip3 install inotify_simple

To import FileBus you can write the following:

import os
import sys
sys.path.insert(1, os.path.realpath('./node_modules/filebus/python'))

from filebus import FileBus

fb = FileBus('test.txt', 'test.txt', True)
fb.on('ready', lambda data: print(data))
fb.send('ready')

# wait for events to trigger
import time
time.sleep(0.1)

# close and cleanup the file
fb.stop()

Practical Applications

The countdown project is fully based on FileBus to drive e-paper displays, via Python 3, from Node.js.

Check its JS side, or one of its Python counterparts.