diff --git a/framework/cmake/MuseSetupConfiguration.cmake b/framework/cmake/MuseSetupConfiguration.cmake
index 72d1be9c72..4bea75db2e 100644
--- a/framework/cmake/MuseSetupConfiguration.cmake
+++ b/framework/cmake/MuseSetupConfiguration.cmake
@@ -59,10 +59,6 @@ if (NOT MUSE_MODULE_MULTIWINDOWS)
set(MUSE_MODULE_MULTIWINDOWS_QML OFF) # Stub does not have QML
endif()
-if (NOT MUSE_MODULE_UPDATE)
- set(MUSE_MODULE_UPDATE_QML OFF) # Stub does not have QML
-endif()
-
if (NOT MUSE_MODULE_VST)
set(MUSE_MODULE_VST_QML OFF) # Stub does not have QML
endif()
diff --git a/framework/diagnostics/CMakeLists.txt b/framework/diagnostics/CMakeLists.txt
index 1a5e43660c..09c79d259e 100644
--- a/framework/diagnostics/CMakeLists.txt
+++ b/framework/diagnostics/CMakeLists.txt
@@ -85,7 +85,7 @@ if (MUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT)
message(FATAL_ERROR "Crashpad handler not found: ${MUSE_MODULE_DIAGNOSTICS_CRASHPAD_HANDLER_PATH}")
endif()
if (OS_IS_LIN OR OS_IS_WIN OR OS_IS_MAC)
- install(PROGRAMS ${MUSE_MODULE_DIAGNOSTICS_CRASHPAD_HANDLER_PATH} DESTINATION ${INSTALL_BIN_DIR})
+ install(PROGRAMS ${MUSE_MODULE_DIAGNOSTICS_CRASHPAD_HANDLER_PATH} DESTINATION ${INSTALL_SUBDIR})
endif()
endif() # MUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT
# ----------------
diff --git a/framework/network/CMakeLists.txt b/framework/network/CMakeLists.txt
index e7e5b95506..3574ed66d3 100644
--- a/framework/network/CMakeLists.txt
+++ b/framework/network/CMakeLists.txt
@@ -28,6 +28,7 @@ target_sources(muse_network PRIVATE
inetworkmanager.h
inetworkmanagercreator.h
inetworkconfiguration.h
+ inetworkinformation.h
internal/networkmanager.cpp
internal/networkmanager.h
@@ -35,6 +36,8 @@ target_sources(muse_network PRIVATE
internal/networkmanagercreator.h
internal/networkconfiguration.cpp
internal/networkconfiguration.h
+ internal/networkinformation.cpp
+ internal/networkinformation.h
)
target_link_libraries(muse_network PUBLIC Qt::Network)
diff --git a/framework/network/inetworkinformation.h b/framework/network/inetworkinformation.h
new file mode 100644
index 0000000000..af1c9a778b
--- /dev/null
+++ b/framework/network/inetworkinformation.h
@@ -0,0 +1,36 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-only
+ * MuseScore-CLA-applies
+ *
+ * MuseScore Studio
+ * Music Composition & Notation
+ *
+ * Copyright (C) 2026 MuseScore Limited and others
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "modularity/imoduleinterface.h"
+
+namespace muse::network {
+class INetworkInformation : MODULE_GLOBAL_INTERFACE
+{
+ INTERFACE_ID(INetworkInformation)
+
+public:
+ virtual ~INetworkInformation() = default;
+
+ virtual bool isMetered() const = 0;
+};
+}
diff --git a/framework/network/internal/networkinformation.cpp b/framework/network/internal/networkinformation.cpp
new file mode 100644
index 0000000000..82d48f6163
--- /dev/null
+++ b/framework/network/internal/networkinformation.cpp
@@ -0,0 +1,41 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-only
+ * MuseScore-CLA-applies
+ *
+ * MuseScore Studio
+ * Music Composition & Notation
+ *
+ * Copyright (C) 2026 MuseScore Limited and others
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "networkinformation.h"
+
+#include
+
+using namespace muse::network;
+
+bool NetworkInformation::isMetered() const
+{
+ QNetworkInformation* info = QNetworkInformation::instance();
+ if (!info) {
+ if (!QNetworkInformation::loadBackendByFeatures(QNetworkInformation::Features(QNetworkInformation::Feature::Metered))) {
+ //! NOTE: No backend able to report metering on this platform - assume unmetered
+ return false;
+ }
+
+ info = QNetworkInformation::instance();
+ }
+
+ return info && info->isMetered();
+}
diff --git a/framework/network/internal/networkinformation.h b/framework/network/internal/networkinformation.h
new file mode 100644
index 0000000000..2cd7a0790a
--- /dev/null
+++ b/framework/network/internal/networkinformation.h
@@ -0,0 +1,32 @@
+/*
+ * SPDX-License-Identifier: GPL-3.0-only
+ * MuseScore-CLA-applies
+ *
+ * MuseScore Studio
+ * Music Composition & Notation
+ *
+ * Copyright (C) 2026 MuseScore Limited and others
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "inetworkinformation.h"
+
+namespace muse::network {
+class NetworkInformation : public INetworkInformation
+{
+public:
+ bool isMetered() const override;
+};
+}
diff --git a/framework/network/internal/networkmanager.cpp b/framework/network/internal/networkmanager.cpp
index 804a066ceb..2127178664 100644
--- a/framework/network/internal/networkmanager.cpp
+++ b/framework/network/internal/networkmanager.cpp
@@ -27,6 +27,8 @@
#include "networkerrors.h"
+#include "log.h"
+
using namespace muse;
using namespace muse::network;
using namespace muse::async;
@@ -190,7 +192,11 @@ RetVal