Basic data types
Customization.EnumCustomization.Type.Option is now an inline record with self-documenting fields. It corresponds to the Elisp customization type '(choice (const :tag "documentation for nil" nil) <some-other-type>).Defun.defalias now allows the definition to be any value, not just a symbol, as the Elisp defalias allows.Symbol.set_function. Use Defun.defalias instead, which handles load-history, documentation, advice, etc. properly.Hook now supports binding special hooks, including those whose functions return meaningful values. Hook.t, Hook_type.t, and Hook.Function.t now have an additional type parameter to track the return type of the hook functions.Hook_type.Query_function for things like kill-buffer-query-functions.Progress_reporter module, with bindings and helper functions for echo area progress reportersText.of_utf8_bytes_replacing_invalid, similar to Text.of_utf8_bytes but with error-handling if the OCaml string contains malformed UTF-8 sequencesText.Property_name.help_echo and Text.Property_name.kbd_help bindings for Emacs mouse-over and idle help display functionality.Timer.run_after_idle and Timer.run_after_idle_i for creating idle timers (run-with-idle-timer)Buffers
Buffer.find_by finds a live buffer using a predicate functionCurrent_buffer.replace_buffer_contents is assumed to always be available (requires Emacs 26+).Current_buffer.describe_modeMode_line.Format.header_line_in_buffer, a binding for header-line-format (like mode-line-format, but for the buffer-local header line).Mode_line.Format.empty and Mode_line.Format.string_verbatim helpers to make mode-line format constructs.Commands and user interaction
Removed Command.quit_flag binding for quit-flag. Ecaml now calls the process_input module function to poll for whether a blocking Async operation should be interrupted, and preserves the original quit signal instead of replacing it with an OCaml exception.
If you need to set this variable for whatever reason, you can use Command.Private.request_quit, but this is not useful outside of tests.
Completing.read and Completing.read_multiple now accept collection parameter as string list instead of a variant type. The Elisp value variant was almost never used.Prefix variant to Defun.Interactive.t for numerical prefix arguments. This corresponds to the p interactive specifier in Elisp.Browse_url.browser-function, a binding for the browse-url-browser-function customization.User.init_file for user-init-file variable. It is None if Emacs was started with -q or --no-init-file options.Major modes
Major_mode.Lisp_data for lisp-data-mode. Major_mode.Lisp, which is now unused, has been deleted.Tabulated_list API. Creating a Tabulated_list.t now requires specifying a function to extract a non-empty string ID for each record, rather than an arbitrary ID type. This change was required to provide a custom sorting function for each column, instead of just the native Emacs string comparison function.Tabulated_list.get_record_at_point_exn.System
Directory.files_recursively: ?ignore_unreadable_dirs defaults to false and corresponds to the PREDICATE argument of directory-files-recursively.Filename.expand's ~in_dir argument. Default_directory_in_current_buffer is equivalent to omitting the second argument to expand-file-name.Process.create: coding, query_before_exit, and stderr. These correspond to the :coding, :noquery (inverted) and :stderr arguments to make-process.cl.el, which is deprecated (Ecaml uses cl-lib now instead).Basic data types
Value.Type.Enum. Users should now use Value.Type.Enum.S instead.Filename.extension, a wrapper for file-name-extension.Emacs_version.major_version, a wrapper for variable emacs-major-version.Hook.Function.symbol, which retrieves the name of a given hook function.Process.call_exn now accepts an optional ?stderr argument, which specifies what to do with the standard error output from the process. The default, Mix, retains the old behavior of interleaving it with the standard output. It can also be dropped with Drop_if_ok or redirected elsewhere with Split.Advice.defun_around_funcall now raises a more informative error message when the advice function's arity does not match the advised function's.Buffers and Text
Buffer.is_modified, a wrapper for buffer-modified-p.Current_buffer.active_region now checks use-region-p instead of mark-active.max_duration and max_costs for Current_buffer.replace_buffer_contents. See the docstring for replace-buffer-contents.Kill_ring.current_kill_exn, which returns the first item in the kill ring (the one that would be inserted by yank). It can also return text copied from another GUI application, if available. This is a wrapper for current-kill.Overlay.delete_property. This sets an overlay property to nil, as Emacs doesn't expose a way to actually remove the property from an overlay's plist; for most text properties, a nil value has the same effect as a missing one.Point.Property_search module, which wraps text-property-search-forward and its required argument types.Text.Property_name.{after_string,before_string,invisible}, equivalent to after-string, before-string, and invisible.Rx.Char_class.Named, which allows specifying a character class by name (e.g., "alphabetic", "digit"), rather than by listing them in a string or specifying a range.Commands
Symbol.Disabled.t, which allows disabled commands to include a message, such as to explain why a command was disabled. This message is displayed when the user attempts to run the disabled command. defun_* ?disabled arguments use the new type.Key_sequence.invoking_this_command, a wrapper for this-command-keys.Faces
Color.of_rgb8, which takes arguments in the range [0, 255] (instead of [0, 65_535] as Color.of_rgb does).Face.Attribute.Extend variant, to handle the built-in faces in Emacs 28.Frames and Windows
Frame.window_list now accepts an optional ?frame argument. When None, this still lists the windows of the selected frame.Selected_window.find_file_other_window Async, as find_file already was.Major modes
Compilation.major_mode, a wrapper for compilation-mode.Compilation.find_buffer, a wrapper for compilation-find-buffer.Major_mode.Python, a wrapper for python-mode.Minor modes
Minor_mode.auto_fill, a wrapper for auto-fil-modeMinor_mode.define_minor_mode's initialize function now receives the minor mode being defined as an argument; this can be used to change the behavior based on whether the minor mode is being enabled or disabled, or to add hooks/commands that may enable/disable the minor mode.Other
Buffer.with_temp_buffer and Echo_area.wrap_message now accept a Sync_or_async.t argument, instead of requiring the body to return Deferred.t.Customization.Type.Key_sequence variant.Minibuffer.read_file_name, a wrapper for read-file-name