· via Hacker News – Front Page (native)
Emacs 31.1 arrives with no headline feature, but drops unexec and simplifies tree-sitter setup
GNU Emacs 31.1 is out with no single headline change — the planned garbage collector slipped to Emacs 32 — but the release removes the old unexec dumper and simplifies tree-sitter grammar installation.

Emacs 31.1 has shipped, and according to Mastering Emacs — whose release walkthrough surfaced on the Hacker News front page — this is a version assembled from incremental refinements rather than one marquee feature. The redesigned garbage collector that had reportedly been considered for this cycle has been pushed back to Emacs 32.
The most consequential change is nevertheless a deletion: the traditional unexec dumper, deprecated since Emacs 27, is gone for good.
The unexec dumper is gone
To explain why this matters, Mastering Emacs recaps a decades-old engineering problem. Building Emacs first produces temacs, a minimal core containing the C engine and the Lisp interpreter but little of the standard library. Loading all of that Lisp into memory at startup is slow and resource-hungry, so for years Emacs solved the problem with unexec: it loaded everything once and wrote the process's memory segments directly into a fresh executable, yielding a binary that started with the entire standard library already in place.
That trick leaned on special hooks in glibc that upstream eventually stopped supporting. Daniel Colascione's portable dumper, introduced roughly a decade ago, replaced the raw memory dump with a structured serialization of Emacs's internal state, and it has been the default dumping mechanism for years. In 31.1 the legacy unexec code has been removed entirely, and the portable dumper now also covers m68k a.out targets.
Tree-sitter grammars get easier to install
Emacs's tree-sitter integration is still held back by two obstacles, the article argues: major modes have to be written specifically for tree-sitter and are often thin re-implementations of the originals, and installing language grammars — which must match both the tree-sitter library's ABI and each grammar's expected version, particularly on Windows — has been error-prone. Emacs 31.1 addresses the second problem: it can now offer to install the correct grammar for the tree-sitter modes it knows about.
Quality-of-life changes in the editor
Several smaller changes stand out:
- A
user-lisp/directory inside the Emacs configuration directory is now recursively byte-compiled, scanned for autoload cookies and added toload-path, giving users a built-in answer to the question of how to run a package they just cloned. completion-preview-mode, the native in-buffer completion UI introduced in Emacs 30.1 that works through the*Completions*window rather than a floating child frame, gains a wide range of new customization options.- New commands such as
window-layout-rotate-clockwise, grouped under theC-x wprefix, rotate window layouts. C-x C-x, which exchanges point and mark, can now be configured not to activate the region — behavior that previously required custom code to work aroundtransient-mark-mode.- In terminals that support clipboard access and mouse events,
xterm-mouse-modeis now enabled by default, making menus clickable and mouse behavior work as expected; setting it to nil restores the old behavior.
Build, packaging and startup changes
The release also reworks several installation details. Emacs's own ctags program is no longer built or installed; users are directed to Universal Ctags instead, or can run etags --ctags for the old behavior. A new --with-systemduserunitdir configure option lets Emacs install a systemd user unit for running its server, which the article recommends.
On 32-bit x86 systems built with GCC 4 or later, configure now defaults to -mfpmath=sse where SSE2 is available, or -fno-tree-sra otherwise, working around GCC bug 58416, which could cause Emacs to misbehave in rare cases. Finally, site-start.el now loads before the user's early-init.el, allowing system administrators to make early-stage customizations such as extending package-directory-list.
Why it matters
Emacs releases rarely make headlines, and 31.1 is honest about that: there is no single feature to point at. But the sum of the changes describes a project quietly paying down old debt. Removing unexec ends a portability liability rooted in glibc internals that the portable dumper had long since made redundant. Automatic tree-sitter grammar installation removes the most practical barrier to modern syntax-aware editing in Emacs. And defaults like terminal mouse support make the editor behave the way newcomers expect. For a project with Emacs's long history of backwards compatibility, a release that mostly deletes, simplifies and polishes is itself the story.
- #emacs
- #open-source
- #text-editors
- #tree-sitter
- #software-release