diff --git a/gplugin-gtk4/gplugin-gtk-plugin-page.h b/gplugin-gtk4/gplugin-gtk-plugin-page.h
--- a/gplugin-gtk4/gplugin-gtk-plugin-page.h
+++ b/gplugin-gtk4/gplugin-gtk-plugin-page.h
@@ -47,6 +47,12 @@ void gplugin_gtk_plugin_page_set_plugin(
 	GPluginPlugin *plugin);
 GPluginPlugin *gplugin_gtk_plugin_page_get_plugin(GPluginGtkPluginPage *page);
 
+void gplugin_gtk_plugin_page_set_settings_backend(
+	GPluginGtkPluginPage *page,
+	gpointer backend);
+gpointer gplugin_gtk_plugin_page_get_settings_backend(
+	GPluginGtkPluginPage *page);
+
 G_END_DECLS
 
 #endif /* GPLUGIN_GTK_PLUGIN_PAGE_H */
# HG changeset patch
# Node ID 3d069c64056d
# Parent  19766118a98d
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-page.c b/gplugin-gtk4/gplugin-gtk-plugin-page.c
--- a/gplugin-gtk4/gplugin-gtk-plugin-page.c
+++ b/gplugin-gtk4/gplugin-gtk-plugin-page.c
@@ -22,6 +22,9 @@
 #include <gplugin-gtk-plugin-closures.h>
 #include <gplugin-gtk-plugin-page.h>
 
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
 /**
  * GPluginGtkPluginPage:
  *
@@ -38,6 +41,7 @@ struct _GPluginGtkPluginPage {
 	GtkBox parent;
 
 	GPluginPlugin *plugin;
+	GSettingsBackend *backend;
 };
 
 /******************************************************************************
@@ -46,6 +50,7 @@ struct _GPluginGtkPluginPage {
 enum {
 	PROP_ZERO,
 	PROP_PLUGIN,
+	PROP_SETTINGS_BACKEND,
 	N_PROPERTIES,
 };
 static GParamSpec *properties[N_PROPERTIES] = {
@@ -159,6 +164,11 @@ gplugin_gtk_plugin_page_set_property(
 		case PROP_PLUGIN:
 			gplugin_gtk_plugin_page_set_plugin(page, g_value_get_object(value));
 			break;
+		case PROP_SETTINGS_BACKEND:
+			gplugin_gtk_plugin_page_set_settings_backend(
+				page,
+				g_value_get_object(value));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
 			break;
@@ -178,6 +188,11 @@ gplugin_gtk_plugin_page_get_property(
 		case PROP_PLUGIN:
 			g_value_set_object(value, gplugin_gtk_plugin_page_get_plugin(page));
 			break;
+		case PROP_SETTINGS_BACKEND:
+			g_value_set_object(
+				value,
+				gplugin_gtk_plugin_page_get_settings_backend(page));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
 			break;
@@ -226,6 +241,20 @@ gplugin_gtk_plugin_page_class_init(GPlug
 		G_TYPE_OBJECT,
 		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * GPluginGtkPluginPage:settings-backend:
+	 *
+	 * The [class@Gio.SettingsBackend] to use when viewing plugin settings.
+	 *
+	 * Since: 0.40.0
+	 */
+	properties[PROP_SETTINGS_BACKEND] = g_param_spec_object(
+		"settings-backend",
+		"settings-backend",
+		"The settings backend to use when viewing plugin settings",
+		G_TYPE_SETTINGS_BACKEND,
+		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
 	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
 
 	/* signals */
@@ -346,3 +375,55 @@ gplugin_gtk_plugin_page_get_plugin(GPlug
 
 	return page->plugin;
 }
+
+/**
+ * gplugin_gtk_plugin_page_set_settings_backend:
+ * @page: The plugin page instance.
+ * @backend: (transfer none) (nullable): The settings backend to use. If %NULL,
+ *           the default GSettings backend will be used.
+ *
+ * Sets the settings backend to use when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function takes a `gpointer` instead of a
+ * `GSettingsBackend *` but the type will be checked internally.
+ *
+ * Since: 0.40.0
+ */
+void
+gplugin_gtk_plugin_page_set_settings_backend(
+	GPluginGtkPluginPage *page,
+	gpointer backend)
+{
+	g_return_if_fail(GPLUGIN_GTK_IS_PLUGIN_PAGE(page));
+	g_return_if_fail(G_IS_SETTINGS_BACKEND(backend) || backend == NULL);
+
+	if(g_set_object(&page->backend, backend)) {
+		g_object_notify_by_pspec(
+			G_OBJECT(page),
+			properties[PROP_SETTINGS_BACKEND]);
+	}
+}
+
+/**
+ * gplugin_gtk_plugin_page_get_settings_backend:
+ * @page: The plugin page instance.
+ *
+ * Gets the settings backend used when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function returns a `gpointer`, and you should cast to
+ * `GSettingsBackend *` after setting `G_SETTINGS_ENABLE_BACKEND` for the files
+ * where you need it.
+ *
+ * Returns: (transfer none): The settings backend in use.
+ *
+ * Since: 0.40.0
+ */
+gpointer
+gplugin_gtk_plugin_page_get_settings_backend(GPluginGtkPluginPage *page)
+{
+	g_return_val_if_fail(GPLUGIN_GTK_IS_PLUGIN_PAGE(page), NULL);
+
+	return page->backend;
+}
diff --git a/gplugin-gtk4/gplugin-gtk-view.h b/gplugin-gtk4/gplugin-gtk-view.h
--- a/gplugin-gtk4/gplugin-gtk-view.h
+++ b/gplugin-gtk4/gplugin-gtk-view.h
@@ -52,6 +52,11 @@ void gplugin_gtk_view_set_show_internal(
 	gboolean show_internal);
 gboolean gplugin_gtk_view_get_show_internal(GPluginGtkView *view);
 
+void gplugin_gtk_view_set_settings_backend(
+	GPluginGtkView *view,
+	gpointer backend);
+gpointer gplugin_gtk_view_get_settings_backend(GPluginGtkView *view);
+
 void gplugin_gtk_view_show_overview(GPluginGtkView *view);
 void gplugin_gtk_view_show_plugin(GPluginGtkView *view, GPluginPlugin *plugin);
 
diff --git a/gplugin-gtk4/gplugin-gtk-view.c b/gplugin-gtk4/gplugin-gtk-view.c
--- a/gplugin-gtk4/gplugin-gtk-view.c
+++ b/gplugin-gtk4/gplugin-gtk-view.c
@@ -21,6 +21,9 @@
 #include <gplugin-gtk-plugin-row.h>
 #include <gplugin-gtk-view.h>
 
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
 /**
  * GPluginGtkView:
  *
@@ -35,6 +38,7 @@ struct _GPluginGtkView {
 	GtkBox parent;
 
 	GPluginManager *manager;
+	GSettingsBackend *backend;
 	gboolean show_internal;
 	GtkWidget *stack;
 
@@ -54,6 +58,7 @@ enum {
 	PROP_ZERO,
 	PROP_MANAGER,
 	PROP_SHOW_INTERNAL,
+	PROP_SETTINGS_BACKEND,
 	N_PROPERTIES,
 };
 static GParamSpec *properties[N_PROPERTIES] = {
@@ -214,6 +219,11 @@ gplugin_gtk_view_set_property(
 				view,
 				g_value_get_boolean(value));
 			break;
+		case PROP_SETTINGS_BACKEND:
+			gplugin_gtk_view_set_settings_backend(
+				view,
+				g_value_get_object(value));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
 			break;
@@ -238,6 +248,11 @@ gplugin_gtk_view_get_property(
 				value,
 				gplugin_gtk_view_get_show_internal(view));
 			break;
+		case PROP_SETTINGS_BACKEND:
+			g_value_set_object(
+				value,
+				gplugin_gtk_view_get_settings_backend(view));
+			break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
 			break;
@@ -327,6 +342,18 @@ gplugin_gtk_view_class_init(GPluginGtkVi
 		FALSE,
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
+	/**
+	 * GPluginGtkView:settings-backend:
+	 *
+	 * The [class@Gio.SettingsBackend] to use when viewing plugin settings.
+	 */
+	properties[PROP_SETTINGS_BACKEND] = g_param_spec_object(
+		"settings-backend",
+		"settings-backend",
+		"The settings backend to use when viewing plugin settings",
+		G_TYPE_SETTINGS_BACKEND,
+		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
 	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
 }
 
@@ -451,6 +478,59 @@ gplugin_gtk_view_get_show_internal(GPlug
 }
 
 /**
+ * gplugin_gtk_view_set_settings_backend:
+ * @view: The GTK view instance.
+ * @backend: (transfer none) (nullable): The settings backend to use. If %NULL,
+ *           the default GSettings backend will be used.
+ *
+ * Sets the settings backend to use when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function takes a `gpointer` instead of a
+ * `GSettingsBackend *` but the type will be checked internally.
+ *
+ * Since: 0.40.0
+ */
+void
+gplugin_gtk_view_set_settings_backend(GPluginGtkView *view, gpointer backend)
+{
+	g_return_if_fail(GPLUGIN_GTK_IS_VIEW(view));
+	g_return_if_fail(G_IS_SETTINGS_BACKEND(backend) || backend == NULL);
+
+	if(g_set_object(&view->backend, backend)) {
+		gplugin_gtk_plugin_page_set_settings_backend(
+			GPLUGIN_GTK_PLUGIN_PAGE(view->plugin_page),
+			view->backend);
+		g_object_notify_by_pspec(
+			G_OBJECT(view),
+			properties[PROP_SETTINGS_BACKEND]);
+	}
+}
+
+/**
+ * gplugin_gtk_view_get_settings_backend:
+ * @view: The GTK view instance.
+ *
+ * Gets the settings backend used when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function returns a `gpointer`, and you should cast to
+ * `GSettingsBackend *` after setting `G_SETTINGS_ENABLE_BACKEND` for the files
+ * where you need it.
+ *
+ * Returns: (transfer none): The settings backend.
+ *
+ * Since: 0.40.0
+ */
+gpointer
+gplugin_gtk_view_get_settings_backend(GPluginGtkView *view)
+{
+	g_return_val_if_fail(GPLUGIN_GTK_IS_VIEW(view), NULL);
+
+	return view->backend;
+}
+
+/**
  * gplugin_gtk_view_show_overview:
  * @view: The GTK view instance.
  *
