diff --git a/service/pom.xml b/service/pom.xml
index 4e41f7d06..0dfbeaa5a 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -518,6 +518,19 @@
+
+ org.codehaus.mojo
+ templating-maven-plugin
+ 1.0.0
+
+
+ filter-src
+
+ filter-sources
+
+
+
+
diff --git a/service/src/main/java-templates/org/whispersystems/textsecuregcm/WhisperServerVersion.java b/service/src/main/java-templates/org/whispersystems/textsecuregcm/WhisperServerVersion.java
new file mode 100644
index 000000000..fa4c40bd9
--- /dev/null
+++ b/service/src/main/java-templates/org/whispersystems/textsecuregcm/WhisperServerVersion.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2013-2021 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.whispersystems.textsecuregcm;
+
+public class WhisperServerVersion {
+
+ private static final String VERSION = "${project.version}";
+
+ public static String getServerVersion() {
+ return VERSION;
+ }
+}
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
index 357cde6fd..6ce0718e0 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
@@ -197,6 +197,7 @@ import org.whispersystems.textsecuregcm.workers.CertificateCommand;
import org.whispersystems.textsecuregcm.workers.DeleteUserCommand;
import org.whispersystems.textsecuregcm.workers.GetRedisCommandStatsCommand;
import org.whispersystems.textsecuregcm.workers.GetRedisSlowlogCommand;
+import org.whispersystems.textsecuregcm.workers.ServerVersionCommand;
import org.whispersystems.textsecuregcm.workers.SetCrawlerAccelerationTask;
import org.whispersystems.textsecuregcm.workers.SetRequestLoggingEnabledTask;
import org.whispersystems.textsecuregcm.workers.VacuumCommand;
@@ -214,6 +215,7 @@ public class WhisperServerService extends Application("accountdb", "accountsdb.xml") {
@Override
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/LogstashTcpSocketAppenderFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/LogstashTcpSocketAppenderFactory.java
index 568fc05c1..95fc86e13 100644
--- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/LogstashTcpSocketAppenderFactory.java
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/LogstashTcpSocketAppenderFactory.java
@@ -26,6 +26,7 @@ import java.time.Duration;
import javax.validation.constraints.NotEmpty;
import net.logstash.logback.appender.LogstashTcpSocketAppender;
import net.logstash.logback.encoder.LogstashEncoder;
+import org.whispersystems.textsecuregcm.WhisperServerVersion;
@JsonTypeName("logstashtcpsocket")
public class LogstashTcpSocketAppenderFactory extends AbstractAppenderFactory {
@@ -83,7 +84,8 @@ public class LogstashTcpSocketAppenderFactory extends AbstractAppenderFactory prefix = new LayoutWrappingEncoder<>();
final PatternLayout layout = new PatternLayout();
diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/ServerVersionCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/ServerVersionCommand.java
new file mode 100644
index 000000000..efe12a668
--- /dev/null
+++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/ServerVersionCommand.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2013-2021 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.whispersystems.textsecuregcm.workers;
+
+import io.dropwizard.cli.Command;
+import io.dropwizard.setup.Bootstrap;
+import net.sourceforge.argparse4j.inf.Namespace;
+import net.sourceforge.argparse4j.inf.Subparser;
+import org.whispersystems.textsecuregcm.WhisperServerVersion;
+
+public class ServerVersionCommand extends Command {
+
+ public ServerVersionCommand() {
+ super("version", "Print the version of the service");
+ }
+
+ @Override
+ public void configure(final Subparser subparser) {
+ }
+
+ @Override
+ public void run(final Bootstrap> bootstrap, final Namespace namespace) throws Exception {
+ System.out.println(WhisperServerVersion.getServerVersion());
+ }
+}