diff --git a/BUILD b/BUILD
index 89097bb..d903baf 100644
--- a/BUILD
+++ b/BUILD
@@ -5,6 +5,9 @@
     "PLUGIN_DEPS",
     "PLUGIN_TEST_DEPS",
 )
+load("//tools/bzl:genrule2.bzl", "genrule2")
+load("//tools/bzl:js.bzl", "polygerrit_plugin")
+
 
 gerrit_plugin(
     name = "delete-project",
@@ -16,6 +19,28 @@
         "Gerrit-SshModule: com.googlesource.gerrit.plugins.deleteproject.SshModule",
     ],
     resources = glob(["src/main/resources/**/*"]),
+    resource_jars = [":gr-delete-repo-static"],
+)
+
+genrule2(
+    name = "gr-delete-repo-static",
+    srcs = [":gr-delete-repo"],
+    outs = ["gr-delete-repo-static.jar"],
+    cmd = " && ".join([
+        "mkdir $$TMP/static",
+        "cp -r $(locations :gr-delete-repo) $$TMP/static",
+        "cd $$TMP",
+        "zip -Drq $$ROOT/$@ -g .",
+    ]),
+)
+
+polygerrit_plugin(
+    name = "gr-delete-repo",
+    srcs = glob([
+        "gr-delete-repo/*.html",
+        "gr-delete-repo/*.js",
+    ]),
+    app = "plugin.html",
 )
 
 junit_tests(
diff --git a/gr-delete-repo/gr-delete-repo.html b/gr-delete-repo/gr-delete-repo.html
new file mode 100644
index 0000000..c2a4a1b
--- /dev/null
+++ b/gr-delete-repo/gr-delete-repo.html
@@ -0,0 +1,57 @@
+<!--
+Copyright (C) 2018 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<dom-module id="gr-delete-repo">
+  <template>
+    <style include="gr-form-styles"></style>
+    <gr-repo-command
+        title="[[action.label]]"
+        tooltip="[[action.title]]"
+        disabled="[[!action.enabled]]"
+        on-command-tap="_handleCommandTap">
+    </gr-repo-command>
+    <gr-overlay id="deleteRepoOverlay" with-backdrop>
+      <gr-dialog
+          id="deleteRepoDialog"
+          confirm-label="Delete"
+          on-confirm="_handleDeleteRepo"
+          on-cancel="_handleCloseDeleteRepo">
+        <div class="header" slot="header">
+          Are you really sure you want to delete the repo: "[[repoName]]"?
+        </div>
+        <div class="main" slot="main">
+          <div class="gr-form-styles">
+            <div id="form">
+                <section>
+                  <input
+                      type="checkbox"
+                      id="forceDeleteOpenChangesCheckBox">
+                  <label for="forceDeleteOpenChangesCheckBox">Delete repo even if open changes exist?</label>
+                </section>
+                <section>
+                  <input
+                      type="checkbox"
+                      id="preserveGitRepoCheckBox">
+                  <label for="preserveGitRepoCheckBox">Preserve GIT Repository?</label>
+                </section>
+            </div>
+          </div>
+        </div>
+      </gr-dialog>
+    </gr-overlay>
+  </template>
+  <script src="gr-delete-repo.js"></script>
+</dom-module>
diff --git a/gr-delete-repo/gr-delete-repo.js b/gr-delete-repo/gr-delete-repo.js
new file mode 100644
index 0000000..0ce69c4
--- /dev/null
+++ b/gr-delete-repo/gr-delete-repo.js
@@ -0,0 +1,62 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+(function() {
+  'use strict';
+
+  Polymer({
+    is: 'gr-delete-repo',
+
+    properties: {
+      repoName: String,
+      config: Object,
+      action: Object,
+      actionId: String,
+    },
+
+    attached() {
+      this.actionId = this.plugin.getPluginName() + '~delete';
+      this.action = this.config.actions[this.actionId];
+      this.hidden = !this.action;
+    },
+
+    _handleCommandTap() {
+      this.$.deleteRepoOverlay.open();
+    },
+
+    _handleCloseDeleteRepo() {
+      this.$.deleteRepoOverlay.close();
+    },
+
+    _handleDeleteRepo() {
+      const endpoint = '/projects/' +
+          encodeURIComponent(this.repoName) + '/' +
+          this.actionId;
+
+      const json = {
+        force: this.$.forceDeleteOpenChangesCheckBox.checked,
+        preserve: this.$.preserveGitRepoCheckBox.checked
+      };
+
+      const errFn = response => {
+        this.fire('page-error', {response});
+      };
+
+      return this.plugin.restApi().send(
+          this.action.method, endpoint, json, errFn)
+            .then(r => {
+              Gerrit.Nav.navigateToRelativeUrl('/admin/repos');
+      });
+    },
+  });
+})();
diff --git a/plugin.html b/plugin.html
new file mode 100644
index 0000000..138397d
--- /dev/null
+++ b/plugin.html
@@ -0,0 +1,28 @@
+<!--
+Copyright (C) 2018 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<link rel="import" href="./gr-delete-repo/gr-delete-repo.html">
+
+<dom-module id="delete-repo">
+  <script>
+    if (window.Polymer) {
+      Gerrit.install(function(plugin) {
+          plugin.registerCustomComponent(
+              'repo-command', 'gr-delete-repo');
+      });
+    }
+  </script>
+</dom-module>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HttpModule.java
index a5470c9..f07ef52 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HttpModule.java
@@ -24,5 +24,7 @@
   protected void configureServlets() {
     DynamicSet.bind(binder(), WebUiPlugin.class)
         .toInstance(new JavaScriptPlugin("delete-project.js"));
+    DynamicSet.bind(binder(), WebUiPlugin.class)
+        .toInstance(new JavaScriptPlugin("gr-delete-repo.html"));
   }
 }
diff --git a/src/main/resources/static/delete-project.js b/src/main/resources/static/delete-project.js
index 2200973..2291279 100644
--- a/src/main/resources/static/delete-project.js
+++ b/src/main/resources/static/delete-project.js
@@ -12,32 +12,34 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-Gerrit.install(function(self) {
-    function onDeleteProject(c) {
-      var f = c.checkbox();
-      var p = c.checkbox();
-      var b = c.button('Delete',
-        {onclick: function(){
-          c.call(
-            {force: f.checked, preserve: p.checked},
-            function(r) {
-              c.hide();
-              window.alert('The project: "'
-                + c.project
-                + '" was deleted.'),
-              Gerrit.go('/admin/projects/');
-            });
-        }});
-      c.popup(c.div(
-        c.msg('Are you really sure you want to delete the project: "'
-          + c.project
-          + '"?'),
-        c.br(),
-        c.label(f, 'Delete project even if open changes exist?'),
-        c.br(),
-        c.label(p, 'Preserve GIT Repository?'),
-        c.br(),
-        b));
-    }
-    self.onAction('project', 'delete', onDeleteProject);
-  });
+if (!window.Polymer) {
+  Gerrit.install(function(self) {
+      function onDeleteProject(c) {
+        var f = c.checkbox();
+        var p = c.checkbox();
+        var b = c.button('Delete',
+          {onclick: function(){
+            c.call(
+              {force: f.checked, preserve: p.checked},
+              function(r) {
+                c.hide();
+                window.alert('The project: "'
+                  + c.project
+                  + '" was deleted.'),
+                Gerrit.go('/admin/projects/');
+              });
+          }});
+        c.popup(c.div(
+          c.msg('Are you really sure you want to delete the project: "'
+            + c.project
+            + '"?'),
+          c.br(),
+          c.label(f, 'Delete project even if open changes exist?'),
+          c.br(),
+          c.label(p, 'Preserve GIT Repository?'),
+          c.br(),
+          b));
+      }
+      self.onAction('project', 'delete', onDeleteProject);
+    });
+}
