diff --git a/scripts/create_release.py b/scripts/create_release.py
new file mode 100755
index 0000000..b84a432
--- /dev/null
+++ b/scripts/create_release.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+
+import json
+import os
+import subprocess
+import sys
+from collections import OrderedDict
+
+script_dir = os.path.dirname(os.path.abspath(__file__))
+root_dir = os.path.dirname(script_dir)
+sys.path.append(root_dir)
+
+import emsdk  # noqa
+
+
+def version_to_list(version_string):
+  return [int(part) for part in version_string.split('.')]
+
+
+def main(args):
+  if subprocess.check_output(['git', 'status', '--porcelain'], cwd=root_dir).strip():
+    print('tree is not clean')
+    sys.exit(1)
+
+  release_info = emsdk.load_releases_info()
+  new_version = version_to_list(release_info['latest'])
+  new_version[-1] += 1
+  branch_name = 'version_%s' % '_'.join(str(part) for part in new_version)
+
+  # Create a new git branch
+  subprocess.check_call(['git', 'checkout', '-b', branch_name], cwd=root_dir)
+
+  new_version = '.'.join(str(part) for part in new_version)
+  new_hash = emsdk.get_emscripten_releases_tot()
+  print('Creating new release: %s -> %s' % (new_version, new_hash))
+  release_info['releases'][new_version] = new_hash
+  releases = [(k, v) for k, v in release_info['releases'].items()]
+  releases.sort(key=lambda pair: version_to_list(pair[0]))
+
+  release_info['releases'] = OrderedDict(reversed(releases))
+  release_info['latest'] = new_version
+
+  with open(os.path.join(root_dir, 'emscripten-releases-tags.txt'), 'w') as f:
+    f.write(json.dumps(release_info, indent=2))
+    f.write('\n')
+
+  subprocess.check_call(os.path.join(script_dir, 'update_bazel_workspace.sh'), cwd=root_dir)
+
+  # Create auto-generated changes to the new git branch
+  subprocess.check_call(['git', 'add', '-u', '.'], cwd=root_dir)
+  subprocess.check_call(['git', 'commit', '-m', new_version], cwd=root_dir)
+
+  print('New relase created in branch: `%s`' % branch_name)
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
