TextMate is a graphical text editor for OS X 10.8+
Objective-C++ C++ Objective-C Ruby C CSS Other
Latest commit 2c52490 Dec 9, 2016 @sorbits sorbits Disable Xcode data source by default
It can be enabled by setting the ‘enableXcodeDataSource’ defaults key to YES.

The reason it has been disabled is that there is a file browser (crash) issue, and the 3 users who have provided steps to reproduce all mention clicking an Xcode project (though myself and Michael Sheets have been unable to reproduce, following those steps, and I do not think the bug is with the Xcode data source, but it does seem to be a catalyst).




You can download TextMate from here.


You can use the TextMate mailing list or #textmate IRC channel on freenode.net for questions, comments, and bug reports.

You can also contact MacroMates.

Before you submit a bug report please read the writing bug reports instructions.





To bootstrap the build you need to run ./configure (in the root of the source tree). You can set a few (environment) variables read by this script that change the generated build file:

  • builddir — location of built files. Defaults to ~/build/TextMate.
  • identity — for Apple’s codesign. Defaults to ad-hoc signing, which does not use an identity at all.
  • boostdir — location of boost includes. By default it will search various locations including MacPorts and Homebrew.
  • sparsedir — location of sparsehash includes. By default it will search various locations including MacPorts and Homebrew.
  • CC and CXX — C and C++ compiler.

In the simplest case (assuming Homebrew is installed) you would run:

brew install ragel boost multimarkdown hg ninja capnp google-sparsehash libressl
git clone --recursive https://github.com/textmate/textmate.git
cd textmate
./configure && ninja

If you're using MacPorts then instead run this line to install dependencies:

sudo port install ninja ragel boost multimarkdown mercurial sparsehash libressl

Unless you’re using Homebrew then Cap’n Proto must be manually installed. Feel free to submit a PR to update configure.

If port fails with a build error then likely you need to agree (system-wide) to Apple’s Xcode license:

sudo xcodebuild -license


Building TextMate has the following dependencies:

In practice hg (mercurial) is only required for the SCM library’s tests so you can skip this dependency if you don’t mind a failing test.

If you want to avoid the libressl linker warnings about being built for different deployment target then run brew edit libressl and make the following change:

-    system "./configure", *args
+    system "env", "LDFLAGS=-mmacosx-version-min=10.8", "CFLAGS=-mmacosx-version-min=10.8", "./configure", *args

Afterward you must rebuild using: brew reinstall --build-from-source libressl

Building from within TextMate

You should install the Ninja bundle which can be installed via PreferencesBundles.

After this you can press ⌘B to build from within TextMate. In case you haven't already you also need to set up the PATH variable either in PreferencesVariables or ~/.tm_properties so it can find ninja and related tools; an example could be $PATH:/opt/local/bin.

The default target is TextMate/run. This will relaunch TextMate but when called from within TextMate, a dialog will appear before the current instance is killed. As there is full session restore, it is safe to relaunch even with unsaved changes.

If the current file is a test file then the target to build is changed to build the library to which the test belongs (this is done by setting TM_NINJA_TARGET in the .tm_properties file found in the root of the source tree).

Similarly, if the current file belongs to an application target (other than TextMate.app) then TM_NINJA_TARGET is set to build and run this application.

Build Targets

The build system classifies a target either as a library or an application. The latter can either be a bundled or non-bundled application. E.g. mate is non-bundled (just a mate executable) where TextMate.app is a bundled application.

For each output there are a few symbolic targets you can build. While the examples below refer to a specific library or application, they exist for all targets of same type.

For the io library:

ninja io                 # Build the io library and run tests.
ninja io/clean           # Remove the build folder for the io library.
ninja io/headers         # Copy exported headers to $builddir/include.

For the mate (non-bundled) application:

ninja mate               # Build the mate executable.
ninja mate/run           # Build and run the mate executable.
ninja mate/clean         # Remove the build folder for the mate executable.

For the TextMate.app application:

ninja TextMate           # Build and sign TextMate.app.
ninja TextMate/run       # Build, sign, and run TextMate.app.
ninja TextMate/clean     # Remove the build folder for TextMate.app.
ninja TextMate/dsym      # Create a tarball with extracted dSYM files.
ninja TextMate/tbz       # Create a tarball of TextMate.app. Also produce the dsym tarball.
ninja TextMate/deploy    # Push a nightly build. Fails without proper credentials :)

Note that ninja TextMate/clean only cleans the TextMate build folder ($builddir/Applications/TextMate), but all libraries and applications it depends on are not cleaned.

To clean everything run:

ninja -t clean


The source for TextMate is released under the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

TextMate is a trademark of Allan Odgaard.