rads

rPub

A free open-source CMS written in Clojure
March 4, 2025

Today I'm releasing a new project called rPub. While this is a currently an alpha project, I'd be happy to get feedback if you want to try it out. For the upcoming releases I'll be focusing on stability and improving the core features so that it can eventually be used for production sites.

Quick Start

The recommended way to use rPub is with Docker Compose (see the README for alternatives):

mkdir rpub && cd rpub
curl -O https://raw.githubusercontent.com/rpub-clj/rpub/refs/tags/v0.1.0/docker-compose.yaml
docker compose up -d

The runtime files and SQLite database will be stored in the data directory at the current path. Once the server is running, open http://localhost:3000 to get started.

Features

  • Designed to be easy to set up and use with no coding required
    rPub is made to be easy to use with Docker and can be hosted on any cloud provider that supports containers, or even a local server at home. Once rPub is set up, it's possible to manage the server from the admin UI going forward. If you're an advanced user, you can use rPub as a regular Clojure library.
  • Includes an admin UI to manage content and settings
    By default, rPub is pre-configured for a typical blog use case featuring posts and pages. In the future, you will be able to modify this configuration on the Content Types page. There are also Themes and Plugins pages that you can use to add new features to rPub.
  • Supports custom fields to allow for all types of content
    While blogging is a common use case for a CMS, there's potential for much more beyond posts and pages. On the Content Types page it shows the current schemas for your content. In a future release you will be able to add custom fields as well as new types of content.
  • Supports browsing and installing plugins from the admin UI
    The Plugins page currently fetches the list of plugins from the official rPub plugins repository. There are a few plugins already available, such as External Editing, SEO, and the Starter Theme. You currently need to restart the server to fully activate a plugin the first time, though this may change in the future. (Internally, activating a plugin adds it to the server's deps.edn file and loads the required namespaces.)
  • Supports themes and customizing appearance from the admin UI
    The Themes page allows you to select from the themes that you've installed through plugins. By default the Starter Theme is already installed, but you can remove this and replace it with your own theme. While rPub currently requires Clojure code to define themes, in the future I plan to make it possible to create and edit themes from the admin UI (with support for plain HTML).
  • Supports developing plugins and themes interactively using the REPL
    This is where rPub really benefits from being written in Clojure. The REPL is available whenever you need it, whether that's in development or production. You can also use additional dev tools like FlowStorm and Portal.
  • Uses SQLite by default with protocols to support alternative storage backends
    For most users of rPub, SQLite is the right choice because it's easy to use. That said, I didn't want rPub to be hard-coded to one type of storage, so all storage access is abstracted away by Clojure protocols. Since the protocols are already defined, this will help a lot when adding support for Postgres and/or MySQL later on.
  • MIT license allows the code to be modified for both commercial and non-commercial use
    I want there to be as little friction as possible for people who want to use rPub in their project.

About Me

My name is Radford Smith and I'm fortunate enough to work at OneStudyTeam where I get to use Clojure every day to solve real-world problems. I've been using Clojure professionally for eight years now across a few different startups, and I originally learned about Clojure back when 1.0 was released in 2009.

In the last few years I've made some contributions to the Clojure open-source community. My biggest contribution has been bbin, a tool for installing CLI scripts that's part of the Babashka ecosystem. I've also implemented a few features for popular projects including neil and kit-clj.

I hope rPub encourages more people to find joy in building websites with Clojure. Have fun!