diff --git a/resources/sql/autopatches/20170418.1.application.01.xaction.sql b/resources/sql/autopatches/20170418.1.application.01.xaction.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20170418.1.application.01.xaction.sql
@@ -0,0 +1,19 @@
+CREATE TABLE {$NAMESPACE}_application.application_applicationtransaction (
+  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+  phid VARBINARY(64) NOT NULL,
+  authorPHID VARBINARY(64) NOT NULL,
+  objectPHID VARBINARY(64) NOT NULL,
+  viewPolicy VARBINARY(64) NOT NULL,
+  editPolicy VARBINARY(64) NOT NULL,
+  commentPHID VARBINARY(64) DEFAULT NULL,
+  commentVersion INT UNSIGNED NOT NULL,
+  transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL,
+  oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL,
+  newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL,
+  contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL,
+  metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL,
+  dateCreated INT UNSIGNED NOT NULL,
+  dateModified INT UNSIGNED NOT NULL,
+  UNIQUE KEY `key_phid` (`phid`),
+  KEY `key_object` (`objectPHID`)
+) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20170418.1.application.02.edge.sql b/resources/sql/autopatches/20170418.1.application.02.edge.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20170418.1.application.02.edge.sql
@@ -0,0 +1,16 @@
+CREATE TABLE {$NAMESPACE}_application.edge (
+  src VARBINARY(64) NOT NULL,
+  type INT UNSIGNED NOT NULL,
+  dst VARBINARY(64) NOT NULL,
+  dateCreated INT UNSIGNED NOT NULL,
+  seq INT UNSIGNED NOT NULL,
+  dataID INT UNSIGNED,
+  PRIMARY KEY (src, type, dst),
+  KEY `src` (src, type, dateCreated, seq),
+  UNIQUE KEY `key_dst` (dst, type, src)
+) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+
+CREATE TABLE {$NAMESPACE}_application.edgedata (
+  id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}
+) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -10,7 +10,9 @@
  */
 abstract class PhabricatorApplication
   extends Phobject
-  implements PhabricatorPolicyInterface {
+  implements
+    PhabricatorPolicyInterface,
+    PhabricatorApplicationTransactionInterface {
 
   const GROUP_CORE            = 'core';
   const GROUP_UTILITIES       = 'util';
@@ -613,4 +615,25 @@
     );
   }
 
+/* -(  PhabricatorApplicationTransactionInterface  )------------------------- */
+
+
+  public function getApplicationTransactionEditor() {
+    return new PhabricatorApplicationEditor();
+  }
+
+  public function getApplicationTransactionObject() {
+    return $this;
+  }
+
+  public function getApplicationTransactionTemplate() {
+    return new PhabricatorApplicationApplicationTransaction();
+  }
+
+  public function willRenderTimeline(
+    PhabricatorApplicationTransactionView $timeline,
+    AphrontRequest $request) {
+
+    return $timeline;
+  }
 }
diff --git a/src/applications/meta/query/PhabricatorApplicationApplicationTransactionQuery.php b/src/applications/meta/query/PhabricatorApplicationApplicationTransactionQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/meta/query/PhabricatorApplicationApplicationTransactionQuery.php
@@ -0,0 +1,10 @@
+<?php
+
+final class PhabricatorApplicationApplicationTransactionQuery
+  extends PhabricatorApplicationTransactionQuery {
+
+  public function getTemplateApplicationTransaction() {
+    return new PhabricatorApplicationApplicationTransaction();
+  }
+
+}
diff --git a/src/applications/meta/storage/PhabricatorApplicationApplicationTransactionComment.php b/src/applications/meta/storage/PhabricatorApplicationApplicationTransactionComment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/meta/storage/PhabricatorApplicationApplicationTransactionComment.php
@@ -0,0 +1,10 @@
+<?php
+
+final class PhabricatorApplicationApplicationTransactionComment
+  extends PhabricatorApplicationTransactionComment {
+
+  public function getApplicationTransactionObject() {
+    return new PhabricatorApplicationApplicationTransaction();
+  }
+
+}
diff --git a/src/applications/meta/xactions/PhabricatorApplicationApplicationTransaction.php b/src/applications/meta/xactions/PhabricatorApplicationApplicationTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/meta/xactions/PhabricatorApplicationApplicationTransaction.php
@@ -0,0 +1,22 @@
+<?php
+
+final class PhabricatorApplicationApplicationTransaction
+  extends PhabricatorModularTransaction {
+
+  public function getApplicationName() {
+    return 'application';
+  }
+
+  public function getApplicationTransactionType() {
+    return PhabricatorApplicationApplicationPHIDType::TYPECONST;
+  }
+
+  public function getApplicationTransactionCommentObject() {
+  return new PhabricatorApplicationTransactionComment();
+  }
+
+  public function getBaseTransactionClass() {
+    return 'PhabricatorApplicationTransactionType';
+  }
+
+}
diff --git a/src/applications/meta/xactions/PhabricatorApplicationTransactionType.php b/src/applications/meta/xactions/PhabricatorApplicationTransactionType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/meta/xactions/PhabricatorApplicationTransactionType.php
@@ -0,0 +1,4 @@
+<?php
+
+abstract class PhabricatorApplicationTransactionType
+  extends PhabricatorModularTransactionType {}
diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
--- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
+++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
@@ -112,6 +112,7 @@
       'db.phurl' => array(),
       'db.badges' => array(),
       'db.packages' => array(),
+      'db.application' => array(),
       '0000.legacy.sql' => array(
         'legacy' => 0,
       ),