diff --git a/tools/release_smali.py b/tools/release_smali.py
new file mode 100755
index 0000000..12a9389
--- /dev/null
+++ b/tools/release_smali.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python3
+# Copyright (c) 2023, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+import argparse
+import sys
+
+import gmaven
+
+ARCHIVE_BUCKET = 'r8-releases'
+REPO = 'https://github.com/google/smali'
+
+def parse_options():
+  result = argparse.ArgumentParser(description='Release Smali')
+  result.add_argument('--version',
+                      required=True,
+                      metavar=('<version>'),
+                      help='The version of smali to release.')
+  result.add_argument('--dry-run',
+                      default=False,
+                      action='store_true',
+                      help='Only perform non-commiting tasks and print others.')
+  return result.parse_args()
+
+
+def Main():
+  options = parse_options()
+  gfile = ('/bigstore/r8-releases/smali/%s/smali-maven-release-%s.zip'
+       % (options.version, options.version))
+  release_id = gmaven.publisher_stage([gfile], options.dry_run)
+
+  print('Staged Release ID %s.\n' % release_id)
+  gmaven.publisher_stage_redir_test_info(
+      release_id, 'com.android.tools.smali:smali:%s' % options.version, 'smali.jar')
+
+  print()
+  answer = input('Continue with publishing [y/N]:')
+
+  if answer != 'y':
+    print('Aborting release to Google maven')
+    sys.exit(1)
+
+  gmaven.publisher_publish(release_id, options.dry_run)
+
+  print()
+  print('Published. Use the email workflow for approval.')
+
+if __name__ == '__main__':
+  sys.exit(Main())
