🎼 Compo·sing Web Compo·nents is a new Web UI library based on pure Web Components providing a modern using function composition to easily define and enrich them. compo JavaScript API Yes! It’s yet another new JavaScript Web UI library! Sorry for the “JavaScript fatigue” people still I thought there was some good ideas in this project and it deserved to be at least published. Inspiration It’s inspired by many populars library such , , or , applying the modern concepts and API to the Custom Element standard. React Redux Recompose styled-components The concept introduced by some time ago has been used to free the user to manage DOM transitions. The concept can be applied to standard Web Component world, each component diffs its template evaluation to the own Shadow DOM. Virtual Dom React introduced a full function composition API allowing to enhance a component feature by feature as needed. Once again it could perfectly match Custom Elements by extending the definition class with the features needed. Recompose Finally, using CSS in JS with for a while pushes to consider CSS as an integrant part of a UI library and treat it the same way as the markup. Shadow DOM CSS scoping does perfectly the job. styled-components API What I regret in all the previous inspirations was the complexity of using a lot of different libraries to finally get a strange monster full of good ideas but with complex non homogeneous APIs. So is a fully featured library presenting a single coherent API to manage all aspects of a component: state management, markup, style. compo As said in the title, the chosen interface is function composition. You define a component with the function, first parameter for the name, all others for enhancing functions like , or . component withStore withMarkup withStyle Standards The whole process was driven by minimalism for both simplicity and bundle weight. What’s best for minimalism than taking as much as you can from your browser directly? The point of is to present a powerful API by doing the less possible using as much as possible the standards. As such, it’s heavily built upon Custom Elements, Shadow DOM, ES2015 template strings. Even the Virtual DOM parser is in reality the native browser DOM parser. compo Also, one of the guidelines was to use the power of new browsers. Not to ignore Web history or compatibility but to imagine what could be modern APIs without limitations. For example, is not (at all) transpiled. It’s written and published in modern ES2017. In fact, it works already in the vast majority of browsers and everyone can transpile it in its application if needed. compo Ambitions is not yet, production ready. To be honest, it only really works on Chrome out of the box and Firefox with a flag. There is a compatibility example using Web Component polyfills to use it on every browsers. compo In terms of performances, concepts should not be blocking but at this point don’t try aggressive benchmarks compared to an industry framework, it could not end up well. Still it’s powerful enough to build “standard size” application without have real issues. To be perfectly honest, is also some kind of child dream. “I published my own JavaScript library 😃”. We’ll see how far it goes but I do think there is some good stuff in the library. If it only influence a bit the community, it will already be a huge success. compo