Introducing Ponzu: a CMS and Server Framework in Go

Here’s a scenario: you’ve been tasked with the creation of a modern app or website for a client or your company. You know you’ll need a dashboard for administrators to add content, manage links and otherwise fairly simple data, and a front-end that turns that data into a brilliant, usable design. You may naturally turn to WordPress for its famous CMS, but you don’t really want to set up all those custom fields for content types other than Post or Page, plus you’re going to need some JSON data for the React/Angular/Vue JS front-end. Considering Ruby on Rails is an option, but the available CMS’s aren’t the easiest to use, and deploying one can be even harder. What should you do?

Enter: Ponzu

For those very reasons, I decided I needed a new tool – something that was built for today’s developer. Easy to use, JSON friendly, and with a fast and concurrent API server. I wanted to pick the parts of other platforms that I liked: take a great CMS backend from WordPress, a developer-first CLI to generate code for me from Rails, and a blazing fast JSON API from Netty. So, after months of hard work and a several great contributions from the Go community, Ponzu is here and ready to serve your needs.

On top of all that, Ponzu will fetch and manage TLS/SSL certificates for you (for free!) just by running it in “HTTPS mode” — only a single command away. It has built-in full text search, also accessible through a JSON API, plus the ability to leverage cutting-edge HTTP/2 features like Server Push.

Ponzu is written in Go (“Golang”), and provides several helpful interfaces which are used to extend the functionality of each content type in your CMS application. For example, care for a website form to create a new Project Request? Add the `Create` method to your `ProjectRequest` type, which implements the “Createable” interface and now you can handle POST submissions without needing to wire up your own HTTP handlers or routes. Very little Go code is needed to get started – practically none at all. However, it is a goal of mine with Ponzu to get more people to write in Go — once you try it out, you won’t want to write anything else 😉

When you have Go and Ponzu installed, you can generate a new project then run:

Which will automatically set up the database, build the HTML form views (including many different form input types: dropdowns, checkboxes, rich text editors and more), into something that ends up looking like this:

ponzu cms screeenshot

No need for any plug-ins, or to manually click around a form-builder to create a custom type. You didn’t even need to write any code! There’s so much more to the CLI, which you can find here: https://docs.ponzu-cms.org/CLI/General-Usage/

This full video walk-through will go much further into detail about how to use Ponzu to generate more types, create relationships via references in your types, and how to turn your CMS into a full app server with API access to read, create, update and delete content from external clients:

I am excited about the reaction Ponzu has received from the Open Source developer community so far and hope to see what ideas people build with it, and other features people contribute to Ponzu! It is released under the BSD-3 license, which makes it free and available for all uses.

If you would like to reach out with questions or comments, please join us on Slack in the #ponzu channel, or by tweeting to @ponzu_cms – happy to help and hear feedback about the project.

About the Guest author:

Steve Manuel
Hi, I’m Steve Manuel, creator and maintainer of Ponzu. You can follow me on Twitter or Github.

Authors note: I’m thankful to Sameer for letting me make a guest post and share some thoughts with you about this project!

go