# 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 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 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.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 shaders
- [webworkify](https://www.npmjs.com/package/webworkify) - composable web workers for 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 on the web

## sound
- [doppler](https://github.com/DanielRapp/doppler) - detect motion with the doppler effect using only the microphone and 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 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 Linux commands in pure ES6

## virtual machines
- [jsemu](https://github.com/fcambus/jsemu) - A list of emulators written in the JavaScript
- [jslinux](https://www.npmjs.com/package/jslinux) - x86 emulator for running Linux, written in JavaScript
- [jvm](https://www.npmjs.com/package/node-jvm) - java virtual machine in pure node.js
- [doppio](https://github.com/plasma-umass/doppio) - actively updated jvm in 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 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 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 javascript interpreter, useful for running untrusted code safely.

## mad scientists (people)
- [Mikola Lysenko](https://www.npmjs.com/~mikolalysenko) - linear algebra, computational geometry, 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 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.
