You've got better things to do than building another blog

Just drop-in Butter and get back to more interesting problems

Butter's Blog API slides right into our apps and helps avoid having yet another WordPress site.

Daniel, Founder of Collective Idea

All your requirements, solved

  • ButterCMS Feature Image Use main domain (for SEO)
  • ButterCMS Feature Image Friendly admin interface
  • ButterCMS Feature Image Upload images and media
  • ButterCMS Feature Image Edit slugs and meta tags
  • ButterCMS Feature Image Tag and categorize posts
  • ButterCMS Feature Image RSS/Atom Feeds
  • ButterCMS Feature Image Search
  • ButterCMS Feature Image Webhooks
  • ButterCMS Feature Image Multi-site support

Butter saves you development time

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

After several attempts at implementing a blog engine into my app, I found Butter. It’s the best!

Maggie Summers, Sasquatch

Butter gives you great SEO

Host your blog on your main domain and customize slugs and meta tags.

Butter gave us an easy-to-use interface for our writers and enabled the blog to be hosted on our main domain.

Max Blanshard, TutorMapper

Butter integrates with any tech stack

Our blog engine has a simple API and drop-in client libraries.

Butter made it extremely easy for us to build a new blog within our already-made website.

Johnnie Sanchez, Adelyte

Concierge blog migration

Let us know if you're migrating your blog, we'll handle it for you.

Setup in minutes

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
butter.post.list({page_size: 10, page: 1}).then(function(resp) {
  console.log(resp.data)
})

// Get single post by slug
butter.post.retrieve('hello-world').then(function(resp) {
  console.log(resp.data)
})

// Get RSS feed xml
butter.feed.retrieve('rss').then(function(resp) {
  console.log(resp.data)
})
var butter = require('buttercms')('api_token_BQokikJOvBiI2HlWgH4olfQ2');

// Get first 10 posts
butter.post.list({page_size: 10, page: 1}).then(function(resp) {
  console.log(resp.data)
})

// Get single post by slug
butter.post.retrieve('hello-world').then(function(resp) {
  console.log(resp.data)
})

// Get RSS feed xml
butter.feed.retrieve('rss').then(function(resp) {
  console.log(resp.data)
})
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)
  end

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

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

# Get single post by slug
$butter->fetchPost('hello-world');

# Get RSS feed xml
$feed = $butter->fetchFeed('rss');
use ButterCMS\ButterCMS;
$butter = new ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2');

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

# Get single post by slug
$butter->fetchPost('hello-world');

# Get RSS feed xml
$feed = $butter->fetchFeed('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 (
    "github.com/buttercms/buttercms-go"
)

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

    // Get first page of posts
    ButterCMS.GetPosts()

    // Get single post by slug
    ButterCMS.GetPost("hello-world")

    // Get RSS feed xml
    ButterCMS.GetFeed("rss")
}

Powerful admin interface

Try Butter free for 14 days

Get started now

Get started now

Sign up with Google Sign up with Github
or