---
visibility: public
---

# Mad Science npm Packages

**repo:** [feross/awesome-mad-science](https://github.com/feross/awesome-mad-science)  
**category:** [[programming-languages|Programming Languages]]
**related:** [[npm|Npm]]

---

# Awesome Mad Science [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)

Delightful npm packages that make you say "wow, didn't know that was possible!" PRs welcome!

## peer-to-peer
- [peerwiki](https://www.npmjs.com/package/peerwiki) - all of wikipedia on bittorrent
- [simple-peer](https://www.npmjs.com/package/simple-peer) - send video/voice/data p2p in the browser (with webrtc)
- [torrent-docker](https://www.npmjs.com/package/torrent-docker) - realtime boot of remote [docker](/@harrisonqian/awesome/wiki/back-end-development/docker) images over bittorrent
- [torrent-mount](https://www.npmjs.com/package/torrent-mount) - mount a torrent as a filesystem
- [webtorrent](https://www.npmjs.com/package/webtorrent) - [streaming](/@harrisonqian/awesome/wiki/big-data/streaming) torrent client for node & the browser

## browserify
- [brfs](https://www.npmjs.com/package/brfs) - turn `fs.readFileSync()` calls into inlined static assets
- [browser field spec](https://gist.[github](/@harrisonqian/awesome/wiki/development-environment/github).com/defunctzombie/4339901) - replace certain files/modules when a module is bundled for the browser
- [browserify](https://npmjs.org/package/browserify) - use `require()` in the browser
- [glslify](https://github.com/stackgl/glslify) - npm modules compiled into [WebGL](/@harrisonqian/awesome/wiki/front-end-development/webgl) shaders
- [webworkify](https://www.npmjs.com/package/webworkify) - composable web workers for [browserify](/@harrisonqian/awesome/wiki/front-end-development/browserify)

## files
- [file-type](https://www.npmjs.com/package/file-type) - detect file content types by checking their magic numbers
- [fuse4js](https://www.npmjs.com/package/fuse4js) - write filesystem driver in js

## geometry
- [alpha-shape](https://www.npmjs.com/package/alpha-shape) - any dimensional alpha shapes (think "concave" hull)
- [box-intersect](https://www.npmjs.com/package/box-intersect) - fast any dimensional box intersection detection
- [convex-hull](https://www.npmjs.com/package/convex-hull) - robust any dimensional convex hull
- [delaunay-triangulate](https://www.npmjs.com/package/delaunay-triangulate) - robust any dimensional delaunay triangulation
- [surface-nets](https://www.npmjs.com/package/surface-nets) - extracts level sets in any dimension
- [voronoi-diagram](https://www.npmjs.com/package/voronoi-diagram) - any dimensional voronoi diagrams
- [voxelize](https://www.npmjs.com/package/voxelize) - voxelize a mesh

## hardware
- [cylon](https://www.npmjs.com/package/cylon) - command robots, devices, and more from node

## images
- [indico.io](https://www.npmjs.com/package/indico.io) - facial emotion recognition and facial feature extraction
- [trackingjs](https://trackingjs.com/) - [computer vision](/@harrisonqian/awesome/wiki/computer-science/computer-vision) on the web

## sound
- [doppler](https://github.com/DanielRapp/doppler) - detect motion with the doppler effect using only the microphone and [speakers](/@harrisonqian/awesome/wiki/miscellaneous/speakers)
- [speak.js](https://github.com/mattytemple/speak-js) - text-to-speech on the web

## streams
- [strip-html](https://www.npmjs.com/package/strip-html) - strip html from a stream

## text
- [diff](https://www.npmjs.com/package/diff) - show text differences
- [franc](https://www.npmjs.com/package/franc) - detect the language of text
- [indico.io](https://www.npmjs.com/package/indico.io) - political sentiment analysis
- [node-tesseract](https://www.npmjs.com/package/node-tesseract) - A simple wrapper for the Tesseract OCR package
- [normit](https://www.npmjs.com/package/normit) - Google translate text & speak it
- [ocrad.js](https://www.npmjs.com/package/ocrad.js) - OCR in [Javascript](/@harrisonqian/awesome/wiki/programming-languages/javascript) via Emscripten
- [pullquoter](https://www.npmjs.com/package/pullquoter) - pull interesting quotes out of an article
- [sbd](https://www.npmjs.com/package/sbd) - split text into sentences
- [sentiment](https://www.npmjs.com/package/sentiment) - basic sentiment analysis

## terminal
- [minimist](https://www.npmjs.com/package/minimist) - simple argument parser
- [progress](https://www.npmjs.com/package/progress) - create a simple terminal progress bar
- [terminal-menu](https://www.npmjs.com/package/terminal-menu) - create retro terminal menus
- [vantage.js](https://github.com/dthree/vantage) - CLI + SSH + REPL for Node
- [cash](https://github.com/dthree/cash) - [Cross-platform](/@harrisonqian/awesome/wiki/platforms/cross-platform) [Linux](/@harrisonqian/awesome/wiki/platforms/linux) commands in pure ES6

## virtual machines
- [jsemu](https://github.com/fcambus/jsemu) - A list of emulators written in the [JavaScript](/@harrisonqian/awesome/wiki/programming-languages/javascript)
- [jslinux](https://www.npmjs.com/package/jslinux) - x86 emulator for running [Linux](/@harrisonqian/awesome/wiki/platforms/linux), written in [JavaScript](/@harrisonqian/awesome/wiki/programming-languages/javascript)
- [jvm](https://www.npmjs.com/package/node-jvm) - [java](/@harrisonqian/awesome/wiki/programming-languages/java) virtual machine in pure [node.js](/@harrisonqian/awesome/wiki/platforms/node-js)
- [doppio](https://github.com/plasma-umass/doppio) - actively updated jvm in [node.js](/@harrisonqian/awesome/wiki/platforms/node-js), written in TypeScript

## misc
- [bell.js](https://www.npmjs.com/package/bell.js) - real-time anomalies detection for periodic time series.
- [bitcoinjs-lib](https://www.npmjs.com/package/bitcoinjs-lib) - [bitcoin](/@harrisonqian/awesome/wiki/decentralized-systems/bitcoin) client for node & the browser
- [fastparallel](https://www.npmjs.com/package/fastparallel) - zero overhead parallel function calls
- [google-distance](https://www.npmjs.com/package/google-distance) - calculate travel distance between two locations on [earth](/@harrisonqian/awesome/wiki/miscellaneous/earth) using Google Maps' API
- [qr-image](https://www.npmjs.com/package/qr-image) - generate QR codes

## meta-programming

- [notevil](https://www.npmjs.com/package/notevil) - [javascript](/@harrisonqian/awesome/wiki/programming-languages/javascript) [javascript](/@harrisonqian/awesome/wiki/programming-languages/javascript) interpreter, useful for running untrusted code safely.

## mad scientists (people)
- [Mikola Lysenko](https://www.npmjs.com/~mikolalysenko) - linear algebra, [computational geometry](/@harrisonqian/awesome/wiki/miscellaneous/computational-geometry), [WebGL](/@harrisonqian/awesome/wiki/front-end-development/webgl)
- [Dominic Tarr](https://www.npmjs.com/~dominictarr) - streams, distributed systems
- [Elijah Insua](https://www.npmjs.com/~tmpvar) - NC machines, CAD/CAM
- [Mathias Buus](https://github.com/mafintosh) - torrents in node, [fuse](/@harrisonqian/awesome/wiki/platforms/fuse) bindings, data replication
- [Feross Aboukhadijeh](https://github.com/feross) - webtorrent, bittorrent, p2p hacks
- [Max Ogden](https://github.com/maxogden) - streams, voxels, data replication

## License

[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)](http://creativecommons.org/publicdomain/zero/1.0/)

To the extent possible under law, [Feross Aboukhadijeh](http://feross.org) has waived all copyright and related or neighboring rights to this work.
