diff --git a/build-binary.py b/build-binary.py
index f65560635a9c69a855d426fd13a0f346134a58a2..63293d1380537f6df9d5afb92d6b632933752de1 100755
--- a/build-binary.py
+++ b/build-binary.py
@@ -20,7 +20,7 @@ def main():
     install_go(tool, tool_version, versions)
 
     # Install Android NDK
-    install_android_ndk(tool, tool_version)
+    #install_android_ndk(tool, tool_version)
 
     # Checkout source at specific version
     checkout_source_repo(tool, versions)
@@ -31,14 +31,17 @@ def main():
     os.makedirs(output_dir)
 
     # Build and package for various platforms and architectures
-    build_android(tool, versions)
-    package_android(tool, versions)
+    #build_android(tool, versions)
+    #package_android(tool, versions)
 
-    build_linux(tool, versions)
-    package_linux(tool, versions)
+    #build_linux(tool, versions)
+    #package_linux(tool, versions)
 
-    build_windows(tool, versions)
-    package_windows(tool, versions)
+    #build_windows(tool, versions)
+    #package_windows(tool, versions)
+
+    build_macos(tool, versions)
+    package_macos(tool, versions)
 
 
 def get_repo_dir(versions):
@@ -137,7 +140,13 @@ def build_windows(tool, versions):
     build_desktop_arch(tool, versions, 'windows', 'x86_64', 'amd64')
 
 
-def build_desktop_arch(tool, versions, platform, arch, goarch, goarm=None):
+def build_macos(tool, versions):
+    os.mkdir(get_platform_output_dir(tool, 'macos'))
+    build_desktop_arch(tool, versions, 'darwin', 'x86_64', 'amd64', output_name = 'macos')
+    build_desktop_arch(tool, versions, 'darwin', 'aarch64', 'arm64', output_name = 'macos')
+
+
+def build_desktop_arch(tool, versions, platform, arch, goarch, goarm=None, output_name=None):
     env = os.environ.copy()
     env['CGO_ENABLED'] = "0"
     env['GOOS'] = platform
@@ -145,8 +154,10 @@ def build_desktop_arch(tool, versions, platform, arch, goarch, goarm=None):
     if goarm: env['GOARM'] = goarm
     build_path = os.path.join('.', versions['build_path'])
 
-    print("Building %s for %s %s" % (tool, platform, arch))
-    output_dir = get_platform_output_dir(tool, platform)
+    if not output_name: output_name = platform
+
+    print("Building %s for %s %s" % (tool, output_name, arch))
+    output_dir = get_platform_output_dir(tool, output_name)
     arch_dir = os.path.join(output_dir, arch)
     os.mkdir(arch_dir)
     extension = '.exe' if platform == 'windows' else ''
@@ -186,6 +197,15 @@ def package_windows(tool, versions):
     package(tool, versions, file_list, 'windows')
 
 
+def package_macos(tool, versions):
+    output_dir = get_platform_output_dir(tool, 'macos')
+    file_list = [
+        os.path.join(output_dir, 'aarch64', tool),
+        os.path.join(output_dir, 'x86_64', tool),
+    ]
+    package(tool, versions, file_list, 'macos')
+
+
 def package(tool, versions, file_list, platform):
     zip_file = get_final_file_path(tool, versions, platform)
     zip_files(file_list, zip_file, versions)
diff --git a/install.sh b/install.sh
index 82dd84d2050eef6e1d803bdb33cc8a2a61ee816f..29e43b7c943217b2de4f0b7873b28b8eed7dd311 100755
--- a/install.sh
+++ b/install.sh
@@ -3,7 +3,7 @@ set -e
 set -x
 
 # use snapshot repos for deterministic package versions
-DATE="20230209T000000Z"
+DATE="20230509T000000Z"
 cat << EOF > /etc/apt/sources.list
 deb http://snapshot.debian.org/archive/debian/${DATE}/ bullseye main
 deb http://snapshot.debian.org/archive/debian/${DATE}/ bullseye-updates main
diff --git a/template-obfs4proxy-macos.pom b/template-obfs4proxy-macos.pom
new file mode 100644
index 0000000000000000000000000000000000000000..b02f3e4dbfae2be0f1c1bb26fd83787ddd6279ed
--- /dev/null
+++ b/template-obfs4proxy-macos.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>obfs4proxy-macos</artifactId>
+  <name>obfs4proxy-macos</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building obfs4proxy for macOS.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/obfs4/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>yawning</id>
+      <name>Yawning Angel</name>
+      <email>yawning at torproject dot org</email>
+    </developer>
+    <developer>
+      <id>torproject</id>
+      <name>Tor Project</name>
+      <email>frontdesk@rt.torproject.org</email>
+    </developer>
+  </developers>
+  <scm>
+    <connection>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/obfs4.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/obfs4.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/obfs4.git</url>
+  </scm>
+</project>
diff --git a/template-snowflake-macos.pom b/template-snowflake-macos.pom
new file mode 100644
index 0000000000000000000000000000000000000000..9c1625d45bc11536a776c78ee26411cf5d8d2640
--- /dev/null
+++ b/template-snowflake-macos.pom
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>snowflake-macos</artifactId>
+  <name>snowflake-macos</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building snowflake for macOS.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>torproject</id>
+      <name>Tor Project</name>
+      <email>frontdesk@rt.torproject.org</email>
+    </developer>
+  </developers>
+  <scm>
+    <connection>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/snowflake.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git</url>
+  </scm>
+</project>
diff --git a/verify-binary.py b/verify-binary.py
index 283f04df4feedf055b429ebfefb9374f80b6408a..f49ee2be4d9633c5a9f30053da4986cc69b7030d 100755
--- a/verify-binary.py
+++ b/verify-binary.py
@@ -11,9 +11,10 @@ def main():
     # get version from command or show usage information
     tool, command_line_version = get_version_and_tool()
 
-    verified_android = verify(tool, command_line_version, 'android')
-    verified_linux = verify(tool, command_line_version, 'linux')
-    verified_windows = verify(tool, command_line_version, 'windows')
+    #verified_android = verify(tool, command_line_version, 'android')
+    #verified_linux = verify(tool, command_line_version, 'linux')
+    #verified_windows = verify(tool, command_line_version, 'windows')
+    verified_macos = verify(tool, command_line_version, 'macos')
     if verified_android and verified_linux and verified_windows:
         sys.exit(0)
     else: