March 23, 2025

#A Tour of BeanCMS

BeanCMS is a minimalist content management system. I built it as a personal replacement for the great rwtxt. The motivation to build BeanCMS was:

  1. I wanted to self-host rwtxt, but had some changes I wanted to make to the core application.

  2. I wanted an excuse to build something using redbean.dev and fullmoon while demonstrating that Redbean and Lua are viable options for building web applications

As a result of using redbean, BeanCMS is deployed as a single >7MB file that runs natively on Windows/MacOS/Linux -- all without cross-compilation! Take a look at the repo for installation instructions.

#Getting up and running

In short, download beancms.com from the releases page. On Linux/MacOS, chmod +x beancms.com. Then, on Windows/Linux/MacOS, simply run the file while using the current directory to store persisted data:

./beancms.com -D ./

Right away, you'll notice a data directory created next to your executable. This is where all persisted data for BeanCMS is stored. BeanCMS uses SQLite as supported by Redbean, which means to back up your site data, all you have to do is copy the data folder.

files screenshot

Upon opening the site at localhost:8080, you'll see the welcome page. From here, new users can register, or existing users can log in.

welcome page

#User Page

Upon logging in, users are able to customize their profile pages by modifying their personal title, filling in an intro section, selecting from multiple free/open-source themes, or adding their own custom CSS that will apply to their profile page as well as their writings.

#Writing posts

Posts slugs are generated automatically by parsing the first line of the post content.

Drafts are saved automatically on users' local machines.

BeanCMS supports syntax highlighting for codeblocks.

BeanCMS supports other features you'd want in a blog or note taking app, such as image upload, hotkeys, and table of contents support.

You can grab the raw Markdown of a post by appending /raw to any post url.

Lastly, Atom feeds are enabled for all user blogs by appending /feed to a user's profile url!

#Admin Panel

BeanCMS comes with an included admin panel only accessible to a list of specified IP Addresses. By default, only 127.0.0.1 is allowed to access the admin panel, which provides information such as registered users, active sessions, uploaded images, and storage usage.

admin page

#Try it out!

BeanCMS was intended as a hyper minimal blogging/note-taking app that I can self-host for myself and friends. Thanks to redbean, deployment is fast, tiny, and dead simple. A huge thanks to Redbean and Cosmopolitan Libc maintainers for building such a brilliant tool. And an enormous thanks to Paul Kulchenko for providing clarity and creating Fullmoon, a minimal but batteries-included web framework for Redbean.