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 built 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 command to scaffold. One binary to deploy. One SQLite database to back it. No Docker containers to wrestle with, no plugin ecosystems to navigate, no build pipelines that take longer than writing the actual post.

PubEngine is a Go framework built with Echo, templ, 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 model fits in one sentence: pubengine handles handlers, middleware, database, caching, and analytics you own the templates.

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
  • Single binary HTMX and analytics scripts are embedded, no CDN required

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.

Scaffold and go: Run pubengine new myblog and you get a complete project with templates, Tailwind, Makefile, and an "it works!" landing page. Three commands later, your blog is live.

You own the templates: Every page is a templ component you control. Want to redesign the home page? Edit views/home.templ. PubEngine calls your components through the ViewFuncs struct, so you have full creative control without touching framework code.

Environment driven configuration: Set a few SITE_* environment variables and your entire site's branding nav, footer, RSS, sitemap, JSON-LD, OpenGraph tags updates automatically.

Admin that stays out of your way: Log in, write, publish. Draft support means you can iterate without pressure. Builtin privacy first analytics means you know what's being read without selling your readers' data.

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

bash
go install github.com/eringen/pubengine/cmd/pubengine@latest
pubengine new myblog
cd myblog
npm install
make run

That's it. Your blog is running on localhost:3000 with an "it works!" welcome page ready to go.

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