Skip to content

What is different about Emacs 30?

Here’s a list of the most important changes in Emacs 30 as compared to Emacs 29. The full list is too long to fit here, but can be read in the Emacs NEWS file by typing C-h n inside Emacs.

  • Native compilation is now enabled by default. When Emacs is built on a machine with ‘libgccjit’, this will improve Emacs performance in many typical workloads.
  • Emacs has been ported to the Android operating system. See the file java/INSTALL in the Emacs source distribution for details on how to build it.
  • New user option trusted-content to allow potentially dangerous Emacs features which could execute arbitrary Lisp code. Use this variable to list files and directories whose contents Emacs should trust, thus allowing those potentially dangerous features when those files are visited.
  • Numerous performance improvements, for example in parsing JSON, reading data from subprocesses, handling output from Eshell and in Shell mode, X selection requests, remote files, and so on.
  • Native JSON support is now always available; libjansson is no longer used.
  • New major modes based on the tree-sitter library library for editing Elixir, HEEx, HTML, Lua, and PHP.
  • Support for the EditorConfig standard has been added, an editor-neutral way to provide directory local (project-wide) settings. It is enabled via a new global minor mode editorconfig-mode which makes Emacs obey the .editorconfig files.
  • Support for touchscreens has been improved. On systems that understand them (at present X, Android, PGTK, and MS-Windows), many touch screen gestures are now implemented and translated into mouse or gesture events, and support for tapping tool bar buttons and opening menus has been added.
  • Tool bar tweaks. The new minor mode window-tool-bar-mode provides a per-window toolbar. Toolbars can be placed on the bottom of a frame by setting the tool-bar-position variable on all window systems but GNUStep and macOS.
  • The ‘which-key’ package from GNU ELPA is now included in Emacs. After enabling the minor mode mode which-key-mode, if you enter C-x and wait for one second, the minibuffer will expand with all available key bindings that follow C-x (or as many as space allows).
  • New global minor mode kill-ring-deindent-mode. When enabled, text being saved to the kill ring will be de-indented by the column number at its start.
  • New minor mode visual-wrap-prefix-mode. Unlike M-q, the indentation only happens on display, and doesn’t change the buffer text in any way.
  • Automatic regeneration of TAGS files using the new global minor mode etags-regen-mode.
  • Improved warnings from the byte-code compiler to aid Lisp developers.
  • Support for underline colors on TTY frames.