BBEdit 9.6 Release Notes

This page documents all feature enhancements and bug fixes included in the BBEdit 9.6 update.

For details on all the new features and enhancements offered since BBEdit 9.0, please see its release notes.

For information on changes made in previous versions, please see the release notes archive.

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


BBEdit 9.6 requires Mac OS X 10.5 or later (10.5.8 or later recommended).

This version is a Universal application: it runs natively on both Intel-based and PowerPC-based Macs.


  • A syntax table is now in place for HTML5, so that Check Syntax, Tag Maker, and Edit Tag should now behave reasonably on HTML5 documents.

  • The Translate command (Markup -> Utilities) has been split into two: "Translate Text to HTML" and "Translate HTML to Text". Each command's dialog is simpler than the previous combined one, and the split affords the ability to assign distinct keyboard equivalents. Also, the options dialogs are now run as sheets.

  • BBEdit now supports directory-specific settings. To use these, write a well-formed INI file, whose keys and values are the same format as those in ~/.bbedit. The file may be named anything, as long as its name ends in ".bbeditSettings". The settings specified in that file will override all others and will apply to any file that is opened from the same directory as the settings file, as well as any file opened from a subdirectory of the settings file. So, given this arrangement of files:


    Any settings specified in Foobar.bbeditSettings will apply to mumble.c, as well as all of the files in misc, but not to super.h.

  • You can now put Automator workflows into ~/Library/Application Support/BBEdit/Scripts/, and they will appear on the Scripts menu (and in the Scripts palette).

  • There's a new option in the bbedit command-line tool: --project. Invoking the tool with this option will create a new synthetic project ("instaproject") containing all of the specified files. The project's name is derived from $CWD as of when the tool was invoked. Some examples:

    # create an instaproject containing /usr/local/bin and /usr/bin
    bbedit --project /usr/local/bin /usr/bin

    # create an instaproject containing Apache's httpd.conf and /etc/passwd:
    cd /etc;bbedit --project apache2/httpd.conf passwd

    In the special case of a single item being specified, the project's root is the item (if it was a directory) or the item's parent (if it was a file).

  • Iä! Iä! Birdies fhtagn!

  • When writing a #script# clipping expansion, you can now use POSIX-style absolute paths to refer to the script file, as in:

    #script /Users/me/example/folder/Script.scpt#

  • Worksheets created via the bbedit tool (with bbedit --worksheet) inherit CWD from the tool (Hi, Jim!)

  • Tags files in ~/Library/Application/Support/BBEdit/Completion Data/<language name>/ are now allowed to be aliases; this makes it easier to share tag data between C++ and Objective-C++ (for example) without requiring duplication.

  • When editing files that are on remote file servers (AFP, NFS, SMB, etc), BBEdit will no longer look for directory-relative tags files or settings files. This is a particular performance win when the file is located on a volume mounted via MacFUSE/SSH or similar, or if the file server is over a slow or high-latency link.

    To re-enable scanning for tags or settings files, use these separately or together:

    defaults write com.barebones.bbedit Misc:DisableCtagsScanOnRemoteVolumes -bool NO

    defaults write com.barebones.bbedit Misc:DisableSettingsScanOnRemoteVolumes -bool NO

  • If you Select All in a Find Differences results window, the Apply buttons will then copy the entire document in the indicated direction. (Note that it is not currently possible to selectively apply a subset of more than one diff - you can apply one, or all, and nothing in between.)

  • The HTML/XML syntax checker now reports duplicate attribute names as errors.

  • When opening a CSS file, the character set specified in the @charset rule (if present) is used to interpret the document's encoding.

  • Completions for HTML/XHTML documents are now generated contextually for tags and attributes, based on the doctype currently in use.

  • Substantially beefed up coloring of CSS properties.

  • Improved completion for CSS properties; in most cases it is no longer necessary to start by typing the vendor prefix. Also, completions include a colon and placeholder.


  • The application has undergone extensive internal rework, in order to improve performance, remove some longstanding limitations, and pave the way for new features. By and large, the internal changes should be invisible, but the following top-level changes deserve mention:

    • Support for BBXT plug-ins has been removed. This means that the "Plug-Ins" window is gone from the Palettes menu, the plug-in summaries are gone from the About box, and the Tools menu is gone (if you didn't see it before, you won't notice any difference). If you drop a BBXT plug-in on the application, you'll get an alert to the effect that plug-ins aren't supported.

    • Automatic import of pre-8.0 format Grep pattern data is no longer supported. (If you have such a file, please write to support for assistance.)

    • It is now possible to open files significantly larger than before; the ceiling isn't unlimited, but it is no longer limited by the previously extant constraints in the OS.

    • The following large-scale text transformations are significantly faster and/or require less transient memory:

      • Multi-file search (and replace)
      • single-file Find All
      • Process Lines Containing
      • Sort Lines
      • Process Duplicate lines
      • Prefix/Suffix Lines
  • The "New Document" dialog has been updated so that it's now possible to create documents using HTML5.

  • The options for the markup formatter (Markup -> Utilities -> Format) have been renamed: "Gentle Hierarchical" is now "Pretty Print", and "Hierarchical" is now "Strict Hierarchical". This is closer to the actual intended use of each. In addition, the ordering of the options has been changed, so that "Pretty Print" is at the top of the list. (By default, it's a better choice for pretty-printing code than Strict Hierarchical.)

  • For text documents whose size exceeds a certain threshold (expressed in bytes, factory default 1MB), BBEdit will ignore the Soft Wrap Text preference and leave wrapping off in order to improve the performance of opening very large files. The threshold may be adjusted if desired:

    defaults write com.barebones.bbedit Editor:SoftWrapLengthThreshold -int 1048576

    If you set the limit to zero, BBEdit will always honor the Soft Wrap Text preference, even in situations where soft-wrapping a large file may cause it to take a very long time to open.

  • Since "Find All Misspelled Words" is pretty much pointless on files over a certain size, the maximum amount of text checked by this command is now limited to 1M (1024 squared) characters. This may be adjusted with an expert preference:

    defaults write com.barebones.bbedit Editor:SpellCheckLengthLimit -int NN

    where "NN" is some decimal value. Use -int 0 to suppress the limit check altogether.

  • The ponies are fully geared and anxiously awaiting the release of Cataclysm.

  • The "When generating markup in unspecified documents" preference has been removed from the "HTML Markup" preferences. It was confusing, and a consistent set of rules is now in place: If the document does not have an explicit DOCTYPE declaration, BBEdit will treat it as XML when appropriate if its content looks like XML (or XHTML), and like HTML otherwise. If it can't determine, BBEdit will use the document's language setting to decide.

  • The PageMill, GoLive, and Claris HomePage code cleaners have been removed from the markup tools and scripting interface.

  • The "Misc" menu on the Markup menu, and the commands on it, have outlived their usefulness and been removed.

  • The modal dialogs for Document Type and Character Set markup generation are gone; instead, simply choose the desired doctype or character set from the appropriate submenu on the Markup menu.

  • The "Don't Process" (or equivalent) buttons have been removed from the following commands' dialog boxes:

    • Add/Remove Line Numbers
    • Change Case
    • Find and Mark All
    • Hard Wrap
    • Hex Dump
    • Prefix/Suffix Lines
    • Process Duplicate Lines
    • Process Lines Containing
    • Rewrap Quoted Text
    • Sort Lines
    • Zap Gremlins
  • Adjusted the terminology and keyboard equivalents in the Add/Remove Line Numbers sheet to be a little more consistent with expectations.

  • Markup -> Inline -> Convert to Client Side Map has been consigned to the dustbin of history (like the NCSA image map format was, long ago).

  • The "Pretty print" option for Markup -> Utilities -> Format is now implemented internally using a Dreamweaver-style source format profile. This affords slightly prettier output than was possible before. Advanced users can override the factory format profile by placing an appropriately constructed file at ~/Library/Application Support/BBEdit/SourceFormat.profile.

  • The markup tools with file panels (Anchor, Image, and many many others) now run the file panels window-modal (as sheets), rather than application-modal.

  • The internal representation of the tables used by the HTML/XHTML syntax checker has been radically reworked. In general this should not be user-visible, but it paves the way for future enhancements.

  • The software update checker will provide notifications when the machine has been idle for 30 minutes, in addition to at launch and after manual check.

  • The "New HTML Document" dialog now shows the globally available templates in ~/Library/Application Support/BBEdit/HTML Templates/ as well as any templates available for the selected web site configuration.

  • When opening a document into anything other than an editing window (or project window), saved split state is no longer restored.

  • When creating results windows from the scripting interface, the name is no longer mandatory -- if absent, the application will generate one.

  • When creating results windows from the scripting interface, the application will use narrow list items if none of the results items have a "message" or "match_string" property.

  • When creating results windows from the scripting interface, the "result_kind" may be omitted from the item records; if absent the kind is assumed to be "note_kind".

  • When you are backspacing with an insertion point, BBEdit will delete a tab stop's worth of spaces if there are only spaces (and tabs) between the insertion point and the start of the line on which you're editing. This may be disabled by an expert preference if desired:

    defaults write com.barebones.bbedit Editor:DeleteIndentationWhitespaceToTabStop -bool NO

  • The HTML/XML attribute value checker will no longer report entity-encoding errors for values that look like they might be dynamically generated, for example:

    <input type="hidden" name="TotalCost" value="<?php echo $TotalCost ?>">

  • Holding down the Shift key when starting the application no longer suppresses the #! menu.

  • If a hierarchical results list entry is collapsed, and one or more children are error entries, the collapsed entry text is drawn in red.

  • When doing Check Syntax, Check Links, Update, or Update Images on a folder (including a web site), BBEdit will now skip XML files. If you prefer the previous behavior:

    defaults write com.barebones.bbedit MarkupToolsMisc:SkipXMLFilesWhenScanningFolders -bool NO

  • The "Use Unicode line breaks" preference and document settings have been consigned to the dustbin of history.

  • If a document has an explicit encoding declaration, but the declared encoding doesn't map to anything known, you'll get an alert when saving. (The document will be saved in whatever encoding is displayed in the status area at the bottom of the window.)


  • The application now allows any event in while a script is running. This prevents blockages in certain cases where a scripted action ended up sending certain events back to BBEdit.

  • Open Counterpart now checks for eligible files in the open document's directory first, before asking Xcode; because it's faster.

  • The Remove Markup command is available regardless of whether the front document has a selection.

  • Fixed bug in which tags files located at / were not detected.

  • Fixed drawing glitches which would occur when using Quick Find after having toggled "Show Navigation Bar" for a particular window.

  • Fixed bug in which the font panel had a tab width setting in it when invoked from the printing sheet. (The tab width isn't settable from the print sheet, so any changes to the setting appeared to be ignored.)

  • Fixed bug in which Un/Comment didn't work for languages specified by a codeless language module. Absent an explicit preference, BBEdit will now prefer the "Block Comment Start" and "Block Comment End" delimiters, but if those are not specified, it will use "Line Comment Start" for commenting.

  • Fixed bug in which files who falsely claimed to be zip files (according to their metadata) would trigger an attempt to open a Zip file browser, when they should have just been opened as text files.

  • Fixed bug in which recent folders deleted from the old-school Find dialog weren't actually deleted, so they remained in the Open Recent menu and reappeared in the search sources list the next time the dialog came up.

  • Fixed bug in which Command-down-arrow had no effect when used on a selected folder symlink in the FTP save panel.

  • Fixed bug in which Perforce interaction to unlock using the pencil was not allowed if the file in question was located on a remote file server (e.g. NFS).

  • Fixed bug in which "Use Selection for Find" and "Use Selection for Replace" were enabled when the Find or Multi-File Search window was in front, but the target window didn't have a selection. In that case, choosing the command would cause confusion by clearing the corresponding field in the Find/MFS window.

  • "New Text Document" and "New Folder" are now enabled in project windows when a collapsed top-level folder is selected, and the enclosing folder will be expanded as necessary to reveal the newly created item.

  • Fixed bug in which "Reveal in Project List" didn't work for items which appeared exclusively inside of collections.

  • Fixed bug in which "Reveal in Project" would cause a crash in certain circumstances.

  • Fixed bug in which the Software Update first run alert didn't set the preference correctly, so clicking "Don't Allow" didn't shut off automatic update checking, as desired.

  • Made a change to reduce the transient memory requirements for multi-file search/replace (and single-file "Find All") and Text Factory operations performed on open documents.

  • Automatic word counting is disabled for documents over a set size threshold, in order to avoid needless delays when working on very large documents. The factory default is 16M characters; this may be adjusted as desired, using an expert preference:

    defaults write com.barebones.bbedit Editor:AutoWordCountSizeThreshold -int 16777216

    The limit is expressed in characters. Setting it to zero disables the limit check entirely.

  • If you are comparing two files, and one (or both) of them changes on disk, the Differences are recomputed with no user intervention necessary.

  • "Show Working Copy Status" for svn will no longer include switched items. If this affects you and you want the old behavior back, it is available with an expert pref:

    defaults write com.barebones.bbedit Misc:ShowSVNSwitchedItems -bool YES

  • Fixed bug in which the closing tag was not correctly colored in HTML documents with CSS embedded in a <style> tag.

  • When running scripts from the HTML includes processor, we now pass the document's file through as typeFileURL instead of typeFSS, to work around Radar 7500587.

  • Fixed suspected cause of a crash triggered by spell checking.

  • While spell-checking, the underscore (_) is treated as a word break, which corrects several unexpected behaviors when trying to learn or ignore "words" containing underscores.

  • The "Open File in BBEdit" service now works correctly when given a path beginning with "~/".

  • Zap Gremlins is now much faster when invoked from the menu, most noticeable on large files.

  • The code which decides whether to save state for temporary files now uses a wildcard to match svn commit files, so if the file is named "svn-commit.352.tmp" (or some similar) its state will not be saved.

  • The list of saved search sets is now sorted in the multi-file search sources drawer.

  • Fixed bug in which the test for finding the closing </script> tag was case-sensitive for syntax coloring in HTML documents, so if you used uppercase tags, the coloring was incorrect for the closing tag and everything after it.

  • The HTML syntax checker offers improved attribute value checking for "lang" attributes (and other attributes which require a canonical language specifier).

  • The HTML syntax checker offers improved attribute value checking for "charset" attributes (and other attributes which require an IANA character set name).

  • Attribute value checking is improved for attributes which are themselves lists of values delimited by a space or comma.

  • Added text descriptions for common FTP engine errors.

  • Fixed bug in which the Recent Folders group in the Multi-File Search window was refreshed every time something got added to the global Recent Items list (even if it wasn't a folder).

  • Fixed bug in which files opened with an event containing a URL specifier couldn't be opened when the item's name contained non-ASCII characters.

  • Fixed bug in which "Open File by Name" (vs. "Open Selection") would not ask Xcode for the file, thus forcing a file search when Xcode could easily have provided the right file.

  • Enhanced the URL detection to recognize URL schemes that are not "well known" but are supported by applications on the system.

  • Fixed edge case which could cause a crash when using the "(current criteria)" in the Find Differences dialog.

  • Fixed bug in which Growl notifications didn't occur after multi-file search or replace when "Show Results" was turned off.

  • Updated to the latest version of the Growl framework, and converted to the Objective-C Growl API; this should eliminate the problem of .growlRegDict temp files being left behind. We recommend that you use Growl 1.2.1 or later; it is available here.

  • Fixed bug in which warnings/errors generated during multi-file operations were not added to interactive results windows.

  • Fixed bug in which creating a new X/HTML document with the "macintosh" character set, and then saving it with Save As, would set the save panel's encoding setting to UTF-8; subsequently attempting to save would report an encoding mismatch.

  • Fixed bug in which a multi-file Find Differences with Flatten Hierarchies turned on would fail to correctly pair files whose names differed only in character case.

  • A document's auto-save data now includes its name, so that when recovering from a crash or application sleep, any customizations to the name are restored.

  • Fixed a bug expanding #FUNCTION# clipping tokens.

  • Fixed a bug where "Find & Mark All" marked the document dirty, instead of the state.

  • Corrected problem where popping a document out of the drawer into a new window would sometimes confuse the Clippings Manager, causing the auto-selected clipping set to be incorrect.

  • Fixed bug in which Emacs control-U prefixing didn't work.

  • Fixed bug in which errors were not properly returned from the Unix Scripting apple event handlers.

  • If the remote server drops the connection, the FTP/SFTP browser will quietly close its end of the connection, and no longer ask you if you want to reconnect.

  • The scripted forms for batch syntax checking, folder/site updates, and folder/site image updates now behave consistently: results are always returned, and "show results" is always assumed to be FALSE if absent.

  • Fixed bug in which certain Emacs keystrokes didn't work in the Find or Multi-file Search windows.

  • Fixed crash in bbfind which would occur when no search paths were specified on the command line, and an empty line was entered in stdin.

  • Fixed bug in which the check box settings in the "Script" markup dialog were not remembered as they should have been.

  • Fixed bug in which you'd get stuck with a -4960 alert when trying to create a new FTP bookmark, and the FTP Bookmarks.xml file didn't exist in your prefs data.

  • The "Replace", "Replace All", and "Replace & Find" buttons in the Find window are now disabled when the Clipboard is the search target.

  • Adjusted default line comment prefixes for non-MySQL SQL variants

  • Single quotes are now recognized as URL delimiters (even though they're technically allowed to appear in URLs, they rarely do in actual use).

  • URL resolution via command-click or the "Open URL" contextual menu item has been adjusted to scan less text. This improves performance and memory usage when using the command near the end of a very large document.

  • Fixed bug in which saving changes to the factory named in the "Apply (last) Text Factory" menu command would cause a -4960 error to be reported on subsequent attempts to invoke it.

  • Made a performance improvement to the Open Recent subsystem which will be noticeable when opening or closing a document and there are a lot of recent items that are on non-local file systems.

  • In certain rare situations, clippings insertion would leave a placeholder behind. (This would occur when the text contained something that looked like a placeholder closer "#>" but wasn't. This no longer occurs.

  • When populating the Open Recent menu, the application avoids banging the file system for items that are located on remote volumes. (If you choose a recent item that's on a remote volume, BBEdit still needs to resolve it, so you'll take the hit then.)

  • Added the keyword date to the SQL (PostgreSQL) language module.

  • The bbedit command-line tool will report (to stderr) any explicit error message returned by the application; if none is available it will report the item you were trying to open and the error code that was returned.

  • Fixed a problem in the Markdown language module which sometimes prevented nested lists from being correctly syntax colored and folded.

  • Fixed one cause of incorrect syntax coloring on list item markers in Markdown files.

  • fixed a bug in Markdown support which prevented code blocks from being recognized correctly.

  • Fixed bug in which project lists would end up scrolling back to the top when refreshing after detecting a file or folder change on disk.

  • Fixed crash which would occur when sending certain badly formed URL requests from the bbedit command-line tool.

  • Creating a new XHTML 1.1 document now specifies the correct content type in the <meta http-equiv="content-type"...> element.

  • Changing the text encoding of an XHTML 1.1 document now correctly rewrites its <meta ...> with the appropriate content type.

  • Fixed bug in which dragging text to an empty text field in the Find or Multi-File Search window would cause it to be syntax colored according to the original window's language setting, and not use Grep coloring when it should.

  • When using ctl-S or ctl-R to trigger a live search, keyboard focus will end up in the Live Search field.

  • The markup syntax checker no longer reports errors on correctly formed "id" attribute values in XML/XHTML.

  • Fixed bug in which errors encountered when trying to save a file at the end of a multi-file Replace All or text factory operation were not reported, and the document's contents on display were not updated.

  • Added the Xcode config (.xcconfig) file UTI to our internal test for "is a text file".

  • Fixed bug in which completions were not grouped by kind as they should have been.

  • The PHP function scanner now allows anonymous functions.