diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c52ff899cf188f16289e87f948eb3c53ba2a812d
--- /dev/null
+++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt
@@ -0,0 +1,12 @@
+package org.briarproject.briar.desktop
+
+interface DesktopFeatureFlags {
+
+    fun shouldEnablePrivateGroups(): Boolean
+
+    fun shouldEnableForums(): Boolean
+
+    fun shouldEnableBlogs(): Boolean
+
+    fun shouldEnableTransportSettings(): Boolean
+}
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
index e5727398c46921001bd19449aac5c2f9ad5b4c56..1e436ca9efa2357c9e78ff80e96b079675f2c535 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
@@ -130,6 +130,17 @@ internal class DesktopModule(
         override fun shouldEnableDisappearingMessages() = false
     }
 
+    @Provides
+    @Singleton
+    internal fun provideDesktopFeatureFlags() = object : DesktopFeatureFlags {
+        // TODO: once we have shouldEnableBlogsInCore() in briar core, wire them up with these here
+        // so that the value for shouldEnableBlogs() is always the same the respective core flag.
+        override fun shouldEnablePrivateGroups() = false
+        override fun shouldEnableForums() = false
+        override fun shouldEnableBlogs() = false
+        override fun shouldEnableTransportSettings() = false
+    }
+
     @Provides
     @Singleton
     internal fun provideImageCompressor(imageCompressor: ImageCompressorImpl): ImageCompressor {
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt b/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt
index 6bdbae821bf38e4260ae063e607d5187eac4d5e4..c07b4bd594bab17a9a66eb85ad7dc1964fce37d9 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt
@@ -27,6 +27,7 @@ import org.briarproject.bramble.api.identity.LocalAuthor
 import org.briarproject.briar.desktop.contact.ProfileCircle
 import org.briarproject.briar.desktop.theme.sidebarSurface
 import org.briarproject.briar.desktop.ui.UiMode
+import org.briarproject.briar.desktop.utils.getDesktopFeatureFlags
 
 val SIDEBAR_WIDTH = 56.dp
 
@@ -54,26 +55,27 @@ fun BriarSidebar(
             ) {
                 account?.let { ProfileCircle(size = 45.dp, it.id.bytes) }
             }
-
-            for (
-                (mode, icon) in listOf(
-                    Pair(UiMode.CONTACTS, Icons.Filled.Contacts),
-                    Pair(UiMode.GROUPS, Icons.Filled.Group),
-                    Pair(UiMode.FORUMS, Icons.Filled.Forum),
-                    Pair(UiMode.BLOGS, Icons.Filled.ChromeReaderMode),
-                )
-            ) {
+            val items = buildList {
+                add(Pair(UiMode.CONTACTS, Icons.Filled.Contacts))
+                val featureFlags = getDesktopFeatureFlags()
+                if (featureFlags.shouldEnablePrivateGroups()) add(Pair(UiMode.GROUPS, Icons.Filled.Group))
+                if (featureFlags.shouldEnableForums()) add(Pair(UiMode.FORUMS, Icons.Filled.Forum))
+                if (featureFlags.shouldEnableBlogs()) add(Pair(UiMode.BLOGS, Icons.Filled.ChromeReaderMode))
+            }
+            for ((mode, icon) in items) {
                 displayButton(uiMode, mode, icon)
             }
         }
         Column(verticalArrangement = Arrangement.Bottom) {
-            for (
-                (mode, icon) in listOf(
-                    Pair(UiMode.TRANSPORTS, Icons.Filled.WifiTethering),
-                    Pair(UiMode.SETTINGS, Icons.Filled.Settings),
-                    Pair(UiMode.SIGNOUT, Icons.Filled.Logout),
+            val items = buildList {
+                val featureFlags = getDesktopFeatureFlags()
+                if (featureFlags.shouldEnableTransportSettings()) add(
+                    Pair(UiMode.TRANSPORTS, Icons.Filled.WifiTethering)
                 )
-            ) {
+                add(Pair(UiMode.SETTINGS, Icons.Filled.Settings))
+                add(Pair(UiMode.SIGNOUT, Icons.Filled.Logout))
+            }
+            for ((mode, icon) in items) {
                 displayButton(uiMode, mode, icon)
             }
         }
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt
index 3d9ad8ddfc789fd8e3697f042804af4cb1fabfaa..fb92e15d272180f26d888c0dd9f4465596225ed3 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt
@@ -12,6 +12,7 @@ import androidx.compose.ui.window.Window
 import org.briarproject.bramble.api.account.AccountManager
 import org.briarproject.bramble.api.lifecycle.LifecycleManager
 import org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.RUNNING
+import org.briarproject.briar.desktop.DesktopFeatureFlags
 import org.briarproject.briar.desktop.login.LoginScreen
 import org.briarproject.briar.desktop.login.RegistrationScreen
 import org.briarproject.briar.desktop.theme.BriarTheme
@@ -37,6 +38,7 @@ interface BriarUi {
 }
 
 val LocalViewModelProvider = staticCompositionLocalOf<ViewModelProvider?> { null }
+val LocalDesktopFeatureFlags = staticCompositionLocalOf<DesktopFeatureFlags?> { null }
 
 @Immutable
 @Singleton
@@ -46,6 +48,7 @@ constructor(
     private val accountManager: AccountManager,
     private val lifecycleManager: LifecycleManager,
     private val viewModelProvider: ViewModelProvider,
+    private val desktopFeatureFlags: DesktopFeatureFlags,
 ) : BriarUi {
 
     override fun stop() {
@@ -79,7 +82,10 @@ constructor(
             icon = painterResource("images/logo_circle.svg")
         ) {
             window.minimumSize = Dimension(800, 600)
-            CompositionLocalProvider(LocalViewModelProvider provides viewModelProvider) {
+            CompositionLocalProvider(
+                LocalViewModelProvider provides viewModelProvider,
+                LocalDesktopFeatureFlags provides desktopFeatureFlags
+            ) {
                 BriarTheme(isDarkTheme = isDark) {
                     when (screenState) {
                         Screen.REGISTRATION ->
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt
index c636fa7384a9510090c94353db27b744fc954ce5..7196cc58f1da1fb995a1da8b5b01d71d9dd8bbc4 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt
@@ -23,7 +23,7 @@ fun MainScreen(
         BriarSidebar(
             viewModel.account.value,
             viewModel.uiMode.value,
-            viewModel::setUiMode
+            viewModel::setUiMode,
         )
         VerticalDivider()
         when (viewModel.uiMode.value) {
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1e79562469e52c76d8e8c5c8fdcee66b405b640b
--- /dev/null
+++ b/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt
@@ -0,0 +1,9 @@
+package org.briarproject.briar.desktop.utils
+
+import androidx.compose.runtime.Composable
+import org.briarproject.briar.desktop.ui.LocalDesktopFeatureFlags
+
+@Composable
+fun getDesktopFeatureFlags() = checkNotNull(LocalDesktopFeatureFlags.current) {
+    "No DesktopFeatureFlags was provided via LocalDesktopFeatureFlags"
+}
diff --git a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
index 7bf547826efa6f7d2245ca5cddd34557370cd223..f5a066935dcda354cd3c2ecaa7fb758455da629f 100644
--- a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
+++ b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
@@ -136,6 +136,17 @@ internal class DesktopTestModule(
         override fun shouldEnableDisappearingMessages() = false
     }
 
+    @Provides
+    @Singleton
+    internal fun provideDesktopFeatureFlags() = object : DesktopFeatureFlags {
+        // TODO: once we have shouldEnableBlogsInCore() in briar core, wire them up with these here
+        // so that the value for shouldEnableBlogs() is always the same the respective core flag.
+        override fun shouldEnablePrivateGroups() = false
+        override fun shouldEnableForums() = false
+        override fun shouldEnableBlogs() = false
+        override fun shouldEnableTransportSettings() = false
+    }
+
     @Provides
     @Singleton
     internal fun provideImageCompressor(imageCompressor: ImageCompressorImpl): ImageCompressor {