Essential JavaScript Links
A curated list by Eric Elliott and friends. Suggest a link with a PR or open a new issue.
Help us turn this into a proper website!
This is a very exclusive collection of only must-have JavaScript links. I'm only listing my favorite links. Nothing else makes the cut. Feel free to suggest links if you think they're truly essential.
Full Disclosure
Some of these links are affiliate links, meaning that if you make a purchase, I might earn a little money. This has absolutely no bearing on whether or not links make the list. None, whatsoever. However, it does allow me more resources to fight poverty with code. Every little bit counts.
Required Reading (Online resources)
- Learn to Code: 13 Tips That Could Save You Years of Effort #article
- Learn JavaScript Essentials (for all skill levels) One clear path to JavaScript mastery #article
- The Two Pillars of JavaScript Part 1: Prototypal OO #article
- The Two Pillars of JavaScript Part 2: Functional Programming #article
- JavaScript Objects An excellent explanation of inheritance in JavaScript by Kyle Simpson #article
- JavaScript Application Architecture on the Road to 2015 Addy Osmani #article
- Modularity A pragmatic take on the tiny modules vs batteries included approach
- Computer Science in JavaScript by Nicholas C. Zakas #article
- The Dao of Immutability The Way of the Functional Programmer #article
- Reactive MVC and the Virtual DOM Great read, even if you're not a React user. #article
- Introduction to Reactive Programming #article
- The General Theory of Reactivity What is all this talk about reactive? Functional? Promises? This is the beginning of a reactive programming bible. #article
- Why Functional Programming Matters by John Hughes, 1984 #paper #pdf
- Unapply attack Make your JS apps more secure by freezing builtins. #article
- ES6 Generators A series of blog posts by Kyle Simpson #article
- Typed JavaScript Excellent post about the state of typed JavaScript by Axel Rauschmayer #article
- ES6 Modules: The Final Syntax by @rauschma #article
- javascript-sdk-design A guide for people building JavaScript client SDKs #article
- Advanced Performance Audits with DevTools In-depth perf case studies with Paul Irish #article
Required Viewing
- Classical Inheritance is Obsolete: How to Think in Prototypal OO by Eric Elliott #talk
- Composition Over Inheritance by Mattias Petter Johansson #video
- Everything You Never Wanted to Know About JavaScript Numbers by Bartek Szopka #talk
- Asynchronous Programming at Netflix Jafar Husain #talk
- What is Reactive Programming? Jafar Husain explains reactive programming #talk
- Introduction to React by Jordan Walke #talk
- Introduction to Reactive Programming by André Staltz #video #course
- Immutability: Putting The Dream Machine To Work by David Nolen #talk
- The Essence of FRP by Conal Elliott #talk
- JavaScript API Design Principles by Ariya Hidayat #talk
- Delivering the Goods Paul Irish on one of the most important but overlooked topics in the development world today - page load times. #talk
- Supercharging Page Load by Jake Archibald #video
- Slay'n the Waste Monster by Colt McAnlis #talk
- Simplicity Matters A later version of the influential talk, "Simple Made Easy" by Rich Hickey #talk
- Making WebGL Dance by Steven Wittens #talk
- The Pixel Factory by Steven Wittens #talk
- Getting Started with Redux by Dan Abramov. Describes a functional approach to application state that all developers should be aware of. #course #video
- Cycle.js Fundamentals by André Staltz. #course #video
Exercises
- FreeCodeCamp Learn to build apps & work on not-for-profit projects. #exercises
- LearnRx #exercises
- Javascripting Learn JavaScript by adventuring around in the terminal #exercises
- Functional Javascript A functional javascript workshop #exercises
- Count Up to Version 6 of JavaScript! An intro to some ES6 features via a set of self-guided workshops #exercises
- ESNext Generation Interactive Workshop Learn ES6's Iterators & Generators in this interactive Javascript workshop #exercises
- Promises A Workshopper module that teaches you to use promises in javascript #exercises
- WebGL Learn the WebGL API #exercises
- WebGL with three.js An introduction to WebGL with three.js #exercises
Spec
- ES5 Spec An annotated, hyperlinked version of the ES5 spec
- ES6 Spec ECMAScript® 2015 Language Specification
- ES2016 (ES7) Spec
Books
- JavaScript for Kids by Nick Morgan
- Eloquent JavaScript by Marijn Haverbeke
- JavaScript: The Good Parts by Douglas Crockford
- Effective JavaScript by David Herman
- Programming JavaScript Applications by Eric Elliott
- JavaScript: The Definitive Guide by David Flanagan
- You Don't Know JS by Kyle Simpson
- Understanding ECMAScript 6 by Nicholas C. Zakas
- JavaScript Allongé by Reginald Braithwaite
- Node.js in Action by Mike Cantelon, Marc Harter, T.J. Holowaychuk and Nathan Rajlich
- High Performance Browser Networking by Ilya Grigorik #book
- "Seven Languages in Seven Weeks" Learn different ways of solving problems and you'll deepen your understanding of JavaScript. #book
- WebGL Fundamentals by Greggman - An interactive online book about graphics programming.
Dev tools & collaboration
- nvm First install this...
- Node Then install Node (with nvm). You'll need this even if you're a front-end dev.
- npm Install lots of other things with npm. The package manager for JavaScript. Comes with Node.
- Yarn "Fast, Reliable, and Secure Dependency Management". May speed up your installs and make them more deterministic than using npm. Uses the npm registry.
- Atom Nice, hackable editor by GitHub.
- Tern Static analysis in JavaScript
- Slate Generate beautiful API docs for your apps
- Slack Chat for teams, with GitHub and Google hangouts integration
- Gitter Like Slack, but better for OSS projects and free chat.
- Zoom Video meetings with remote control - great for interviews and remote pair programming.
- PrettyDiff
- Babel Repl The Babel REPL with compiled output
- ESNextBin A babel powered ES6+ browser bin with npm package support.
- Cloud9 Your dev environment and IDE in the cloud.
- Koding Online cloud development platform with video & audio collaboration.
- updtr Keep your modules up to date.
- Greenkeeper Automatically opens PRs when your dependencies fall behind latest.
- greenkeeper-keeper Automatically merges Greenkeeper PRs when tests pass.
Building
- Webpack Bundle modules for the browser.
- How to use NPM as a Build Tool
- pre-commit Easily configure pre-commit hooks for your package
Testing / Lint / Quality checkers
- ESLint The pluggable linting utility for JavaScript and JSX.
- ESLint no-inferred-methodname A custom rule for a common problem. #code
- Istanbul Code coverage reporting
- nyc a code coverage tool built on istanbul that works for applications that spawn subprocesses.
- tape Dead simple unit testing #code
- tap-browser-color Prettify tap output in the browser. Works well with Tape. #code
- faucet Prettify tap output in the console. Plays well with Tape. #code
- Supertest The best way to test HTTP endpoints. #code
Transpilers
- Babel Transpile ES2015 (ES6), ES7 to ES5, JSX to React.
- TypeScript TypeScript's structural types are worth a look.
- You Might Not Need TypeScript #article
- Emscripten Frequently used to compile C/C++ to JavaScript.
- ES6 tools Addy Osmani's ES6 Tools list.
JavaScript environments
- Node.js Server side JavaScript and more.
Libraries
- stats.js.org JavaScript repos ranked by popularity. #code
- Express The most popular framework for Node. #code
- Next.js Painless universal JavaScript framework built on React + Node. #code
- Lodash Like Underscore, but much faster, and featuring a more expressive API. Check out the Ramda-style fp versions you can import from
lodash/fp
#code - cuid GUIDs are broken - use cuid, instead. #code
- React What do Facebook, Instagram, Netflix and PayPal have in common? React. #code
- RxJS Reactive extensions for JavaScript. What's reactive? #code
- Moment A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates. #code
- https://qa.polyfill.io/v2/docs/ Pollyfill browsers automatically. #code
- UpUp Make sure your site works even when your user is offline. #code
- Immutable.js A library for creating immutable collections. #code
- NodeGoat Identify security vulnerabilities in your Node apps. #code
- lightning.js Async fetch load 3rd party JS & expose a promise API. #code
- Deep Freeze Deep freeze objects. #code
- jQuery Most popular JS lib by a landslide. #code
- Ramda Like Lodash and Underscore, but with all functions automatically curried, and parameters arranged so that the data to be operated on is supplied last. #code
- express-request-language Best implementation I've seen for
Accept-Language
negatiation in Express. #code - accept-language If you don't use express, accept-language is the low-level lib that powers
express-request-language
for language matching & fallback. #code - Globalize i18n / translate your app for many languages and locations (locales). #code
- dotenv Easily manage environment variables #code
- Leaflet Interactive map UIs made easy. #code
- Lusca Secure your Express application. By the Kraken team at PayPal.
- Stampit Create objects from reusable, composable behaviors. Prototypal inheritance with stamps. #code
- Countly Open source mobile & web analytics and marketing platform. #code
- node-jsonwebtoken Easy JSON Web Token auth. #code
- velocity & Velocity Motion Designer (VMD) UI animation library. #code
- is-my-json-valid A fast json-schema validator. #code
- is-express-schema-valid is-my-json-valid as Express middleware for
req.body
req.query
andreq.params
. #code - inquirer.js Great library for building CLI tools. #code
- rimraf
rm -rf
util for nodejs. Great for npm scripts. #code - cross-env Use environment variables with npm scripts cross-platform. #code
- Wemo.io Open Source VR Tools #code
- IoT.js An Internet of Things JavaScript platform.
React
- Introducing React #video
- React blog Official React blog
- JSX Looks Like an Abomination but it's Good for You My take on JSX #article
- React Pure Component Starter Learn React pure components #code
- Baby's First Reaction Build your first working React component #article
- Immutable Data and React by Lee Byron #video
- react-stamp Composable, classless React components made easy #code
- react-engine PayPal's isomorphic React view engine for Express or Kraken #code
- eslint-plugin-react #code
- Redux Predictable state container (store) for JavaScript apps #code
- Redux Devtools DevTools for Redux with hot reloading, timetravel debugging, and customizable UI
- redux-saga A synchronous-style side-effect library for Redux. #code
- MobX Simple, scalable state management with TFRP. #code
- react-native React for mobile devices #code
- Elemental-UI Modular UI component library for React. #code
- velocity-react The excellent Velocity UI animation library for React. #code
- react-art React for SVG or canvas #code
- react-canvas React for canvas #code
- react-three Three.js rendering for React #code
- react.rocks Pinterest-style directory of online demos with available code
- TodoMVC in React #example
- JSX Specification #documentation
GraphQL
- Let's Learn GraphQL #course
- GraphQL at Facebook #talk
- Getting started with GraphQL and Node.js #article
- GraphQL Specification
- GraphQL Reference Implementation #code
- graphql-server A GraphQL server implementation with Mongo / Mongoose #code
Progressive Web Apps (PWAs)
- Native Apps are Doomed Intro to PWAs #article
- Why Native Apps Really Are Doomed Why we need PWAs - packed with stats you need to know if you're building an app. #article
Web Components & Component Based Architecture
- FIRST
- Polyfills
- HTML Imports
- Custom Elements
- Templates
- Shadow DOM
- x-gif This web component wins the internet.
- Vulcanize Don't let web components slow your app down. Bundle your HTML imports.
Benchmarking
- JSlitmus - JSLitmus is a lightweight tool for creating ad-hoc JavaScript benchmark tests.
- Matcha - Matcha allow you to design experiments that will measure the performance of your code. It is recommended that each bench focus on a specific point of impact in your application.
- Timing.js - Timing.js is a small set of helpers for working with the Navigation Timing API to identify where your application is spending its time. Useful as a standalone script, DevTools Snippet or bookmarklet.
- Stats.js - This class provides a simple info box that will help you monitor your code performance.
QA / Deployment / Monitoring / CI
- PM2 Process monitoring / self repair
- Pingdom Response monitoring and alert management (because incidents happen).
- New Relic Deep insights into the performance and health of your production apps
- Sauce Labs Cross platform web application testing with great collaboration and integration support
- Travis CI CI, of course
- Docker Run your CI process using the same OS configs as your production systems.
- Shippable Docker-based hosted build / CI
- Tensō A thin API facade in Node
- Kong API/microservice extension and management layer, centralize auth, cache, logging, rate limiting, etc... plugins in Lua );
Community
- JavaScript Questions Chat
- JavaScript on Google+
- HTML5 on Google+
- Node.js on Google+
- IRC ##JavaScript irc://irc.freenode.net/javascript
- IRC #node.js irc://irc.freenode.net/node.js
- IRC #io.js irc://irc.freenode.net/io.js The Node fork
- IRC #learnjavascript irc://irc.freenode.net/learnjavascript
News
- JavaScript Scene
- JavaScript Weekly
- Node Weekly
- HTML5 Weekly
- ESNext News
- EchoJS
- JavaScript Live
- JavaScript.com News
- Node Module Of The Week
- JavascriptKicks
- 5 Minutes of Javascript
Pasting / sharing code
- Codepen
- RequireBin
- ES6 Fiddle
- CodePicNic Embed interactive full-stack snippets & demos
- JSBin Embed editable code snippets.
- jsFiddle
Contests
- DemoJS The JavaScript demoscene party
- JS1k JavaScript demos in 1k of memory
- JS13k Games JavaScript games in 13k of memory
- FightCode game program virtual battle bots and climb the leaderboard
- Node Knockout The legendary Node competition
Hackable Hardware
Hosting
For kids (and adults who just love to have fun)
- JavaScript for Kids
- Screeps A strategy game you control by writing JavaScript
- CodingGame Programming puzzle games
- Fightcode Program robots to do battle
- LearnToMod Mod Minecraft with JavaScript
- The Young Person's Guide to Programming in Minecraft
- CodeCombat RPG adventure controlled by JavaScript
Essential Twitter (alphabetical order)
- Addy Osmani App architecture expert, Chrome dev tools champion
- Angus Croll Author, "If Hemingway Wrote JavaScript"
- Axel Rauschmayer ES Next evangelist, author
- Brendan Eich Created JavaScript
- David Herman Author, "Effective JavaScript"
- David Nolen Great functional programming content
- EchoJS News and links
- Eric Elliott That's me. O'Reilly author. JavaScript architect. JS Instructor.
- Jafar Husain Great talks on RxJS, ES next, etc...
- James Halliday aka Substack - author of
one millionNode modules you probably use. - James Long CSP, functional programming advocate, Mozilla developer
- JavaScript Daily News and links
- JavaScriptKicks News and links
- Jordan Harband Keeping us ahead of the JS curve
- JS Cheerleader Mover & shaker, JavaScript evangelist, documentary film maker, tech agent & JavaScript community champion
- Marijn Haverbeke Author, "Eloquent JavaScript"
- Nicholas C. Zakas Author, speaker
- Nick Morgan Author, "JavaScript for Kids"
- Nicolas Bevacqua Author "JavaScript Application Design", Speaker, Open-Source Evangelist
- Paul Irish Developer evangelist, Chrome dev tools champion
- Reginald Braithwaite Author, "JavaScript Allongé", speaker, PagerDuty
- YDKJS You Don't Know JS, O'Reilly book series by Kyle Simpson