Skip to content
Tech News
← Back to articles

Emacs 31 is around the corner: The changes I'm daily driving

read original more articles
Why This Matters

Emacs 31 introduces significant improvements, particularly in automating Tree-sitter integration, which simplifies syntax highlighting and parsing for developers. These updates enhance the user experience by reducing setup complexity and increasing functionality out of the box, signaling a more streamlined and powerful editing environment for the tech community and consumers alike.

Key Takeaways

Karthik Chikmagalur recently published another of his excellent "Even More Batteries Included with Emacs" posts, digging into lesser-known features that already ship with Emacs today. I wanted to write its mirror image. His post covers the batteries already in the box. Mine covers the ones arriving in Emacs 31.

Emacs 31 isn't out yet, but I've been building it from both emacs-31 branch and master and daily driving it for months. Every time something new and useful lands, I fold it into Emacs Solo, my no-external-packages config, and mark it with a small ; EMACS-31 comment so I remember to revisit it once the release is official.

This post walks those breadcrumbs. Every change below is one I'm touching in my config right now, with a note on what it does and why I keep it. None of it requires a package. It's all either on master already or close behind.

One disclaimer: Emacs 31 is still in development (actually in pre-release phase), so names and defaults can shift before final release. Everything below is what I'm running as of mid-2026. If you're not building from emacs-31 branch or master , treat this as a preview of what's coming.

Tree-sitter that just works

If I had to pick the single change I'm happiest about, it's this one. For years, getting a *-ts-mode going meant manually populating treesit-language-source-alist , calling treesit-install-language-grammar , and praying your toolchain was set up to compile the grammar. In Emacs 31 a lot of that ceremony goes away:

( treesit-auto-install-grammar t ) ( treesit-enabled-modes t )

treesit-enabled-modes set to t switches the major modes that have a tree-sitter variant over to it, and treesit-auto-install-grammar makes Emacs offer to fetch and build the grammar when it's missing instead of erroring out. This is the treesit-auto package experience, except now the core does the work.

The knock-on effect shows up all over my config. I used to keep lines like these around to teach Emacs where each grammar lives:

( add-to-list 'treesit-language-source-alist '( typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src" ) )

... continue reading