CMS and blogging engine built for developers

Integrate ButterCMS in minutes using our content API and your preferred tech stack.

Try it for free

Some of our customers:

Adelyte Earth Class Mail Home Squad Purchasing Platform

Setup in minutes

Get up and running in minutes with your programming language of choice.

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

# Get first 10 posts
p ButterCMS::Post.all(page: 1, page_size: 10)

# Get single post by slug
p ButterCMS::Post.find("hello-world")

# Get RSS feed xml
p ButterCMS::Feed.find(:rss)
var butter = require('buttercms')('api_token_BQokikJOvBiI2HlWgH4olfQ2');

// Get first 10 posts{page_size: 10, page: 1}).then(function(resp) {

// Get single post by slug'hello-world').then(function(resp) {

// Get RSS feed xml
butter.feed.retrieve('rss').then(function(resp) {
from butter_cms import ButterCMS
client = ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2')

def index(request):
 posts = client.posts.all(page=1, page_size=10)
 return render(request, 'blog/home.html', {'posts': posts})

def post(request, slug):
 post = client.posts.get(slug)
 return render(request, 'blog/post.html', {'post': post})
from butter_cms import ButterCMS
client = ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2')

# Get first 10 posts
print posts = client.posts.all(page=1, page_size=10)

# Get single post by slug
print post = client.posts.get('hello-world')

# Get RSS feed xml
print client.feeds.get('rss')
class Buttercms::PostsController < Buttercms::BaseController
  def index
    @posts = ButterCMS::Post.all(:page => params[:page], :page_size => 10)

  def show
    @post = ButterCMS::Post.find(params[:slug])
use ButterCMS\ButterCMS;
$butterCms = new ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2');

# Get first page of posts
$butterCms->getPosts(['page' => 1]);

# Get single post by slug

# Get RSS feed xml
$feed = $butterCms->getFeed('rss');
using ButterCMS;

var client = new ButterCMSClient("api_token_BQokikJOvBiI2HlWgH4olfQ2");

# Get first 10 posts
PostsResponse posts = client.ListPosts(page:1, pageSize: 10);

# Get single post by slug
PostResponse post = client.RetrievePost("hello-world");

# Get RSS feed xml
XmlDocument rssFeed = butterClient.GetRSSFeed();
package main

import (

func main() {

    // Get first page of posts

    // Get single post by slug

    // Get RSS feed xml

Just wanted to let you know that Butter is awesome. 5 minutes to set it up and write a sample blog post. No messing around with WP templates or PHP. Exactly what I was looking for!

Jeff Judge, Founder of Bright

Beautiful admin interface

Butter comes with a hosted web interface that your content editors will love.

Try Butter free for 30-days

Get started now

SEO optimized

Your blog lives on your main domain and authors can control meta tags, slugs, and html titles.

A CMS... without the bad parts

See how Butter compares to a traditional CMS


Traditional CMS's are tangled webs of templates and database calls. With Butter your content is accessible via an API so you can bring your content anywhere and display it as you like.

Cleanly decoupled

Traditional CMS's are tightly coupled to your codebase and create unwanted interdependencies. Butter is cleanly separated through its API so you can focus only on content.

Technology agnostic

Traditional CMS's lock you into using a specific technology and are difficult to migrate off of. Butter integrates into any codebase so you are always free to choose your tech stack.


Traditional CMS's require you to host and maintain them. With Butter your content is stored on our secure servers and we take care of all the maintenance.

Create a free account

You're seconds away from launching your blog!