Emacs 31 finally makes tree-sitter 'just work', and users are deleting their dotfile hacks

For years getting tree-sitter grammars into Emacs meant a shell script that detects your OS and clones repos by hand. Emacs 31 adds treesit-auto-install-grammar, and one user posted the exact 15-line block he's now ripping out of his config.

In brief

Rahul Juliato's rundown of the Emacs 31 features he's daily-driving topped HN: auto-installing tree-sitter grammars, editable xref result buffers, window-layout transposition, and speedbar as a real side window. The author showed up in the thread to answer questions.

The feature that landed hardest was the boring one. 'Tree-sitter that just works' lets one longtime user delete a multi-line, OS-branching dotfile script he'd carried for years to make syntax highlighting behave.

The features a daily driver actually kept

Emacs 31 changes, editor screenshot
Emacs 31 changes, editor screenshot

Rahul Juliato's post on the Emacs 31 changes he's daily-driving collected the upcoming release's quality-of-life wins from someone running it from source rather than a changelog dump. The standouts: treesit-auto-install-grammar to pull tree-sitter grammars automatically, editable xref buffers so you can edit search results in place, native transposition of window layouts, a speedbar that finally docks as a side window in the frame, and improved Markdown and terminal-emulator support. The author turned up in the thread: "Author here btw :)".

It pulled over 250 comments, and the most telling reactions weren't about the flashy items.

Why the unglamorous tree-sitter fix got the loudest cheer

The feature that drew relief, not just interest, was grammar auto-install, because of the ritual it kills. One user pasted the exact dotfile block he can now delete.

"Tree-sitter that just works. Hallelujah and thank you, sweet little baby Jesus. Now I can get rid of this bullshit from my dotfiles: rm -rf ~/.emacs.d/tree-sitter … if ( uname == Linux ) set _plat = linux …" — a user posting his OS-detecting grammar script

That captures a recurring Emacs complaint the release chips at: the editor is powerful but front-loads configuration work. "I wish Emacs came with several presets," one commenter wrote, noting Doom and Spacemacs solve it but feel far from vanilla.

The editor that quietly absorbed the AI era

The other live thread was less about Emacs 31 and more about why people are returning to a 1980s editor in 2026: agents.

"I had to briefly visit the world of VSCode during a period of time when it had better AI integration than emacs did, but since I got Claude working well inside of emacs I've returned to 100% emacs." — a longtime Emacs user

A second longtime user argued the configurability is now a feature, not a tax:

"Systems like Emacs that are hyper-configurable via a text file seem tailor made for modern LLM's… Agents are really good at setting up and maintaining your .emacs/init.el." — bryanlarsen, who runs emacs --daemon inside his agent sandbox

A release that wins by staying boring

The through-line is approval for software that gets "solidly, steadily better" without bolting on features nobody asked for. The headline items are conveniences; the real news is that an editor built for the 80x24 terminal keeps quietly fitting the newest workflow, this time by making config-as-text the thing LLM agents are best at editing. As one user put it, he'll upgrade to 31 and then "forget about all of it and just keep using Emacs the same way I have for the past 20 years", again. That is the compliment.

Get breakdowns like this every day

The top Hacker News stories, unpacked — by email, Telegram, or RSS.

Next story · 22 of 31 Read more
🚀Tech

Stop committing .DS_Store: the per-user Git ignore that maintainers keep rejecting PRs over

A maintainer in the thread says he routinely gets PRs adding IDE and OS junk to a project's .gitignore, and routinely tells contributors there's a global ignore file that does it everywhere, once. Twenty-year veterans in the thread admit they'd never heard of it.

★ 408 · 💬 128 · nelson.cloud · 3 min