The headless CMS you'll melt over

Easy to use marketing dashboard and blazing fast
content API for your modern apps

Build better with Butter

Content management at any scale

  • Solution 1 image

    Multi-channel & multi-site

     Enterprises and Agencies portfolio management. Brands and client sites all in one place.

  • Solution 1 image

    Marketing site

    Marketing website for your SaaS, Ecommerce, Marketplace. Built in any tech stack.

  • Solution 1 image

    Blog engine

    Say goodbye to WordPress. Branded /blog with built-in SEO. Plugs into your existing website.

Less Code. Any Stack.

  • Any tech stack. Global Content API that integrates into any tech stack

  • Zero maintenance.We handle scaling, security and maintenance

  • Save time. Instant CMS backend. Get back to more important problems

val client = ButterCMS("YOUR_BUTTER_TOKEN"); # Get all blog posts queryParameters = HashMap<String, String>() queryParameters["page"] = "1" client.data.getPosts( queryParameters, callback = object : Callback { override fun success(response: Posts) {} override fun failure(error: RestCallError) {} })
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
from butter_cms import ButterCMS client = ButterCMS('YOUR_BUTTER_TOKEN') # Get blog posts, case study pages, and main menu client.posts.all() client.pages.all('case_studies') client.content_fields.get(['main_menu'])
Butter butter = Butter('YOUR_BUTTER_TOKEN'); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
ButterCMS.SetAuthToken("YOUR_BUTTER_TOKEN") # Get all blog posts, case study pages, and main menu params := map[string]string{ "page": "1", "page_size": "10", } ButterCMS.GetPosts(params) ButterCMS.GetPages([]string{"case_studies"}) ButterCMS.GetContentFields([]string{"main_menu"})
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
ButterCMS.SetAuthToken("YOUR_BUTTER_TOKEN") # Get all blog posts, case study pages, and main menu params := map[string]string{ "page": "1", "page_size": "10", } ButterCMS.GetPosts(params) ButterCMS.GetPages([]string{"case_studies"}) ButterCMS.GetContentFields([]string{"main_menu"})
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
var butter = ButterCMSClient(apiKey: "YOUR_BUTTER_TOKEN") # Get all blog posts butter.getPosts(parameters: [ .preview, .excludeBody, .page(value: 1), .pageSize(value: 10) ]) { result in switch result { case .success(let posts): print(Count: \(posts.meta.count)") posts.data.compactMap() { print("Post: \($0.title)") } case .failure(let error): print("getPost failed with Error: \(error)") } }
import com.buttercms.IButterCMSClient; import com.buttercms.ButterCMSClient; import java.util.Collections; IButterCMSClient client = new ButterCMSClient("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu PostsResponse response = client.getPosts( Collections.emptyMap()); PagesResponse response = client.getPages( "case_studies", Collections.emptyMap(), CaseStudyPage.class); CollectionResponse response = client.getCollection( "main_menu", Collections.emptyMap(), MainMenu.class);
val client = ButterCMS("YOUR_BUTTER_TOKEN"); # Get all blog posts queryParameters = HashMap<String, String>() queryParameters["page"] = "1" client.data.getPosts( queryParameters, callback = object : Callback { override fun success(response: Posts) {} override fun failure(error: RestCallError) {} })
use ButterCMS\ButterCMS; $butter = new ButterCMS('YOUR_BUTTER_TOKEN'); # Get blog posts, case study pages, and main menu $butter->fetchPosts(); $butter->fetchPages('case_studies'); $butter->fetchContentFields(['main_menu'])
using ButterCMS; var client =     new ButterCMSClient("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu client.ListPosts(); client.ListPages<CaseStudiesPage> ('case_studies') client.RetrieveContentFields<NewsPage>     ('main_menu')
var butter = require('buttercms')('YOUR_BUTTER_TOKEN'); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
use ButterCMS\ButterCMS; $butter = new ButterCMS('YOUR_BUTTER_TOKEN'); # Get blog posts, case study pages, and main menu $butter->fetchPosts(); $butter->fetchPages('case_studies'); $butter->fetchContentFields(['main_menu'])
from butter_cms import ButterCMS client = ButterCMS('YOUR_BUTTER_TOKEN') # Get blog posts, case study pages, and main menu client.posts.all() client.pages.all('case_studies') client.content_fields.get(['main_menu'])
require 'buttercms-ruby' ButterCMS::api_token = "YOUR_BUTTER_TOKEN" # Get blog posts, case study pages, and main menu ButterCMS::Post.list() ButterCMS::Page.list('case_studies') ButterCMS::Content.list(['main_menu'])
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
require 'buttercms-ruby' ButterCMS::api_token = "YOUR_BUTTER_TOKEN" # Get blog posts, case study pages, and main menu ButterCMS::Post.list() ButterCMS::Page.list('case_studies') ButterCMS::Content.list(['main_menu'])
var butter = ButterCMSClient(apiKey: "YOUR_BUTTER_TOKEN") # Get all blog posts butter.getPosts(parameters: [ .preview, .excludeBody, .page(value: 1), .pageSize(value: 10) ]) { result in switch result { case .success(let posts): print(Count: \(posts.meta.count)") posts.data.compactMap() { print("Post: \($0.title)") } case .failure(let error): print("getPost failed with Error: \(error)") } }
import Butter from 'buttercms'; const butter = Butter("YOUR_BUTTER_TOKEN"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);

Freedom and Flexibility.

  • Free Yourself. Stop fighting for IT resources. Get content live instantly

  • Centralized. Centralized dashboard to manage all of your content

  • Flexibility. Launch multi-channel content experiences faster

Goodbye CMS Headaches.

  • Secure. We're SaaS. Say goodbye to stressing over security patches

  • Scalable. Global CDNs provide maximum performance and availability

  • Professional Support. Success team for the support you need to succeed.

The highest-rated headless CMS on G2.

Find out why we take top marks across the board, every quarter.

Experience Butter now.
30 day free trial. You'll be set up in less.