diff --git a/.gitignore b/.gitignore
index d17f34632adb1768d2551edb1a9907862d6a8122..5f5db0d3a1379b2949b79c468de095de1a50ef41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@
 /snowflake*.zip
 /snowflake*.pom
 /snowflake*.jar
-/reference
\ No newline at end of file
+/reference
+/output
diff --git a/build-binary.py b/build-binary.py
index 6dd281d5d69f3c8c5bd04d99124be7964fe6571c..3df8c54b7173ceb4c817f88a4adc953bcb061014 100755
--- a/build-binary.py
+++ b/build-binary.py
@@ -5,7 +5,8 @@ from subprocess import check_call
 
 from utils import get_build_versions, ex, get_sha256, zip_files, get_final_file_path, \
     get_sources_file_path, get_pom_file_path, reset_time, get_version_number, check_go_version, \
-    get_version_and_tool, get_output_dir, get_platform_output_dir, GO_PATH, GO_ROOT, NDK_DIR
+    get_version_and_tool, get_output_dir, get_platform_output_dir, get_ld_flags, \
+    GO_PATH, GO_ROOT, NDK_DIR
 
 
 def main():
@@ -105,8 +106,7 @@ def build_android(tool, versions):
 
 
 def build_android_arch(tool, versions, env, clang_arch, ndk_arch, abi):
-    # TODO: Raise API level and upgrade NDK when we drop support for Android 4
-    min_api = '21' if ndk_arch.endswith('64') else '16'
+    min_api = '21'
     clang = "%s/toolchains/llvm/prebuilt/linux-x86_64/bin/%s%s-clang" % (NDK_DIR, clang_arch, min_api)
 
     env['CC'] = os.path.abspath(clang)
@@ -122,8 +122,9 @@ def build_android_arch(tool, versions, env, clang_arch, ndk_arch, abi):
 
     output_file = os.path.abspath(os.path.join(os.path.curdir, tool))
     go_flags = ['-asmflags', '-trimpath', '-o', output_file]
+    ld_flags = ["-ldflags=-w -s -extldflags=-pie %s" % get_ld_flags(versions)]
     repo_dir = get_repo_dir(versions)
-    ex(['go', 'build', '-buildmode=pie', '-ldflags', '-w -s -extldflags=-pie'] + go_flags +
+    ex(['go', 'build', '-buildmode=pie'] + ld_flags + go_flags +
        [os.path.join('.', versions['build_path'])], env=env, cwd=repo_dir)
     shutil.copy(output_file, tool_path)
 
@@ -165,8 +166,9 @@ def build_desktop_arch(tool, versions, platform, arch, goarch, goarm=None, outpu
 
     output_file = os.path.abspath(os.path.join(os.path.curdir, tool))
     go_flags = ['-asmflags', '-trimpath', '-o', output_file]
+    ld_flags = ["-ldflags=-w -s %s" % get_ld_flags(versions)]
     repo_dir = get_repo_dir(versions)
-    ex(['go', 'build', '-ldflags', '-w -s'] + go_flags + [build_path], env=env, cwd=repo_dir)
+    ex(['go', 'build'] + ld_flags + go_flags + [build_path], env=env, cwd=repo_dir)
     shutil.copy(output_file, tool_path)
 
 
diff --git a/template-lyrebird-android.pom b/template-lyrebird-android.pom
new file mode 100644
index 0000000000000000000000000000000000000000..74eacc2f5f63b6c2520f2f427c1f871136644f99
--- /dev/null
+++ b/template-lyrebird-android.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>lyrebird-android</artifactId>
+  <name>lyrebird-android</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building lyrebird for Android.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>yawning</id>
+      <name>Yawning Angel</name>
+      <email>yawning at schwanenlied dot me</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/lyrebird.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/lyrebird.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git</url>
+  </scm>
+</project>
diff --git a/template-lyrebird-linux.pom b/template-lyrebird-linux.pom
new file mode 100644
index 0000000000000000000000000000000000000000..f010b110586031da78135d80821396c6bfc16e65
--- /dev/null
+++ b/template-lyrebird-linux.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>lyrebird-linux</artifactId>
+  <name>lyrebird-linux</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building lyrebird for Linux.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>yawning</id>
+      <name>Yawning Angel</name>
+      <email>yawning at schwanenlied dot me</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/lyrebird.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/lyrebird.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git</url>
+  </scm>
+</project>
diff --git a/template-lyrebird-macos.pom b/template-lyrebird-macos.pom
new file mode 100644
index 0000000000000000000000000000000000000000..467129034f58e1c4d7be30cd8b723a0d72037826
--- /dev/null
+++ b/template-lyrebird-macos.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>lyrebird-macos</artifactId>
+  <name>lyrebird-macos</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building lyrebird for macOS.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>yawning</id>
+      <name>Yawning Angel</name>
+      <email>yawning at schwanenlied dot me</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/lyrebird.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/lyrebird.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git</url>
+  </scm>
+</project>
diff --git a/template-lyrebird-windows.pom b/template-lyrebird-windows.pom
new file mode 100644
index 0000000000000000000000000000000000000000..ddee6435282398d23148424e7c19dbba9ad742b8
--- /dev/null
+++ b/template-lyrebird-windows.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.briarproject</groupId>
+  <artifactId>lyrebird-windows</artifactId>
+  <name>lyrebird-windows</name>
+  <version>VERSION</version>
+  <url>https://torproject.org</url>
+  <description>Repo for building lyrebird for Windows.</description>
+  <licenses>
+   <license>
+     <name>BSD-3-clause</name>
+     <url>https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird/-/blob/main/LICENSE</url>
+   </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>yawning</id>
+      <name>Yawning Angel</name>
+      <email>yawning at schwanenlied dot me</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/lyrebird.git</connection>
+    <developerConnection>scm:git@gitlab.torproject.org:tpo/anti-censorship/pluggable-transports/lyrebird.git</developerConnection>
+    <url>scm:https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git</url>
+  </scm>
+</project>
diff --git a/utils.py b/utils.py
index c45e88dc4d28dbecad3622f9b6d8fa225fea6f3a..bf2740876ef95193b61b93465c425aee83ac2f57 100644
--- a/utils.py
+++ b/utils.py
@@ -31,6 +31,8 @@ def get_build_versions(tool, tag):
     versions[tool][tag]['tag'] = tag
     return tag, versions[tool][tag]
 
+def get_ld_flags(versions):
+    return versions['ld_flags'] if 'ld_flags' in versions else ''
 
 def check_go_version(versions):
     # Check if proper Go version is installed (trailing space, because 'go1.10' in 'go1.10.1')
diff --git a/versions.json b/versions.json
index 998786096e7ce2bae060867c7d9d9aaa3df0903d..e58e847c5efd078d84c219447507b15990082810 100644
--- a/versions.json
+++ b/versions.json
@@ -1,4 +1,23 @@
 {
+  "lyrebird": {
+    "0.5.0": {
+      "repo_url": "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/lyrebird.git",
+      "revision": "297ae51866f56146f0523bcf2fd84e0b6ee8a88a",
+      "ld_flags": "-X main.lyrebirdVersion=0.5.0",
+      "build_path": "cmd/lyrebird",
+      "repo_dir": "lyrebird",
+      "go": {
+        "version": "go1.21.13",
+        "sha256": "71fb31606a1de48d129d591e8717a63e0c5565ffba09a24ea9f899a13214c34d"
+      },
+      "ndk": {
+        "url": "https://dl.google.com/android/repository/android-ndk-r27c-linux.zip",
+        "revision": "27.2.12479018",
+        "sha256": "59c2f6dc96743b5daf5d1626684640b20a6bd2b1d85b13156b90333741bad5cc"
+      },
+      "timestamp": "201001010000.00"
+    }
+  },
   "obfs4proxy": {
     "0.0.14-tor2": {
       "repo_url": "https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/obfs4.git",
@@ -177,4 +196,4 @@
       "timestamp": "201001010000.00"
     }
   }
-}
\ No newline at end of file
+}