diff --git a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTemporaryAccount.kt b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTemporaryAccount.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6dd7bbda2e8c9985fb3ea162fe97f9b1516cf9cb
--- /dev/null
+++ b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTemporaryAccount.kt
@@ -0,0 +1,66 @@
+package org.briarproject.briar.desktop
+
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.window.application
+import org.briarproject.bramble.BrambleCoreEagerSingletons
+import org.briarproject.bramble.util.OsUtils.isLinux
+import org.briarproject.bramble.util.OsUtils.isMac
+import org.briarproject.bramble.util.OsUtils.isWindows
+import org.briarproject.briar.BriarCoreEagerSingletons
+import java.io.IOException
+import java.nio.file.Files
+import java.nio.file.Files.setPosixFilePermissions
+import java.nio.file.Path
+import java.nio.file.attribute.PosixFilePermission
+import java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE
+import java.nio.file.attribute.PosixFilePermission.OWNER_READ
+import java.nio.file.attribute.PosixFilePermission.OWNER_WRITE
+import java.util.logging.Level.INFO
+import java.util.logging.LogManager
+import kotlin.io.path.absolute
+
+private class TestWithTemporaryAccount {
+
+    @OptIn(ExperimentalComposeUiApi::class)
+    fun run() = application {
+        LogManager.getLogManager().getLogger("").level = INFO
+
+        val dataDir = getDataDir()
+        println("Using data directory '$dataDir'")
+
+        val app =
+            DaggerBriarDesktopApp.builder().desktopModule(
+                DesktopModule(dataDir.toFile())
+            ).build()
+        // We need to load the eager singletons directly after making the
+        // dependency graphs
+        BrambleCoreEagerSingletons.Helper.injectEagerSingletons(app)
+        BriarCoreEagerSingletons.Helper.injectEagerSingletons(app)
+
+        app.getUI().startBriar()
+    }
+
+    private fun getDataDir(): Path {
+        val dataDir = Files.createTempDirectory("briar")
+        if (!Files.exists(dataDir)) {
+            throw IOException("Could not create directory: ${dataDir.absolute()}")
+        } else if (!Files.isDirectory(dataDir)) {
+            throw IOException("Data dir is not a directory: ${dataDir.absolute()}")
+        }
+        if (isLinux() || isMac()) {
+            val perms = HashSet<PosixFilePermission>()
+            perms.add(OWNER_READ)
+            perms.add(OWNER_WRITE)
+            perms.add(OWNER_EXECUTE)
+            setPosixFilePermissions(dataDir, perms)
+        } else if (isWindows()) {
+            val file = dataDir.toFile()
+            file.setReadable(true, true)
+            file.setWritable(true, true)
+            file.setExecutable(true, true)
+        }
+        return dataDir
+    }
+}
+
+fun main(args: Array<String>) = TestWithTemporaryAccount().run()