diff --git a/simple_server_main.cc b/simple_server_main.cc
new file mode 100644
index 0000000..bc3002a
--- /dev/null
+++ b/simple_server_main.cc
@@ -0,0 +1,70 @@
+/* Copyright 2016 The Roughtime Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. */
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "simple_server.h"
+#include "sys_time.h"
+
+// root_private_key is an Ed25519 private key used by simple_server. The
+// private part consists of all zeros and so is only for use in this example.
+constexpr uint8_t root_private_key[ED25519_PRIVATE_KEY_LEN] = {
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x6a, 0x27, 0xbc,
+    0xce, 0xb6, 0xa4, 0x2d, 0x62, 0xa3, 0xa8, 0xd0, 0x2a, 0x6f, 0x0d, 0x73,
+    0x65, 0x32, 0x15, 0x77, 0x1d, 0xe2, 0x43, 0xa6, 0x3a, 0xc0, 0x48, 0xa1,
+    0x8b, 0x59, 0xda, 0x29,
+};
+
+int main(int argc, char **argv) {
+  int requested_port = -1;
+
+  if (argc == 2) {
+    char *endptr;
+    requested_port = strtoul(argv[1], &endptr, 10);
+    if (*endptr != 0) {
+      requested_port = -1;
+    }
+  }
+
+  if (requested_port < 0 || requested_port > 65535) {
+    fprintf(stderr, "Usage: %s <port number>\n", argv[0]);
+    return 1;
+  }
+
+  int fd;
+  uint16_t port;
+  if (!roughtime::UdpProcessor::MakeSocket(requested_port, &fd, &port)) {
+    return 1;
+  }
+
+  fprintf(stderr, "Listening on port %d.\n", port);
+
+  std::unique_ptr<roughtime::Identity> identity =
+      roughtime::SimpleServer::MakeIdentity(root_private_key, 0,
+                                            2147483647000000);
+  std::unique_ptr<TimeSource> time_source(new roughtime::SystemTimeSource);
+
+  auto server =
+      std::unique_ptr<roughtime::SimpleServer>(new roughtime::SimpleServer(
+          std::move(identity), std::move(time_source), fd));
+  server->RunUntilError();
+  return 1;
+}
