You love Emacs. You hate Emacs Lisp. We’ve all been there. You spend hours tweaking your .el files, fighting against mutable state and clunky syntax, wishing you could just use the threading macros and destructuring you fell in love with in Clojure.
Emacs is a sanctuary, but Elisp is the tax we pay to live there.
Most developers think you only have two choices: either suck it up and write imperative Elisp, or install a massive Clojure runtime and try to bridge the gap between your editor and your REPL. But what if there was a third option? Enter cljbang.el, a small but aggressively powerful package built by developer borkdude.
Cljbang isn’t trying to be a full Clojure environment. It’s a meta-layer that lets you embed Clojure-like syntax directly into your Emacs Lisp. It bridges the gap between two Lisp dialects without dragging in a heavy runtime. You get the expressive, immutable data structures and functional programming patterns you crave, right in the legacy environment you’re already stuck in.
The purists will hate this. They’ll argue that if you want Clojure, you should use real Clojure, and that introducing a syntax-mangling meta-layer is dangerous. They are wrong.
Legacy code isn’t a graveyard; it’s just a foundation waiting for the right syntax.
The reality of modern software development is that wholesale replacement is a myth. You can’t just rip out decades of Emacs infrastructure because you miss the ->> macro. The only viable path forward in legacy environments is incremental adoption. Cljbang.el understands this implicitly. It doesn’t demand that you abandon Elisp; it lets you inject the idioms you prefer exactly where you need them, with a remarkably small footprint.
It feels like a nostalgic delight to see two Lisp worlds collide like this. It’s a hack in the best possible sense of the word—a clever, zero-dependency bridge that solves a genuine, unmet need. If you use Emacs and have ever sighed at the lack of modern functional programming idioms, this is your escape hatch.
Stop waiting for the perfect toolchain. Hack the tools you already have until they bend to your will.
FAQ
Q: Isn't this just a messy meta-layer that will break my Emacs configuration?
A: Only if you write bad code. Cljbang.el is a lightweight syntax bridge, not a heavy runtime. It gives you Clojure's threading macros and destructuring natively in Elisp without destabilizing your core environment.
Q: Why would I use this instead of just running a full Clojure REPL?
A: Because you don't always need a full runtime to get the benefits of functional programming. If you're writing Emacs configuration scripts or small editor tools, dragging in a complete Clojure stack is overkill. This gives you the syntax you love with zero dependencies.
Q: Shouldn't developers just accept Elisp for what it is instead of trying to turn it into Clojure?
A: No. Accepting suboptimal tools is how progress stalls. Forcing modern functional programming idioms into legacy environments through incremental adoption is exactly how we push older ecosystems forward without breaking them.