I have never found Emacs appealing without external packages. From the colour
theme to the best Git UI one could ask for, I can’t imagine using Emacs without
external packages. The built-in
package.el has served me well for a long time.
Configured with the usual package archives, it has offered me easy access to new
packages and updates for the currently installed ones.
However, digging a little deeper reveals some of its shortcomings. For instance,
downgrading has to be done manually, because
package.el gives access only to
the latest version of a package. This also means it is impossible to get a
specific version of said package without getting the source and loading it by
As you install and configure more and more tools to enhance your Emacs experience, you are adding layers of complexity. Dependencies are pulled in and new releases could bring breaking changes: either you never upgrade your packages, or you learn to live on the bleeding edge. I love that edge as much as your next Emacs hacker, but to approach it with steadiness I need more control over the packages I use.
This is where straight.el fits in.
I have to admit that Radon Rosborough played
dirty with my feelings: by describing
straight.el as purely functional he knew
perfectly well a developer in love with functional programming could not resist.
But there is more to it, of course.
First of all, I love the documentation. The effort put into explaining the rationale behind it, the comparisons with other package managers, and the basics to get started is simply amazing. Even the process of reproducing bugs is documented. It may seem like a lot to take in, but it’s clear and it’s something I want to know before changing one of the key features of my text editor.
Moreover, it takes a few lines of code to bootstrap
straight.el. It would
probably take fewer lines to set up
package.el, that’s true, but
is far more customisable. It also works seamlessly with
I didn’t have to reinvent my Emacs configuration just to try a new package
Finally, you can freeze your package state at any time with
straight-freeze-versions. This creates a lockfile with the current versions of
your packages, meaning you can reproduce your exact configuration with a simple
straight-thaw-versions. Stability is just a couple of commands away.
There must (should?) be a moment when the Emacs hacker knows they exploited
their beloved editor as much as possible, the eureka light bulb leading the way
through a thick fog of
defun. Valhalla is there, Emacs hacker, you
know it. As for me, I decided to accept the murkiness for now, and look for the
bulb that will get me out of here eventually another time.