- 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.
- 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). - 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.
- 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.