- Add a welcome screen shown on startup (unless Emacs is launched to open specific files). It points you at the essentials (personal config location, how to enable modules, the user manual) and offers quick access to recent files, known projects and bookmarks, plus a rotating tip. Reopen it any time with
M-x prelude-welcome, or turn it off with(setq prelude-welcome-screen nil). - Add
prelude-swiftmodule: Swift support via the tree-sitter poweredswift-ts-modeandsourcekit-lsp(registered with Eglot, since Eglot has no built-in entry for Swift). Starts an LSP session through the usualprelude-lsp-enableabstraction. - Add
prelude-misttymodule: a terminal based on MisTTY, a pure-elisp shell/comint hybrid on top ofterm.el(no native module to compile). Rebinds Prelude's terminal keyC-c ttomistty. - Add a
prelude-spell-checkeroption to choose betweenflyspell(the default) and jinx, a faster libenchant-based spell checker that only checks the visible part of the buffer. Jinx is installed on demand and enabled as a single global mode; set(setq prelude-spell-checker 'jinx)in your personal config to opt in (requires libenchant and a C compiler). - Add a
prelude-whitespace-cleanup-styleoption to choose how whitespace is cleaned on save:whitespace-cleanup(the default, tidies the whole file) or ws-butler, which trims only the lines you actually edited so saving a file in someone else's project no longer produces noisy whitespace-only diffs. ws-butler is installed on demand. - Add
prelude-aimodule: a thin wrapper around gptel for LLM-backed chat (Claude, GPT, Gemini, Ollama, etc.). Bindsgptel-menutoC-c q. Backends and API keys are configured in personal config -- see the module documentation for examples. - Add
prelude-forgemodule: enables Forge on top of Magit so you can read and reply to GitHub/GitLab/Gitea pull requests and issues without leaving Emacs. - Add
prelude-eglot-boostermodule: speeds up Eglot via the emacs-lsp-booster wrapper. The Emacs side (eglot-booster) is auto-installed viapackage-vc-installwhen the booster binary is onPATH; otherwise the module no-ops. - Add
prelude-corfumodule: a modern, lightweight in-buffer completion stack (corfu + cape) -- alternative toprelude-company. Pairs naturally with the vertico/orderless setup inprelude-vertico. - Add
prelude-apheleiamodule: enables Apheleia globally for async, flicker-free format-on-save (Prettier, Black, Ruff, gofmt, rustfmt, ...). Supersedes the per-language format hooks in modules likeprelude-rustandprelude-go.
- Add an
early-init.elthat tunes startup: it raises the GC threshold while Emacs loads (restoring a modest value once startup is over), disables the tool bar via frame parameters so the initial frame is never drawn with one, setsframe-inhibit-implied-resize, native-compiles packages at install time (package-native-compile), and sets a saneLANGfor GUI Emacs on macOS (which otherwise starts in theClocale and breaks spell-checker dictionaries and subprocess sorting). - Populate
treesit-language-source-alistwith recipes for the languages Prelude's modules use, so a missing grammar can be installed withM-x treesit-install-language-grammarwithout hunting down repository URLs. - Modernize the Eglot event-log setting to prefer
eglot-events-buffer-configon newer Eglot, falling back to the obsoleteeglot-events-buffer-sizeon older versions. - Bridge Eglot diagnostics into Flycheck via flycheck-eglot when
prelude-lsp-clientiseglot, so LSP diagnostics show up in Prelude's Flycheck UI instead of only through Flymake. Installed on demand; lsp-mode users are unaffected (lsp-mode has its own Flycheck integration). - Add Embark (and
embark-consult) toprelude-vertico: a keyboard-driven context menu bound toC-.(embark-act),C-;(embark-dwim) andC-h B(embark-bindings), withembark-exportinto editable grep/occur buffers. In Flyspell buffers those keys keep their Flyspell auto-correct meaning; Embark still works in the minibuffer and elsewhere. - Enable the
vertico-directoryextension inprelude-vertico:RETdescends into the selected directory,DELdeletes a whole path component, andM-DELdeletes a word of it. - Enable
corfu-history-modeinprelude-corfuso recently chosen completion candidates sort first (persisted across sessions via savehist). - Set
consult-narrow-keyto<inprelude-vertico, so you can narrow consult candidates to a single group (e.g.< bfor buffers inconsult-buffer). - Tidy up
prelude-common-lisp: drop staleslime-autodoc-use-multiline-psetting (the variable was removed from upstream SLIME; modern autodoc honorseldoc-echo-area-use-multiline-p), setinferior-lisp-programtosbclsoM-x run-lispworks without SLIME, and addslime-quicklisptoslime-contribsfor Quicklisp integration.
- Update
prelude-helmto current upstream variable/function names: renamehelm-google-suggest-use-curl-ptohelm-net-prefer-curl(deprecated alias since helm 1.7.7), renamehelm-split-window-in-side-ptohelm-split-window-inside-p(deprecated alias since helm 2.8.6), drophelm-ff-file-name-history-use-recentf(removed from helm; behavior is now unconditional), and drop theC-c wbinding tohelm-wikipedia-suggest(function moved to a separatehelm-wikipediapackage). - Drop
C-c C-lbinding tohelm-comint-input-ringinprelude-helm-everywhere-- that command was removed from upstream helm. - Replace stale
erc-autoaway-use-emacs-idlesetting inprelude-ercwith(setq erc-autoaway-idle-method 'emacs)(the old variable was removed; idle source is now selected viaerc-autoaway-idle-method). - Rebind
M-s mfrom removedconsult-multi-occurto built-inmulti-occurinprelude-vertico(consult dropped the wrapper in favor of the built-in command). - #1450: Remove broken
slime-complete-symbol-functionsetting inprelude-common-lisp(referenced an undefinedslime-flex-completionssymbol; the variable itself has been obsolete since 2015). - #1453: Fix Common Lisp completion in
prelude-common-lisp: callslime-setupso the configured contribs (andslime-c-p-c-completion-at-point) actually load, and skip SLIME completion when no Swank session is connected so company no longer errors with a void-function or "Not connected." message. - Fix
prelude-ocamlintegration withneocaml: hook intoneocaml-base-mode(so.mlifiles are covered), enableocaml-eglot-modeproperly, and callprelude-lsp-enableso the LSP server actually starts. - Use
ocaml-eglot-modeinstead of the obsoleteocaml-eglotalias (renamed inocaml-eglot1.4.0). - Add a temporary
eglot-server-programsentry forneocamlso olderneocamlversions still getocamllspstarted. Can be removed onceneocaml >= 20260331is widely available on MELPA. - Drop
M-g eandM-g ffromprelude-vertico's consult bindings so they no longer shadow the avy bindings (avy-goto-word-0,avy-goto-line) set in core. Bindconsult-compile-error/consult-flymakein your personal config if you want them. - #1454: Drop stale
tidereferences from the docs now thatprelude-tsusestypescript-ts-mode+ LSP.
- Add
cmake-modepackage toprelude-c. - Set
c-ts-mode-indent-styletok&rso tree-sitter C/C++ modes match the classic cc-mode indentation style. - Add
auto-mode-alistentries for Eask and Eldev build tool files inprelude-emacs-lisp. - Add Super-based (
s-) keybindings on macOS for smartparens structural editing commands (splice, slurp, barf, splice-killing).
- Switch smartparens from paredit to default keybinding set. This frees
M-s(wassp-splice-sexp, shadowedsearch-map) andM-?(wassp-convolute-sexp, shadowedxref-find-references). Splice is now onM-D, convolute is unbound, splice-killing moves toC-M-<backspace>/C-M-<delete>. - Convert all language modules to
use-package: C, Clojure, Common Lisp, CSS, Dart, Elixir, Erlang, Emacs Lisp, F#, Go, Haskell, LaTeX, Lua, OCaml, Racket, Ruby, Rust, Scala, Scheme, SCSS, Web, YAML. - Remove
prelude-coffeemodule (CoffeeScript is no longer actively developed). The module file is kept as a deprecation stub so existing configs don't break. - Remove
duneandutoppackages fromprelude-ocaml(both are provided byneocamlout of the box). - Load
ocaml-eglotinprelude-ocamlonly whenprelude-lsp-clientis set toeglot. - Default to SBCL on all platforms in
prelude-common-lisp(was Clozure CL on macOS). - Disable
slime-enable-evaluate-in-emacsby default inprelude-common-lisp(security risk). - Add missing
prelude-lsp-enablecall inprelude-fsharp. - Guard
eglot-fsharpbehindprelude-lsp-clientcheck inprelude-fsharp. - Use
major-mode-remap-alistinstead ofdefaliasfor cperl-mode inprelude-perl. - Remove
C-c C-lbinding fromprelude-lua(conflicts with Eglot prefix). - Load
company-auctexonly when company is present inprelude-latex. - Move Makefile configuration from
prelude-ctoprelude-programming(benefits all programming modules). - Install
dart-modeexplicitly inprelude-dartinstead of relying on auto-install.
- #1400: Fix
M-s(search-map) andM-?(xref-find-references) being shadowed by smartparens paredit keybindings.
- Prelude now requires Emacs 29.1 or newer. This unlocks built-in tree-sitter, Eglot,
use-package, and many other modern Emacs features. - Add
prelude-lsp-clientuser option to switch between Eglot (default, built-in) and lsp-mode as the LSP client. All language modules use the configured client automatically. - Add tree-sitter support for C/C++, Go, Python, JavaScript, TypeScript (including TSX), Ruby, Elixir, Shell, YAML, and CSS. Tree-sitter modes are used automatically when the grammar is available, with graceful fallback to legacy modes.
- Add
prelude-treesit-remaphelper to safely remap modes to their tree-sitter equivalents, with proper guards for grammar availability. - Add LSP support to Python, JavaScript, TypeScript, C/C++, Ruby, Elixir, Haskell, Lua, and Erlang modules.
- Add Eglot keybindings under
C-c C-lprefix (rename, code actions, format, organize imports), consistent with lsp-mode bindings. - Add
prelude-verticomodule. Vertico is a simpler alternative toivy-modeand supersedes Selectrum. - Add
marginaliatoprelude-verticofor rich annotations in the minibuffer. - Add a Racket module.
- Add a Lua module.
- Add a F# module.
- Add a module to enable Literate Programming (
prelude-literal-programming.el). - PR 1432: Allow directories of custom Emacs Lisp files in
personal/preload. - Add
prelude-projectileuser option, allowing Projectile integration to be disabled. - Add
prelude-hippie-expanduser option, allowing hippie-expand support to be disabled. - #1421: Make it possible to configure the TypeScript format action using
prelude-ts-format-action. - #1354: Remove default
C--andC-+keybindings to increase/decrease the font size. - Enable
pixel-scroll-precision-modefor smooth scrolling on graphical displays. - Enable
isearch-lazy-countfor showing match counts during search and query-replace. - Enable
org-habits. - Add
org-capturebinding (C-c c) and enableorg-indent-modeby default. - Neatly track
TODOstate changes in a drawer (LOGBOOK), thereby improving readability. - Enable
subword-modein C, Dart, F#, LaTeX, OCaml, and Perl modules for better CamelCase navigation. - Add indentation defaults and modern template file extensions (
.vue,.svelte,.astro, etc.) toprelude-web. - Auto-install
racket-modeif needed.
- Modernize
prelude-ocamlto useneocaml(tree-sitter),eglot, andocaml-eglotinstead oftuareg,merlin, andflycheck-ocaml. - Modernize
prelude-pythonto use LSP instead ofanaconda-mode. - Modernize
prelude-jsto usejs-ts-modeand LSP instead ofjs2-mode. - Modernize
prelude-tsto usetypescript-ts-modeand LSP instead oftide. - Rename
prelude-lspmodule toprelude-lsp-modefor clarity. It is now loaded on demand only whenprelude-lsp-clientis set tolsp-mode. - Remove
prelude-selectrummodule (Selectrum is unmaintained, use Vertico instead). - Remove
nlinumpackage in favor of built-indisplay-line-numbers-mode. - Remove
anzupackage in favor of built-inisearch-lazy-count. - Remove
eplpackage in favor of built-inpackage-upgrade-all/package-upgrade. - Remove
alchemistfromprelude-elixir(unmaintained since 2018). - Remove
go-projectilefromprelude-go(unmaintained). - Replace
defadvicewith moderndefine-advice/advice-addthroughout. - Replace deprecated
point-at-eolwithline-end-positioninprelude-evil. - Replace deprecated
linum-modeex command withdisplay-line-numbers-modeinprelude-evil. - Remove obsolete magit keymaps from
prelude-evil(magit-commit-mode-map,magit-branch-manager-mode-map). - Switch SLIME completion from
slime-fuzzytoslime-flexinprelude-common-lisp. - Use
use-short-answersinstead offsethack for y/n prompts. - Use built-in
ansi-color-compilation-filterfor compilation buffer colorization. - Use built-in
use-package(no longer installed as a package). - Use
use-packageto defer loading of interactive packages, improving startup time. - Remove redundant
requirecalls to improve startup time. - Remove
C-x pbinding toproced(conflicts with built-inproject.elprefix). - Bind
C-x C-mtoexecute-extended-commandinstead ofsmex. - Remove redundant addition to
auto-mode-alistfor Markdown (note: this reverts the default tomarkdown-modeinstead ofgfm-mode). - Bind all essential
avycommands to their recommended keybindings. - Remove
company-lsp. - Replace
yank-popkey-binding tocounsel-yank-popforivy-mode. - Replace prelude-go backend with
lspinstead of unmaintained tools. - Restore format-on-save for Go via
gofmt-before-save. - Use
rust-analyzeras language server for prelude-rust and provide nicer syntax highlighting withtree-sitter. - Add
prelude-undo-treecustom variable: allows user disable undo-tree integration. Enabled by default to maintain backward-compatibility. - Disable ERC module by default and remove Freenode reference.
- Use HTTPS for MELPA on all platforms.
- Guard
set-fontset-fontwithdisplay-graphic-pto avoid errors in terminal Emacs. - Switch docs theme from ReadTheDocs to Material for MkDocs.
- CI now tests on multiple Emacs versions (29.x, 30.x).
- Fix hook variable name mismatch in
prelude-fsharp(prelude-sharp-mode-hook→prelude-fsharp-mode-hook). - Fix duplicate
zloginentry and wrong comment inprelude-shell. - Fix wrong header comment in
prelude-ocaml(said "Perl"). - Fix spurious
(interactive)inprelude-ts-mode-defaults. - Fix duplicate
auto-mode-alistentries inprelude-racket. - #1445: Fix
prelude-rustfailing to load due to tree-sitter dependency issue. - Fix wrong hook name in
prelude-rust. - PR 1433: Remove a duplicate
whencall inmodules/prelude-helm-everywhere.elcausing an emacs init error whenprelude-helm-everywhereis enabled. - Fix
companystill being visible in the mode line. - #1335: Workaround
for
which-keybug causing display issues in clients toemacs --daemon. - Fix Edit on GitHub link in ReadTheDocs site.
- Fix fall back to sample
prelude-modules.elnot working if user has installed to non-default location. - Stop requiring
helm-configsince upstream has removed the module. - Turn off
super-saveinrust-modeto prevent severe hangs during autocomplete. - Update
prelude-dart.elto uselsp-dart-dap-setupinstead of deprecateddap-dart-setupfunction. - Fix stale references and broken config across modules.
- Enable
nlinum-modeordisplay-line-numbers-modeby default. Can be disabled by settingprelude-minimalistic-uitot. - Enable site-wide installation for Prelude.
- Auto-installs
julia-modeif needed. - Auto-install
adoc-modefor AsciiDoc files. - Add the
agpackage. It provides a nice alternative togrepand has nice Projectile integration. - Added additional configuration modules for WSL (
prelude-wsl) and Windows (prelude-windows). - Add
prelude-selectrummodule. Selectrum a simpler alternative toivy-mode.
- #1292: Add
prelude-python-mode-set-encoding-automaticallydefcustom innprelude-python.elmodule with nil default value. - #1278: Don't disable
menu-bar-modeunlessprelude-minimalistic-uiis enabled. - #1277: Make it possible to disable the creation of
Super-based keybindings viaprelude-super-keybindings. - Removed deprecated alias
prelude-ensure-module-deps. - Remove
prelude-fullscreen, as these days people can usetoggle-frame-fullscreeninstead. (it was introduced in Emacs 24.4) - Removed
beacon-mode. - Added
transient/to.gitignore. - Fallback to
sample/prelude-modules.elin the absence of aprelude-modules.elin one's personal folder. - [Ruby] Don't auto-insert coding comments.
- Hide (via
diminish)editorconfig-mode,super-save,company,abbrevandivyin the modeline. - Use
lsp-workspace-restartfunction instead of deprecatedlsp-restart-workspace. - Bind all online search commands under
C-c C-/to avoid a conflict withcounsel-gitormagit-file-dispatch. - Bound
magit-file-modetoC-c g(it's also bound toC-c M-gif you decide to utilize this keybinding for something else. - Added
.cache/andlsp-session*to.gitignore. These are generated bylsp.
- #1445: prelude-rust fails to load due to tree-sitter dependency issue
- #1302:
C-ashould be bound toorg-beginning-of-linein org-mode buffers.
Initial "stable" release after 9 years of development.