BBEdit 14.5 Release Notes

BBEdit 14.5 is a feature update, which includes notable new features, visible changes to existing features, and fixes for reported issues.

For details on all the new features and enhancements available in BBEdit 14, please take a few moments to browse the release notes archive and review the release notes for any versions that you may not have seen.

To get a high-level overview of what's new in BBEdit 14, with screen shots, see the What's New in BBEdit 14 page.

For detailed information on using any of BBEdit's features, please refer to the user manual (choose "User Manual" from BBEdit's Help menu).

Important: Please make sure that you have read the BBEdit 14.0 change notes, as there are significant changes from previous versions.


BBEdit 14.5 requires Mac OS X 10.15.4 or later, and is compatible with macOS 11.0 and later.

If you are using macOS 10.15 "Catalina", please make sure that you have updated to the latest available OS version (10.15.7).

If you are using macOS 11 "Big Sur", please make sure that you have updated to the latest available OS version (11.6 or later).

If you are using macOS 12 "Monterey", please make sure that you have updated to the latest available OS version (12.4 or later).


If you have been using any previous (13.x or older) version of BBEdit in Free Mode, starting BBEdit 14 will reset your 30-day evaluation period, so that you can have a full trial of the new features.

If you have previously purchased a license from us for BBEdit 13 or older, you will have a full 30-day evaluation period in which to try out BBEdit 14's new features. License upgrades are available at a discount for existing customers. Please see the BBEdit upgrades page for information and instructions.


  • When using a language server that supports symbol renaming (specifically, the textDocument/rename command), you can right-click on a symbol, and if the server thinks you should be allowed to rename the symbol, a "Rename" command will appear on the contextual menu. The "Rename Selected Symbol" command on the Edit menu does this as well.

    Choosing this will prompt you to enter the new symbol name, and confirming the entry will perform the rename operation. Symbol renames potentially may affect multiple files; if so BBEdit will open them as needed.

    Changes performed by a symbol rename are undoable in each file, if desired.

  • If an LSP completion returns additionalEdits data (such as a statement to include a header file necessary to resolve the completed symbol), BBEdit will apply those edits as needed, after inserting the completion. (Each individual additional edit is undoable.)

  • Added support for LSP "Code Actions". If the server supports them at all, these are offered contextually based on the insertion point/selection range when right-clicking in a text document. BBEdit will ask the server what it supports, and the server may respond with a list of operations that are appropriate for that location in your source file.

    If the server returns such a list, BBEdit will present the operations on the "Code Actions" submenu of the contextual menu.

    Not all language servers support this feature; and not all servers even document what code actions they do support. And even then, the list of available operations for any arbitrary point in code is not guaranteed. If you aren't seeing the operations you expect when right-clicking in a text document, we recommend filing a bug report with the server developer.

  • If a language server includes "quick fix" information in a diagnostic (error/warning) that it returns, BBEdit will add a "Fix" button to the diagnostic's item in the popover list. Clicking this button will apply the changes supplied by the language server. The diagnostic's display message will also include the titles of the available fixes.

  • Added "Tail Mode": when turned on, BBEdit will move the insertion point to the end of the file if it is changed while BBEdit has it open. (When in Tail Mode, BBEdit will change the selection range but will not scroll the file to the end unless the file was already scrolled to the end at the time the file was reloaded.)

    This can be quite useful for log files, and thus it is on by default for files whose filename extensions map to the "Log File" language. You can also turn it on (or off) per-file via any of the usual mechanisms: View -> Text Display, Text Options menu command, or the Text Options panel. (The setting is available for any locally opened file, whether or not it maps to the "Log File" language.)

    The "Tail Mode" setting is persistent, so a file for which you've manually turned Tail Mode on (or off) will maintain the setting when closed and reopened.

    If you want to turn off Tail Mode for the "Log File" language, an expert preference command will do this:

    defaults write com.barebones.bbedit "EditorTailMode_Log File" -bool NO

  • The Find and Multi-File Search windows get a button for exchanging the contents of the "Find" and "Replace" fields. By default, you can use Control-shift-F in the window as well, and this is configurable in the "Menus & Shortcuts" preferences.

  • The Find, Multi-File Search, and Pattern Playground windows get an additional cheat sheet for the "Replace" field. This provides a quick reference for constructing Grep replacement patterns.

  • Additions/changes in the Find Differences dialog:

    • When choosing a file or folder, the file panel has a "Show hidden items" option (behind the "Options" button). You can use this to choose dotfolders or dotfiles more easily.

    • In the "Folder Comparison" tab, "Compare hidden folders" replaces "Skip (...) folders". The new option instructs BBEdit to examine the contents of dotfolders when doing a folder comparison.

    The bbdiff tool gains a --compare-hidden-folders option which maps to this option, and the scripting interface gains a compare hidden folders option as well.

  • Added a simple language module for Solidity.

  • Added a command to copy a shell-escaped file path, to the "Copy Path" submenu on the Edit menu, as well as the "Copy Path" contextual submenu for disk browsers and sidebars.

  • Added a new completion symbol type to the language module API: kBBLMSymbolTypeColorSpecification. This is intended for use with generated completions which themselves represent a color specification (such as a CSS color value). If you generate a completion of this type, you may (optionally) set kBBLMCompletionColorSpecColor to an NSColor value, and that will be used to color the badge in the completion list.

  • If you make a selection range that looks like a valid color specification (hex, CSS color name, and various others), and the Colors palette is open, BBEdit will update the color palette with the appropriate color value.

  • When you select a color from the color panel, BBEdit will ask an available language server (if one is engaged for the current source file) to provide an appropriate textual representation of the color. If the server returns multiple representations, BBEdit will present the completion panel so that you can pick one; if only a single answer comes back, BBEdit will insert it.

  • Added finer-grained control over invisibles display: it is now possible to explicitly turn on (or off) display of spaces and line endings when "Show Invisibles" is enabled. The Editor Defaults preferences, Text Options sheet, Text Options panel, and Text Display submenu of the View menu are updated accordingly. The additional settings are available via the scripting interface, as well as via EditorConfig and Emacs mode-line variables (x-show-tabs/x-show-line-breaks).

  • Added settings to the "Editing" preferences to specify alternative characters for Show Invisibles, for tabs and for line breaks. The arrows next to the respective edit fields will open the macOS character panel. There are some restrictions; you can't use letters and numbers, for example, nor can you use whitespace or line breaks. You should use punctuation, since that is generally more readable. If you try something and it doesn't work, try something else.

    The factory defaults are "" (U+2206, "INCREMENT" option-J on US keyboards) for tabs, and "¬" (U+00AC, "NOT SIGN", option-L on US keyboards) for line breaks.

  • Some Windows editors (including cross-platform editors that got their start on Windows, not that we're naming names) allow Cut or Copy to cut/copy the entire line containing the insertion point, in situations where there is no selection at the time you choose the command.

    In order to make life easier for platform refugees, BBEdit allows this behavior by turning on the "Cut/Copy entire line for insertion point" setting in the Editing preferences. It's off by default, because standard macOS behavior is to only enable Cut or Copy when there is actually a selection.

  • Added alternate (option-key) menu items for the Tidy "Clean Document", "Reflow Document", and "Check Accessibility" commands. Using the alternates will run the commands using the previously selected options (or factory defaults, if used for the first time).

  • Added a support folders property to the application object in the AppleScript interface. This returns a record of user parameter pairs, keyed by the folder's name (e.g. "Clippings"), each value being a file URL to the folder. Note that this does not guarantee that any given folder exists.

  • Added two new filter terms for file/folder filters: "Any Path Component" and "Every Path Component". These can be used to test any (or every) component of the file or filter's path using any of the available string tests.

  • Added an option to Zap Gremlins (UI, text factory, and AppleScript): "Convert fullwidth forms". This converts Unicode fullwidth forms (U+FF01 through U+FF5E, inclusive) to their ASCII equivalents.

  • When using any of the Subversion working-copy commands (Show Working Copy Status, Commit Working Copy, Update Working Copy), you can (if you wish) limit the recent menu to only working copy roots (i.e. directories which themselves have an .svn directory). Use the following expert preference to do so:

    defaults write com.barebones.bbedit SubversionChooseWorkingCopy_HideSubdirectories -bool YES

  • Added "Replace Tiled Window" to the Window menu when running on macOS 12 and later.

Back to top


  • The "Editor Defaults" preference pane gets an advisory notice explaining the behavior of the settings; namely, that they establish the defaults for new documents (and for documents that don't have saved settings), and that changes to the settings in the preferences pane don't affect currently open documents.

  • The "Text Options" command now opens the popover attached to the "gear" in the navigation bar, if the navigation bar is visible (and the "Text Options" item is enabled). The old sheet is still used, but will only appear if the popover is not available.

  • Tweaked layout in the Commands panel to fill up the window space a little bit more.

  • The Unix Script Output log, as well as file-specific log files resulting from "#!" script execution, are now autosaved, so there is no need to save any changes to those logs before closing them.

  • Locating the PreferenceData folder in Dropbox or iCloud Drive is no longer supported. (It was never really a good idea, but BBEdit used to allow it.) If BBEdit detects such a folder when starting up, it will copy the folder's contents to the appropriate local location, and use the latter going forward.

  • Made changes to improve the performance of "Open File by Name" when the data source is a directory of significant size (such as a disk browser or instaproject). The first search can still require significant time; but changes in the directory which affect the search results will no longer require the entire cache to be discarded, improving subsequent performance.

  • When cancelling a multi-file search/replace operation in progress, BBEdit will immediately cease collecting any accumulated results. This improves behavior when a search/replace operation generates a large quantity of results very quickly.

  • When generating "smart" quotes while typing or auto-pairing, BBEdit will follow the settings for quote characters in the "Keyboard" system preferences.

  • Made a change to significantly improve performance when soft-wrapping long documents to the window width. (The improvement is only available when a fixed-width font is in use.)

    There are some limitations: the math doesn't work for single characters which break the fixed-width font contract and render at twice their width (i.e. most CJKV characters and emoji).

  • Made a change so that Grep pattern matching considers surrogate pairs as a single character. This improves correctness when using \p{...} for classes of characters which may include combining surrogate pairs.

    If for some reason the previous behavior is desirable, you can restore it by using the following expert preference command:

    defaults write com.barebones.bbedit DisablePCREUTFMatching -bool YES

  • composer.json is recognized as a file which defines a workspace root (for LSP purposes).

  • Allow system-generated icons for declared file types which BBEdit can edit (but for which it does not have a unique icon type).

  • Added a distinctive icon for notebooks.

  • Made some structural changes to how BBEdit supplies document icons to macOS, taking advantage of updated support in the OS itself.

  • When navigating placeholders ("(<#...#>)") using the Tab key or the commands on the Go menu, BBEdit will ignore anything that looks like a placeholder in which the delimiters are separated by more than a single line break. If you prefer the previous behavior, you can restore it using this Terminal command:

    defaults write com.barebones.bbedit AllowMultiLinePlaceholders -bool YES

  • Added the vertical bar ("|", U+007C) to the list of characters used as token break points when computing sub-line differences.

  • Changed the order of operations when determining a file's text encoding so that an applicable EditorConfig coding or charset value will override an xattr in the file. This also means that EditorConfig encoding testing (the AllowEditorConfigReadEncoding expert preference) is on by default now.

  • When using EditorConfig to determine a file's encoding (if specified), BBEdit will first check its extended coding value if one is present, before checking the standard charset value.

  • When Auto-Indent is turned on, "New Line Before Paragraph" and "New Line After Paragraph" will indent the inserted line by the same indentation as the line on which the command was invoked.

  • If you try to save changes to a file that was opened from (or moved to) the Trash, BBEdit will alert you so that you know it's about to happen.

  • Added settings to the "Preview" preferences (previously "Preview Helpers") to control Markdown conversion to HTML for previews and export. (These settings have been available for some time as language-specific Markdown settings; this change makes them more discoverable.)

  • Removed the vertical grid lines from the "Preview Helpers" browser list.

  • When opening a worksheet without a saved working directory, BBEdit will set the working directory in the worksheet's shell to the directory containing the worksheet (or, if appropriate, the directory containing the project document in which the worksheet is embedded).

Back to top


  • Made a change so that BBEdit only requests the current shell login environment once, the first time it's needed. This improves performance when doing anything within BBEdit that involves running a Unix script or command.

  • Made a change so that shell worksheets will use zsh if fish is your default shell. (Fish can't be used in shell worksheets.)

  • Reworked the shell worksheet internals to improve efficiency.

  • Made a change to improve the performance of code for certain clients which involves repeatedly scanning a directory to enumerate its contents.

  • Fixed crash which would occur when a system appearance change occurred after having used and closed a source control form window or a "Show Documentation" output window.

  • Improved the accuracy of guessing Objective-C variations in C/C++ source and header files.

  • Updated PCRE to 10.40.

  • Fixed bug in which placeholder text that should have shown up in the simple entry field sheet's text box did not appear.

  • Made some internal changes to reuse existing code and improve performance.

  • Fixed bug in which Open File by Name would make inappropriate git-ignore requests, which would cause git to report a fatal error and exit, subsequently breaking git-ignore filtering in the Open File by Name window and possibly elsewhere.

  • Fixed a thread-safety issue in the FTP (not SFTP) client code which might be responsible for sporadically reported stalls at the end of file upload transfers.

  • Make sure that the title of a Preview in BBEdit window keeps up when the name of the document changes.

  • Added a note about language servers to the Read Me.txt in the application support folder.

  • Updated the default worksheet stationery to correct some anachronisms.

  • Corrected the math used for calculating the line number column width when printing, and guarantee a minimum of four digits worth of space, so that no change in column width will take place until the next power of ten (10,000).

  • Made a change to slightly improve startup performance when recovering a very large number of autosaved documents.

  • The HTML5 syntax checker will no longer inappropriately report autocomplete as an invalid attribute for <textarea>.

  • Made the character inspector behave a little better with rectangular selections.

  • Fixed various bugs in string and comment scanning in codeless language modules that used literal delimiters (as opposed to grep patterns).

  • Fixed bug in which a language server log file would not get created if the language had a slash in its display name.

  • Removed a conflict-named "URL" property from the FTP Info AppleScript record (the document's URL property has the same value in it, if it was opened via the built-in FTP/SFTP support.

  • Aliases/symlinks to folders are no longer eligible to be twisted open in disk browsers and project windows. This prevents confusion and madness when browsing directories in which symlinks are used to create loops in the directory graph.

  • When evaluating whether a file about to be opened into a project's sidebar is in a project directory, the process now guards against loops in the directory graph created (intentionally or otherwise) by the use of symlinks or aliases.

  • Improved completion behavior compatibility with language servers which don't comply with the published specification. (glares at the TypeScript language module).

  • Fixed bug in which specifying an end-of-line character offset in Go to Line Number would not move the insertion point to the requested location.

  • Fixed crash which would occur when trying to open a legacy BBEdit plug-in.

  • Fixed bug in which question marks in Ruby source files were inappropriately colored using the number coloring in certain situations.

  • Corrected the badging of Ruby class definitions in the function menu.

  • Made a change so that line breaks are no longer escaped when using "Use Selection for Find (grep)". This avoids semantic changes in multi-line patterns which use (?x).

  • Fixed bug in restoration of a previously used "Preview in BBEdit" window position, in cases where it was on a different screen than the default position.

  • Fixed bug in which an assigned keyboard equivalent for "Open Text Options" in the Navigation Bar shortcuts didn't actually do anything.

  • When syntax checking HTML5 documents, unencoded ampersands are now allowed, provided they're not "ambiguous" (which is a term defined by the standard).

  • Fixed a bug in which hiding items in results lists (such as warnings) would cause the vertical scrollbar to be miscalibrated when subsequently expanding and closing top-level items.

  • Made a change to slightly improve performance when changing display settings for very large results lists (specifically, turning on/off the "Errors", "Warnings", and/or "Notes").

  • Fixed bug in which choosing a saved pattern in the Find window did not update the live match display.

  • Added search terms to the "Editing" preferences pane so that the "Collapse folds below level" option is discoverable via the search box.

  • Fixed elusive crash which would occur when clicking in the text area of a document being closed immediately after dismissing the "Do you want to save changes" alert sheet.

  • Fixed bug in which using "Cut & Append" or "Copy & Append" would update the Clipboard window with the appended text, rather than the complete contents of the current clipboard (which were correct despite the display).

  • Fixed crash which would occur when ingesting a .paths file with home-relative paths in it.

  • Fixed crash which would occur when changing a display option (such as "Show Tab Stops") via the View => Text Display menu when the window also included an image document.

  • Fixed bug in which escaped newlines in some situations would confuse the Python function scanner.

  • Corrected layout of items in the printing panel addition.

  • Fixed bug in which items in the "Preview Helpers" browser list were editable. (Editing them accomplished nothing.)

  • Made "Copy Path" and friends in disk browser windows do something useful for items inside of Zip archives.

  • Fixed memory leak when using the Tidy commands which brought up sheets.

  • Made some changes to significantly improve performance in the HTML parser, which in turn improves performance when loading extremely large HTML and XML files (and scanning for functions/folds in such files).

  • Made some refinements to the strategy that Open File by Name uses to figure out where to look for files, so that it's a able to make a better educated guess.

  • Fixed bug in which making a case-only change to the name of an open document would fail to update the UI correctly, and would potentially lead to misbehavior if a document was subsequently created or opened from the same location with the old name (e.g. after deleting the renamed file).

  • Fixed bug in which Text Factory windows with enough items to scroll would sporadically display the wrong selection in the popup menu button (even though the backing data was correct and the factory would work as intended).

  • Fixed bug in which changes to menu key equivalents in the Menus & Shortcuts preferences weren't reflected in the "Commands" command until after the application had been quit and relaunched.

  • Made the keyboard equivalent column in the "Commands" window a little wider, to accommodate equivalents with a lot of modifiers.

  • When relaunching the application after installing a package, do so in a fashion which doesn't cause a new instance to appear in the Dock.

  • Pressing return or enter in the "Run Unix Command" panel will now dismiss the panel and run the command text, rather than simply taking keyboard focus off the edit box. (As before, you can use Option-return or Option-enter to enter a line break in the command text.)

  • Improved behavior when attempting to use a defective font (bad line height, and/or bad advancement metrics). In these cases, BBEdit will fall back to an appropriate system default font, based on whether the requested font was fixed-pitch or proportional.

  • Fixed bug in which right-clicking on a non-selected item and choosing Quick Look from the contextual menu would result in the first selected item being displayed in Quick Look.

  • Fixed bug in AppleScript access to project collections by index, in which non-collection items were included in the index calculations.

  • When requesting project items from the scripting interface, if you require an object reference to the item, rather than the "best" representation (which might be a URL), use "as reference".

  • Fixed bug in which closing a window containing multiple documents would ask to confirm changes an "untitled project", if any of the documents in the window had been moved or deleted.

  • MySQL doesn't explicitly forbid string literals to cross line boundaries, so MySQL syntax coloring will no longer end string literal coloring at the first line break.

Back to top