Launch CMS-powered websites faster and have fun doing it

ButterCMS makes developers happy and clients hug you

Butter slides right into our apps and lets us avoid having yet another WordPress site.

Daniel, Founder of Collective Idea

All the features you need

  • ButterCMS Feature Image Custom content types
  • ButterCMS Feature Image Media library
  • ButterCMS Feature Image CDN for assets
  • ButterCMS Feature Image WYSIWYG editor
  • ButterCMS Feature Image Testing environment
  • ButterCMS Feature Image Preview changes
  • ButterCMS Feature Image Localization
  • ButterCMS Feature Image Webhooks

Butter saves you development time

Save thousands of dollars worth of development time with our easy setup.

Integrating Butter into our Ruby application took less than an hour and most of that time was spent on design work.

Luke Brean, Legally

Butter requires zero maintenance

Never worry about security upgrades, hosting, or performance.

Just wanted to let you know that Butter is awesome. 5 minutes to set it up and write a sample blog post, that was it.

Jeff Judge, Bright

Butter works with every tech stack

Ship projects faster using your preferred language/framework.

I've tried other API-based CMS’s. I liked their programs, but I got yours up and running the fastest.

Beau O'Hara, Anstar Products

Setup in minutes

require 'buttercms-ruby'
ButterCMS::api_token = "api_token_BQokikJOvBiI2HlWgH4olfQ2"

# Get homepage content
homepage_content = ButterCMS::Content.fetch([
  :homepage_title,
  :homepage_headline
])

# Get landing pages
landing_pages = ButterCMS::Content.fetch([:landing_pages])
var butter = require('buttercms')('api_token_BQokikJOvBiI2HlWgH4olfQ2');

// Get homepage content
butter.content.retrieve(["homepage_title", "homepage_headline"]).then(function(response) {
  console.log(response)
});

// Get landing pages
butter.content.retrieve(["landing_pages"]).then(function(response) {
  console.log(response)
});
var butter = require('buttercms')('api_token_BQokikJOvBiI2HlWgH4olfQ2');

// Get homepage content
butter.content.retrieve(["homepage_title", "homepage_headline"]).then(function(response) {
  console.log(response)
});

// Get landing pages
butter.content.retrieve(["landing_pages"]).then(function(response) {
  console.log(response)
});
from butter_cms import ButterCMS
client = ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2')

def home(request):
 content = client.content_fields.get([
  'homepage_headline',
  'homepage_title'
 ])

 return render(request, 'home.html', {'content': content})

def landing_page(request, slug):
  key = 'landing_pages[slug=%s]' % slug
  resp = client.content_fields.get([key])
  pages = resp['data']['landing_pages']
    
  # If no page was found, it doesn't exist.
  if len(landing_pages) == 0:
    raise Http404
  else:
    page = pages[0]
  
  return render(request, 'landing_pages/blog.html', {'page': page})
from butter_cms import ButterCMS
client = ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2')

# Get hompage content
client.content_fields.get(['homepage_headline', 'homepage_title'])

# Get landing pages
client.content_fields.get(['landing_pages'])
class PagesController < ApplicationController
  def home
    @homepage_content = ButterCMS::Content.fetch([
      :homepage_title,
      :homepage_headline
    ])
  end

  def landing_page
    landing_pages = ButterCMS::Content.
      fetch(["landing_pages[slug=#{params[:slug]}]"])

    @page = landing_pages.first
  end
end
use ButterCMS\ButterCMS;
$butterCms = new ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2');

# Get hompage content
$butterCms->fetchContentFields(['homepage_title', 'homepage_headline']);

# Get landing pages
$butterCms->fetchContentFields(['landing_pages']);
use ButterCMS\ButterCMS;
$butterCms = new ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2');

# Get hompage content
$butterCms->fetchContentFields(['homepage_title', 'homepage_headline']);

# Get landing pages
$butterCms->fetchContentFields(['landing_pages']);
using ButterCMS;

var client = new ButterCMSClient("api_token_BQokikJOvBiI2HlWgH4olfQ2");

# Get homepage content
var keys = new string[2] { "homepage_title", "homepage_headline" };
var contentFields = await butterClient.RetrieveContentFieldsJSONAsync(keys);

# Get landing pages
var keys = new string[1] { "landing_pages" };
var contentFields = await butterClient.RetrieveContentFieldsJSONAsync(keys);
package main

import (
    "github.com/buttercms/buttercms-go"
)

func main() {
    ButterCMS.SetAuthToken("api_token_BQokikJOvBiI2HlWgH4olfQ2")

    // Get homepage content
    ButterCMS.GetContentFields([]string{"homepage_headline", "homepage_title"})

    // Get landing pages
    ButterCMS.GetContentFields([]string{"landing_pages"})
}

Beautiful admin interface

Easy to use for clients, easy to customize by developers.

Try Butter free for 30-days

Get started now

Get started now

Sign up with Google Sign up with Github
or