Note: This project is fairly new. Not much code yet but there will be soon!

The Problem

As I've started working with more and more applications I've noticed an issue that most of them have - base components. The first thing that folks have to build are the base components, and if they are not done properly there are lasting consequences. The costs here typically come to light after it's too late to course correct.

There are many base component library solutions out there already - why invest in a new one?

Current solutions

There are a few different configurations of base component libraries on the market right now.

Application level libraries

Vuetify is a great example of this type of this type of library. This kind of library takes over the entire application and requires you to develop in "their way". I've found these libraries are fantastic for when you want to create a very simple CRUD application that doesn't require much "extra" stuff. If you need a table and a modal, these are the way to go. One of the issues with these is also one of their strengths. They take over the entire application. Once you start trying to do more complex things that eject from the standard pattern they define, typically they start getting in the way.

CSS-only solutions

Bulma is a great example of this type of library. These are great to get a couple stylesheets in there so you can control the api interface of the base component. This is a double-edged sword - an api interface that is too tight will cause consumers to not be able to implement all functionality they need. Too loose and it starts driving styles into consumers.

Unstyled component libraries

Radix is a great example here. This is the closest I've seen to an ideal solution. Fantastic abstraction over a hardened api interface that you can then style yourself.

The Solution

Unstyled components seem to be the closest solution here. What happens if I don't need the entire interface at the moment, but I might in the future? That is the idea behind Monarch. Monarch will be a CLI tool which will build a set of components for you based on input configurations, allowing an opinionated set of options for you to choose from but still allowing customization of the component library from both an API and style perspective. The goal is to have a full component library built out and ready to build against in less than 5 minutes. This component library will not tie you into the issues that framework based libraries do when scaling.