Programmers know the benefits of everything and the tradeoffs of nothing. – Rich HickeyEarlier today I wrote about Emacs Redux turning 13. That felt like the perfectoccasion to also ship something I’ve been working towards for a while –Emacs Prelude 2.0.A Long Time ComingThe last tagged Prelude release (1.1) happened all the way back in February Five years without a release might sound alarming, but I’d argue it’s afeature, not a bug. Prelude has always aimed to be a foundation – simple,stable, easy to understand. I never wanted users to dread pulling upstreambecause everything moved under their feet. If you look at some of the more“sophisticated” Emacs distributions out there, the constant churn and complexitycan be genuinely overwhelming. That’s not the experience I want for Preludeusers.That said, five years is a long time in Emacs land. Emacs 29 landed withbuilt-in tree-sitter, Eglot, and use-package. A bunch of third-party packagesthat Prelude depended on became obsolete or unmaintained. It was time for aproper update.What’s NewPrelude 2.0 is all about modernizing the distribution for the Emacs 29+ era.Emacs 29.1 is now the minimum versionThis was the big enabling change. Emacs 29 brought so many things that Preludepreviously had to install or polyfill – use-package, display-line-numbers-mode,isearch-lazy-count, use-short-answers, tree-sitter, Eglot – that bumpingthe minimum version let me drop a ton of compatibility code and third-partydependencies in one go. Packages like nlinum, anzu, and epl are goneentirely, replaced by their built-in equivalents.Tree-sitter supportLanguage modules now automatically use tree-sitter modes (e.g., python-ts-modeinstead of python-mode) when a grammar is available, with graceful fallback toclassic modes when it isn’t. This means better syntax highlighting andstructural editing with zero configuration – just install the grammar andyou’re done. Prelude currently supports tree-sitter remapping for C/C++, Go,Python, JavaScript, TypeScript (including TSX), Ruby, Elixir, Shell, YAML, andCSS. Some modules like prelude-ocaml (which uses neocaml) are tree-sitter-onlyby design.Built-in LSP via EglotMost language modules now come with LSP support out of the box, using Eglot asthe default client. No extra packages to install, no configuration to write –just make sure you have the right language server on your $PATH and Preludehandles the rest. Eglot keybindings live under the C-c C-l prefix (rename,code actions, format, organize imports), consistent with what lsp-mode usersare used to. If you prefer lsp-mode, set prelude-lsp-client to 'lsp-modein your personal config and Prelude will use it across all language modulesinstead.Modernized language modulesPython, JavaScript, TypeScript, OCaml, Go, and others have been updated to usemodern tooling. anaconda-mode is replaced by LSP, js2-mode by js-ts-mode,tide by typescript-ts-mode, tuareg by neocaml, alchemist andgo-projectile are gone (both unmaintained for years). The goal was to bringevery language module up to 2026 standards while keeping them short andfocused – most are still under 50 lines.Faster startupI still stand by my older take that Emacs startup time doesn’t reallymatter –you start Emacs once and it runs for days (or weeks, or months). But when thefruit hangs this low, why not pick it? Interactive packages are now loaded lazilyvia use-package :defer, and redundant require calls have been eliminatedthroughout. The old defadvice calls have been replaced with moderndefine-advice / advice-add, and a fair amount of dead code has been cleanedup across the board. Nothing dramatic, but it all adds up to a noticeablysnappier startup for those who care about such things.There’s a detailed changelogif you want the full picture, and amigration guide in theREADME to help with the upgrade.The Docs Got a FaceliftThe documentation site has been updated andnow uses the Material for MkDocs theme, which is a lot nicer to read andnavigate than the old ReadTheDocs default. The content has been refreshed too,with all modules now properly documented.What’s NextThere’s more I’d like to do. For instance, I haven’t yet pushed to converteverything to use use-package idiomatically – some modules still use theold with-eval-after-load / add-hook style. I’d also like to explore deeperintegration with project.el and perhaps revisit the module system itself. Buteverything is in good shape overall, and I’d rather ship incrementalimprovements than hold back a release for perfection.Starter Kits in the Age of AIA fair question to ask in 2026 is whether Emacs distributions even matteranymore. With tools like Claude Code, you can just ask an AI to set up Emacshowever you like – generate an init.el from scratch, configure LSP, pick acompletion framework, wire up keybindings. Why bother with a starter kit?I think there are a few reasons Prelude (and projects like it) still matter.First, AI coding agents are only as good as the code they’ve been trained on.And right now, the Emacs ecosystem has a serious “popularity inertia” problem –agents will almost always suggest the older, more established package over anewer alternative, even when the newer one is clearly better. Ask an AI to setup OCaml in Emacs and you’ll get tuareg + merlin every time, not neocaml +ocaml-eglot. Ask for a completion framework and you’ll get ivy or helm,not vertico + marginalia. The training data reflects the past, not thepresent. Well-maintained distributions that track the state of the art serve asa corrective – both for humans browsing GitHub and for the models trained onit.Second, there’s real value in curation. An AI can generate a config, but itcan’t tell you which packages play well together, which ones are unmaintained,or which defaults will bite you six months from now. That kind of judgment comesfrom experience, and it’s exactly what a good starter kit encodes.And third, simplicity still wins. A generated config you don’t understand isworse than a short, readable one you do. Prelude’s modules are deliberatelysmall and straightforward – they’re meant to be read, forked, and modified. I’drather give someone 20 lines of well-chosen defaults than a 200-line AI-generatedconfig full of cargo-culted settings.I wrote more about this topic in Emacs and Vim in the Age ofAI ifyou’re curious.Prelude and Emacs ReduxEmacs Prelude holds a special place in my heart. It was one of my firstopen-source projects – I started it back in 2011, two years before this blogeven existed. When I launched Emacs Redux in 2013, many of my early posts wereessentially showcasing features and ideas from Prelude. The two projects grewup together, and in many ways Prelude was the proving ground for the tips andworkflows that ended up here. It’s fitting that they celebrate together today.The Return of the Prelude Simplicity is a great virtue but it requires hard work to achieve it andeducation to appreciate it. And to make matters worse: complexity sells better. – Edsger W. DijkstraI’ve always believed that slow, deliberate change beats constant reinvention.It’s not glamorous, it doesn’t generate hype, but it builds something you canactually rely on. Prelude doesn’t try to be everything to everyone – it triesto be a solid, understandable starting point that respects your time andattention.And here’s a fun bit of trivia to close on: 2026 happens to be the year Hondabrings back the Prelude. Very fewpeople know this, but I was actually considering buying a (pretty old) HondaPrelude around the time I created Emacs Prelude back in 2011 – that’s where thename came from! I never did buy the car, but the Emacs distribution turned outto be a much better investment.1 And now, 15 years later, both Preludes are makinga comeback. Sometimes things just come full circle.That’s all I have for you today. Keep hacking! More trivia for you - I did end up buying a BMW E39 in 2010 instead of the Prelude. I still own it and it just turned 26 earlier this month! ↩