diff --git a/contrib/installers/macosx/build-mpkg.sh b/contrib/installers/macosx/build-mpkg.sh
new file mode 100755
index 0000000000000000000000000000000000000000..903824160b09076c43d2054110810872a2cf6202
--- /dev/null
+++ b/contrib/installers/macosx/build-mpkg.sh
@@ -0,0 +1,91 @@
+#!/bin/sh
+#
+# Builds RBTools installers for MacOS X.
+#
+# This will build an installer that users can download and use on
+# Snow Leopard and higher.
+#
+# This package ships both Python 2.6 and 2.7 modules, in order to be
+# compatible with any custom or third-party scripts that want to use the
+# API.
+
+PWD=`pwd`
+
+if test ! -e "$PWD/setup.py"; then
+    echo "This must be run from the root of the RBTools tree." >&2
+    exit 1
+fi
+
+PACKAGE_NAME=RBTools
+IDENTIFIER=org.reviewboard.rbtools
+
+# Figure out the version of the package.
+VERSION=`python -c 'import rbtools; print rbtools.get_package_version()'`
+
+DATA_SRC=contrib/installers/macosx
+RESOURCES_SRC=$DATA_SRC/resources
+PKG_BASE=$PWD/build/osx-pkg
+PKG_DEPS=$PKG_BASE/deps
+PKG_BUILD=$PKG_BASE/build
+PKG_SRC=$PKG_BASE/src
+PKG_RESOURCES=$PKG_BASE/resources
+PKG_DEST=$PWD/dist
+
+# Note that we want explicit paths so that we don't use the version in a
+# virtualenv. For consistency and safety, we'll just do the same for all
+# executables.
+PYTHON_26=/usr/bin/python2.6
+PYTHON_27=/usr/bin/python2.7
+EASY_INSTALL_26=/usr/bin/easy_install-2.6
+TIFFUTIL=/usr/bin/tiffutil
+PKGBUILD=/usr/bin/pkgbuild
+PRODUCTBUILD=/usr/bin/productbuild
+RM=/bin/rm
+MKDIR=/bin/mkdir
+CP=/bin/cp
+
+PY_INSTALL_ARGS="--root $PKG_SRC"
+
+# Clean up from any previous builds.
+rm -rf $PKG_BASE
+$MKDIR -p $PKG_SRC $PKG_DEPS $PKG_BUILD $PKG_RESOURCES $PKG_DEST
+
+# Python 2.6 requires the argparse module, so install that first. We don't
+# need this for Python 2.7.
+$EASY_INSTALL_26 -q --editable --always-copy --build-directory $PKG_DEPS argparse
+pushd $PKG_DEPS/argparse
+$PYTHON_26 ./setup.py install $PY_INSTALL_ARGS
+popd
+
+# Note the ordering. We're going to install the Python 2.6 version last,
+# so that `rbt` will point to it. This ensures compatibility with
+# Snow Leopard and higher.
+$PYTHON_27 ./setup.py install $PY_INSTALL_ARGS
+$PYTHON_26 ./setup.py install $PY_INSTALL_ARGS
+
+# Copy any needed resource files, so that productbuild can later get to them.
+$CP $RESOURCES_SRC/* $PKG_RESOURCES
+
+# Generate a background suitable for both Retina and non-Retina use.
+$TIFFUTIL \
+    -cat $RESOURCES_SRC/background.tiff $RESOURCES_SRC/background@2x.tiff \
+    -out $PKG_RESOURCES/background.tiff
+
+# Build the source .pkg. This is an intermediary package that will later be
+# assembled into a shippable package.
+$PKGBUILD \
+    --root $PKG_SRC \
+    --identifier $IDENTIFIER \
+    --version $VERSION \
+    --ownership recommended \
+    $PKG_BUILD/$PACKAGE_NAME.pkg
+
+$CP $DATA_SRC/distribution.xml $PKG_BUILD
+
+# Now build the actual package that we can ship.
+$PRODUCTBUILD \
+    --distribution contrib/installers/macosx/distribution.xml \
+    --resources $PKG_RESOURCES \
+    --package-path $PKG_BUILD \
+    --version $VERSION \
+    $PKG_DEST/$PACKAGE_NAME-$VERSION.pkg
diff --git a/contrib/installers/macosx/distribution.xml b/contrib/installers/macosx/distribution.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bac08182572550f1ea483ee783b9b7087f17e342
--- /dev/null
+++ b/contrib/installers/macosx/distribution.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+
+<installer-gui-script minSpecVersion="1">
+ <title>RBTools</title>
+ <organization>org.reviewboard</organization>
+ <domains enable_localSystem="true"/>
+ <options customize="never" require-scripts="true" rootVolumeOnly="true"/>
+ <allowed-os-versions>
+  <os-version min="10.6"/>
+ </allowed-os-versions>
+
+ <background file="background.tiff" alignment="bottomleft"
+             mime-type="image/tiff"/>
+
+ <!-- Define documents displayed at various steps -->
+ <welcome file="welcome.html" mime-type="text/html"/>
+ <conclusion file="conclusion.html" mime-type="text/html"/>
+
+ <!-- List all component packages -->
+ <pkg-ref id="org.reviewboard.rbtools" version="0" auth="root">
+  rbtools.pkg
+ </pkg-ref>
+
+ <choices-outline>
+  <line choice="org.reviewboard.rbtools"/>
+ </choices-outline>
+
+ <choice id="org.reviewboard.rbtools" visible="false" title="RBTools"
+         description="Command line tools for developers using Review Board"
+         start_selected="true">
+  <pkg-ref id="org.reviewboard.rbtools"/>
+ </choice>
+</installer-gui-script>
diff --git a/contrib/installers/macosx/resources/background.tiff b/contrib/installers/macosx/resources/background.tiff
new file mode 100644
index 0000000000000000000000000000000000000000..d5df0a96d28dfda7be82978d8d67c4f7986de852
Binary files /dev/null and b/contrib/installers/macosx/resources/background.tiff differ
diff --git a/contrib/installers/macosx/resources/background@2x.tiff b/contrib/installers/macosx/resources/background@2x.tiff
new file mode 100644
index 0000000000000000000000000000000000000000..97c2ba2def91e721faac0bb70abefb9ab8563586
Binary files /dev/null and b/contrib/installers/macosx/resources/background@2x.tiff differ
diff --git a/contrib/installers/macosx/resources/conclusion.html b/contrib/installers/macosx/resources/conclusion.html
new file mode 100644
index 0000000000000000000000000000000000000000..8b9bf3d239aae86e84366f86e7460419f752c8cc
--- /dev/null
+++ b/contrib/installers/macosx/resources/conclusion.html
@@ -0,0 +1,24 @@
+<html>
+ <head>
+  <title>You're done!</title>
+  <style>
+    body {
+      font-size: 10pt;
+      font-family: Lucida Grande;
+    }
+
+    h1 {
+      font-size: 12pt;
+    }
+  </style>
+ </head>
+ <body>
+  <h1>You're done!</h1>
+  <p>
+   RBTools has a number of very useful command line tools you should
+   check out. See our
+   <a href="https://www.reviewboard.org/docs/rbtools/">documentation</a>
+   for the whole list, plus repository setup instructions.
+  </p>
+ </body>
+</html>
diff --git a/contrib/installers/macosx/resources/welcome.html b/contrib/installers/macosx/resources/welcome.html
new file mode 100644
index 0000000000000000000000000000000000000000..008d256859545b60530be0d0cad757bb20991b40
--- /dev/null
+++ b/contrib/installers/macosx/resources/welcome.html
@@ -0,0 +1,27 @@
+<html>
+ <head>
+  <title>Welcome to RBTools!</title>
+  <style>
+    body {
+      font-size: 10pt;
+      font-family: Lucida Grande;
+    }
+
+    h1 {
+      font-size: 12pt;
+    }
+  </style>
+ </head>
+ <body>
+  <h1>Hi there!</h1>
+  <p>
+   We know you had many choices when it came to installers, and we thank
+   you for choosing this one.
+  </p>
+  <p>
+   See that "Continue" button below? Press that just a few times, and you'll
+   be all set to post code to your Review Board server.
+  </p>
+  <p>Ready? ... Go!</p>
+ </body>
+</html>
