As a team of software engineers, we spend quite a bit of time prowling emerging libraries on Github. If you’re not already aware, a good way of keeping up with popular libraries is to follow this. We’re going to share our favorite JS libraries on Github currently.
React
React isn’t new to the scene by any means after being open-sourced in 2015 but it has come a long way in the three years it’s been released. React was a pioneer in a new method of creating web interfaces that focuses on declaratively defining components. This allows React projects to have richer and more dynamic interfaces while still being easy to write and maintain. React is developed by Facebook and has been adopted across much of the Facebook and Instagram ecosystem. You can check out which Fortune 500 companies and up-and-coming startups are using React here. React also has a native implementation called React Native.
“With React Native, you don't build a "mobile web app", an "HTML5 app", or a "hybrid app". You build a real mobile app that's indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps.”
So far, we’ve built multiple websites with React and four apps with React Native and have really enjoyed working with both. There are some caveats to it that we may expand on in another post but React and React Native still allows our development team to push out projects faster.
Redux
Redux allows for an easy way to store data and events and is essentially a unidirectional data-flow architecture for applications. The typical use case for Redux is to be used as a complimentary library to React that helps data be synchronized across an application, but can be used in conjunction with any other view library.
“My goal was to create a state management library with minimal API but completely predictable behavior, so it is possible to implement logging, hot reloading, time travel, universal apps, record and replay, without any buy-in from the developer.”
Redux has become essential in our workflow for moderately sized projects but deciding if Redux is needed at the beginning of a project should be considered. This article can help with that decision.
Immutable JS
Immutable JS allows you to treat JavaScript objects as immutable essentially meaning once an object has been created, its state can no longer be modified. This methodology of data is one of the fundamental principles behind React. However, what is the benefit of using Immutable.js over treating normal JavaScript objects as immutable?
It boils down to the runtime. Using Immutable.js can be exponentially faster and the reason is, JavaScript objects are mutable by default. When trying to treat objects as immutable, JavaScript has to compare every single property one at a time in order for the two objects to be separated.
Flowtype
Flowtype is a static type checker. To rephrase that, Flowtype will give real-time feedback as you code to identify bugs and can help with scalability when dealing with other developers in the same environment.
“The overall mission of Flow is to deliver an immersive coding experience for JavaScript developers—a fast edit-refresh cycle—even as the codebase evolves and grows.”
This helps our team to catch potential bugs in code before the code is ever run allowing us to ship fewer bugs to production.
Angular 2+
Angular 2 is a component-based framework that rivals the ever popular React. While rather opinionated out of the box, Angular 2 can help eliminate some decisions for hesitant JavaScript developers and ensure consistency. The comprehensive framework also relies on one core team for future updates meaning a single source of truth while React relies heavily on many open-sourced libraries that can require more work to keep up to date. Angular initially had a performance disadvantage compared to React, but more recent releases have closed this gap.
React has been our team’s preferred environment for the last few projects, but Angular 2 is still a strong alternative framework for projects requiring an easier out-of-box experience.