React Components Library made with styled-components.
🚨 We are very excited to announce the release of a new component library, Buffet.js.
The purpose of Buffet.js - an all-you-can-eat component library - is to give the community a faster, easier and better way to develop both their private and public plugins and also, to allow us to set up a stronger design system that can be easily updated.
If you want to give it a try, here’s how to.
We design Strapi as a single application where each feature (plugin) is completely independent of one another. They can communicate with each other but the main idea is to keep them all independent.
Since your project’s administration is a “simple” React application that encapsulates smaller ones located in completely different packages, its structure is not monolithic and in order to have a consistent design system, we needed a global package containing all the components needed for the plugins’ interface.
If you followed the development of Strapi, you are aware that we started as a small team (we kinda still are...) and chose to adopt a monorepository structure for the v3. These reusable components were placed in the
strapi-helper-plugin package, a module that was and still is very opaque for the community.
Until the release of Strapi beta, this package was a bit of a mess: it contained the shared
webpack configuration, entry point, components, file generators, eslint and so on... Technically speaking, it caused issues:
This non-exhaustive list of drawbacks leads us to think, it is time to pimp up the
So several months ago, Aurélien Georget asked me to lead the ambitious task of creating a component library called Buffet. The goal of Buffet.js is to address the long-standing issues listed above in terms of community guidance, developer experience, code optimization and maintenance.
An external component library facilitates contributions, but it also makes sure the components are not duplicated in the codebase and makes the development of Strapi plugins easier.
As primary contributors on the Strapi open source project, the core product team is also responsible for creating the best developer experience, no matter the number of contributors to the project. Our end-user must always enjoy using Strapi, and the feedback we received until now shows that ease of use and intuitive admin panel are among the top reasons Strapi is selected as a CMS.
Buffet.js allows the team to provide the community with a visual and functionally consistent set of UI and UX guidelines.
We want Buffet.js to be useful to the Strapi community but also to everyone who may need a UI library of components. We know that a good developer experience will allow better adoption from the community, and increase contribution to improve the project and make it grow.
Particular attention has been given to the following points:
DOM. We focused on providing the best readability by making sure provided components are as close as possible to the underlying DOM structure and as stateless as possible.
Isolation. The components in Buffet.js work in isolation. You can use any Buffet.js component in your codebase without any side effects.
Thanks to Storybook, components can be shown in a definite order or on different pages for a better readability. We also have made the demonstration more interactive with knobs allowing to visualize differents states of a component.
Code quality. Thanks to styled-components, unique class names are generated for the styles, so forget about class name bugs. Only the rendered components style is injected on a page. Combined with code splitting, this means your users load the least amount of code necessary.
Performance. The administration panel build size and time have both been reduced.
Maintenance. The development of the component library will also allow further scalability with seamless maintenance. All plugin developments based on Buffet.js components will be updated by updating Buffet.js itself.
If you're used to the administration panel, you will recognize most of the developed components, although we are a bit proud to introduce our new DatePicker that can be combined with a TimePicker...
Our current DatePicker, and we are completely aware of it, is “a bit outdated and unusable” so we decided to develop a new one using Airbnb’s DatePicker.
For the TimePicker on the other hand... it is another story: we couldn’t find a React one that fit our needs so we undertook the development of a new one mainly inspired by the one you see and use in your Google Calendar... Just check it out
Last but not least, thank you to everyone who’s contributed to Buffet.js. We will keep working hard on delivering the best components to ease community contributions.
Buffet.js is an MIT-licensed open source project. It’s an independent project launched by the Strapi team but anyone wishing to contribute is welcome! Check us out on Github : https://github.com/strapi/buffet