Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A deprecated Ring middleware to serve concatenated static files with cache buster URLs in production.
Clojure JavaScript CSS
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Catenate is deprecated in favor of optimus.


I had planned on catenate being a small library in a series of libraries for frontend optimization. Catenate was the one that concatenated your static assets into bundles.

Turns out that a lot of those optimizations you want to do on the frontend are tangled together. I was not able to do those improvements I wanted with this model.

So, when the API turned out quite different, I figured it would be better with a name that isn't so focused on concatenation - and more on optimization: optimus.

I do miss the concatenated cats tho:

I'm still using catenate, where are the docs?

You can find them in

How do I migrate to optimus?

This is catenate:

(-> app
     :bundles my-bundles
     :extra-files my-files
     :debug (:debug env)
     :public-dir "public"))

This is optimus:

(defn get-assets []
   (assets/load-bundles "public" my-bundles)
   (assets/load-assets "public" my-files)))

(-> app
     (if (:debug env)

There's more code here, and less configuration. In other words, more power to you.

What do I get if I upgrade?

At the time of writing, there's this:

  • You can change your get-assets function in development-mode, and see those changes mirrored without a restart.

  • You can list files to include in bundles using regexp.

  • You get minification of scripts and styles.

  • You can serve optimized assets while developing, so that you are in a production-like environment, but with live reloads.

Something went wrong with that request. Please try again.