Straight ahead



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 yourself.

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 straight.el is far more customisable. It also works seamlessly with use-package , so I didn’t have to reinvent my Emacs configuration just to try a new package manager.

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.