Introducing Flexomatic

I’m really excited to announce my first open source library, flexomatic, a flexbox-based grid system for React built with styled-components. It follows the methodology proposed by Philip Walton’s Solved By Flexbox grid system. Version 1.0.0 has been officially released on npm.

UPDATE: As of writing this Version 1.1.0 has been released along with a shiny documentation site!

Backstory#

I had been working on a small side-project when I ran into a situation where I wanted to have a grid system. I mulled over a few existing implementations before deciding to roll my own. There were two main reasons for this:

I have never truly open sourced anything#

This was the main reason. I want to experience what building and maintaining an open source library is like for some time. I know I will attain a great deal of knowledge from doing so. Plus, it’s an interesting project that could benefit others.

I haven’t seen the Solved By Flexbox grid system in React#

There are a few really awesome grid systems for React out in the wild. Just peruse the grid systems section of the awesome styled-components GitHub repo and you’ll see what I mean. I could have easily reached for any of these solutions and I would have saved a lot of time on my initial side project.

But I really enjoyed the implementation Philip Walton proposed. It’s minimal and it doesn’t weigh the user down with a bevy of options. I like minimal. For my use case it works, and I think it fits in well as a solution for anyone who just wants a basic grid.

“Grid systems usually come with a myriad of sizing options, but the vast majority of the time you just want two or three elements side-by-side.” - Philip Walton

The quote above perfectly describes what flexomatic aims to achieve. Not too much. Not too little. Just right.

Getting started#

$ yarn add flexomatic

# or

$ npm install flexomatic

Note: flexomatic has a peerDependency on styled-components. In order to use it you must have styled-components already installed in your project.

Features#

flexomatic exposes two components, a Grid and a Cell.

import React from 'react'
import { Grid, Cell } from 'flexomatic'

const App = () => (
  <Grid>
    <Cell>1</Cell>
    <Cell>2</Cell>
    <Cell>3</Cell>
  </Grid>
)

Staying true to the Solved By Flexbox implementation:

  • Cell components default to the same width, but can be adjusted individually
  • You are able to adjust the alignment of Cell components as a group or individually
  • Responsive, mobile-first with media query support
  • Grid components are nest-able

Looking ahead#

I will continue to improve upon flexomatic and hopefully be able to learn more about open source through my efforts.

You can check out the docs for examples and usage. Built with NextJS!

If you have any questions feel free to reach out on Twitter or file an issue on GitHub. Contributions are always welcome!