# 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. [madscience.md Github](https://github.com/feross/awesome-mad-science )