Blog 2026-02-05

Building PubEngine: A Blog Engine That Actually Respects Your Time

PubEngine is a minimal blog engine built with Go, HTMX, and SQLite that prioritizes three things: simplicity, performance, and ease of use. It's a single binary with no Javascript frameworks to maintain, just write and publish.

I cobbled together PubEngine because I was tired of choosing between bloated CMS platforms and static site generators that require a PhD in configuration. I wanted something fast, simple, and actually enjoyable to use. So I made it and now it runs this very site at eringen.com.

The Philosophy: Three Core Goals

1. Simplicity Above All

One binary. One SQLite database. No Docker containers to wrestle with, no plugin ecosystems to navigate, no build pipelines that take longer than writing the actual post.

PubEngine is built with Go, HTMX, and SQLite technologies that are boring in the best possible way. They work today, they'll work tomorrow, and you won't spend weekends debugging dependency hell.

The entire architecture fits in a single mental model:

  • `main.go` handles routing and HTTP
  • `store.go` manages your data
  • `views/` contains your templates
  • That's it.

2. Performance That Shows

Modern web development often forgets that users care about speed more than your fancy tech stack. PubEngine is obsessively optimised for performance:

  • No Javascript frameworks Just HTMX for interactions, keeping bundle sizes tiny
  • In memory caching Posts are cached with TTL, so repeat visits are instant
  • Minimal CSS Tailwind generates only what you use
  • SQLite Zero network overhead, zero connection pooling complexity

The result? Near perfect Lighthouse scores out of the box. No optimization sprints required. Above all, no spinners required. Your blog loads fast because there's simply not much to load.

3. Ease of Use for Humans

Writing should feel like writing, not like configuring a server.

Environment driven configuration: Set four `SITE_*` environment variables and your entire site's branding nav, footer, RSS, sitemap, JSON-LD, OpenGraph tags updates automatically. No theme files to edit, no database migrations to run.

Markdown with superpowers: The custom renderer handles standard markdown plus small hack features like `^` suffixes for external links and inline image styling.

Admin that stays out of your way: Log in, write, publish. Draft support means you can iterate without pressure.

Real World?

eringen.com runs on PubEngine right now, and I spend my time writing, not tweaking webpack configs or wondering why my Node version broke the build.

Who This Is For

  • Developers who want a blog that just works
  • People tired of static site generators that require 420 npm packages after 69 tries
  • Anyone who believes that "simple" shouldn't mean feature poor
  • Those who care about web performance but don't want to obsess over it

Get Started in 30 Seconds

git clone https://github.com/eringen/pubengine.git
cd pubengine
make run

That's it. Your blog is running on localhost:3000.

Check out the source on GitHub or see it live at HERE!

More posts

Keep reading

All posts

No related posts yet.