Butter CMS

Butter CMS Review and Features

Written by Bruno Aderaldo

Last update: 6/11/2024

What is ButterCMS?

API-based CMS and blogging engine for rapidly building websites in any programming language. Great for blogs, dynamic pages, and more. Understanding the pain points of WordPress all too well is what sparked Jake Lumetta, the founder and CEO, to develop ButterCMS.

User interface

Butter has a comfortable, clean, and intuitive interface. All menu options are accessible in the sidebar on the left side, which includes dashboard, blog posts, pages, collections, media library, users, and useful links like their knowledge base and docs.


Let’s take a look at the dashboard page of a new account. Besides a couple of nice tour videos to understand the concept and core solutions, you’ll have access to a quick video comparing the ButterCMS with a traditional CMS like WordPress as well.

More below you will find a couple of interesting articles from their knowledge base showing how to do or understand specific topics and invite users.


This menu is used for creating your page types and pages (based on a page type). Page Types allow you to quickly launch a new marketing site or add pages to your existing site.

You can compose flexible page layouts and easily reorder them with ButterCMS’ Components. Instantly. Without developers or IT department.

As a marketer, you will have the freedom and flexibility you need to compose compelling, unique content experiences with Pages built using Components. Your team can define a library of reusable, custom Components that you can use to create limitless kinds of experiences.

These are the options you have to create templates. Pages are a very flexible content type that allows you to create any custom combination of content fields. You can build a Page Type that can be used over and over again by the content editing team to create new content.

After saving your page type, you can fill in all your page data and schedule or publish it!

[@portabletext/react] Unknown block type "newPdfPage", specify a component for it in the `components.types` prop

Blog Engine

Remember about the blog engine I mentioned before? This is how it looks like. A list of all your blog posts and cool options to filter them, export all posts (.csv), and obviously, create a new one!

Blog Posts are pre-configured pages with predefined fields that enable you to quickly connect a blog to your site with built-in, optimized SEO.

Here is a test post that comes when you create your account, it is very interesting as it helps you understand what you can do, the types of content you can insert.

Butter's WYSIWYG editor supports standard text formatting including headings, links, quotes, code, text alignment, and more. You can upload, crop, and resize images that are automatically hosted and delivered through a CDN. You can also edit HTML directly when needed.

Here is where you can do your SEO stuff:

Here is the space where you can optimize for SEO:

Finally, you can schedule posts.

Butter handles your SEO

The blog engine also comes with two additional tabs that will help you with your SEO efforts. The first tab is for you to cover the metadata fields, and the second one is to cover the essential SEO Tags (that your page can't live without).


Collections are tables of data to be referenced by Pages, extending the use cases that you can achieve with ButterCMS. Collections can also be queried from the API directly. You will be able to store data on the Collections and then reuse it on any page you want.

Let’s suppose you have a list of testimonials that you want to show on different pages. You can use collections for that.

Media Library

A key way to make your blog posts and articles engaging is to break up the content with images and videos. Adding media files to your posts is super easy.

ButterCMS comes with a robust and reliable Media Library that helps you to store and distribute all your media content. You don’t have to have your own image hosting or configuring a complex CDN. Their media library supports all file types and provides a fast and efficient experience for your content editors and your end-users.

Another cool feature inside of the media library is that they have an image editor, so you can transform your images with a beautiful, modern interface. Crop, resize, apply filters, and more. Over time the number of files can grow a lot, so you can organize your media with tags.


Invite your team members, developers, marketers, or editors to work with you.

You also can set roles and permissions for them. Right now ButterCMS has three roles: Admin, Publisher, and Author. But you can chat with them to discuss Enterprise options if you need a custom role.


Butter was built from the ground up with developers in mind to make integration as fast as possible.

There is a Content API that you can use to retrieve, edit, search, filter, sort and paginate your content.

But if you need more power there is a Write API which you should use to update your eCommerce product listing, marketplace data, collect form data, or build an FAQ database by writing any data your app needs into Butter.

Add CMS capability to your app in minutes, there are many options to integrate with Butter, actually, they say you can integrate with any tack stack. If you are looking for some starters I’d suggest you can take a look at starters using Gatsby.js and Next.js.


They really care about explaining everything or at least give you a small review about the feature you might be interested in.

You can watch the full tour or visit their Knowledge Base to review Content Modeling best practices and find answers to your FAQs. But if you really need help, you can contact support using the chatbot on their website and on your dashboard.

Priority support starts with their Small Busines plan and with Enterprise you’ll get access to the dedicated Slack channel as well.

ButterCMS Pricing

[@portabletext/react] Unknown block type "newPdfPage", specify a component for it in the `components.types` prop

ButterCMS Pros and Cons

[@portabletext/react] Unknown block type "prosCons", specify a component for it in the `components.types` prop