diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt b/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt
index bedad403c012c8065c57e69d2a05f8104a0ed7ac..1304b7083f0290e4c895a89d67a3f1a7e5762c8c 100644
--- a/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt
+++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/lib/AbstractMailbox.kt
@@ -26,6 +26,7 @@ import org.briarproject.mailbox.core.CoreEagerSingletons
 import org.briarproject.mailbox.core.MailboxLibEagerSingletons
 import org.briarproject.mailbox.core.db.TransactionManager
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager
+import org.briarproject.mailbox.core.server.WebServerManager
 import org.briarproject.mailbox.core.setup.QrCodeEncoder
 import org.briarproject.mailbox.core.setup.SetupManager
 import org.briarproject.mailbox.core.setup.WipeManager
@@ -59,6 +60,9 @@ abstract class AbstractMailbox(protected val customDataDir: File? = null) {
     @Inject
     internal lateinit var setupManager: SetupManager
 
+    @Inject
+    internal lateinit var webserverManager: WebServerManager
+
     @Inject
     internal lateinit var wipeManager: WipeManager
 
@@ -131,5 +135,11 @@ abstract class AbstractMailbox(protected val customDataDir: File? = null) {
         return qrCodeEncoder.getLink()
     }
 
+    /**
+     * The port, the webserver has bound to.
+     * Accessing this will block the current thread until the port chosen by the webserver is known.
+     */
+    val port get() = webserverManager.port
+
     fun getSystem(): System = system
 }