Blogging platform built for developers

Launch a custom /blog 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
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('hellow-rold')

# 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;
$butterCms = new ButterCMS('api_token_BQokikJOvBiI2HlWgH4olfQ2');

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

# Get single post by slug
$butterCms->getPost('hello-world');

# Get RSS feed xml
$feed = $butterCms->getFeed('rss');
var client = new RestClient("https://api.buttercms.com/v2");

var request = new RestRequest("posts/hello-world", Method.GET);

// execute the request
IRestResponse response = client.Execute(request);
var post = response.Content;
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")
}

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

Simple REST API

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.

Maintenance-free

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!