diff --git a/packages/client/src/App.vue b/packages/client/src/App.vue
index f03aff414..fbd510e72 100644
--- a/packages/client/src/App.vue
+++ b/packages/client/src/App.vue
@@ -1,13 +1,13 @@
diff --git a/packages/client/src/components/common/IframeView.vue b/packages/client/src/components/common/IframeView.vue
index 0979b02e8..ff8b97a32 100644
--- a/packages/client/src/components/common/IframeView.vue
+++ b/packages/client/src/components/common/IframeView.vue
@@ -1,4 +1,6 @@
@@ -7,7 +9,7 @@ const props = defineProps<{
src: string
}>()
-const colorMode = useColorMode()
+const { colorMode } = useDevtoolsColorMode()
const anchor = ref()
const key = computed(() => props.src)
const iframeEl = ref()
diff --git a/packages/client/src/composables/graph.ts b/packages/client/src/composables/graph.ts
index d5452f82f..e7d71b926 100644
--- a/packages/client/src/composables/graph.ts
+++ b/packages/client/src/composables/graph.ts
@@ -1,7 +1,7 @@
import type { ModuleInfo } from '@vue/devtools-core'
import { DataSet } from 'vis-network/standalone'
import type { Edge, Node, Options } from 'vis-network'
-import { deepClone } from '@vue/devtools-shared'
+import { deepClone, useDevtoolsColorMode } from '@vue/devtools-shared'
// #region file types
export const fileTypes = {
@@ -52,7 +52,7 @@ export function useFileTypes() {
// #endregion
// #region graph options
-const isDark = useDark()
+const { isDark } = useDevtoolsColorMode()
export const graphOptions = computed(() => ({
nodes: {
diff --git a/packages/overlay/src/App.vue b/packages/overlay/src/App.vue
index f92568258..48d020507 100644
--- a/packages/overlay/src/App.vue
+++ b/packages/overlay/src/App.vue
@@ -1,16 +1,18 @@
diff --git a/packages/shared/package.json b/packages/shared/package.json
index cce011e3d..6f39b5397 100644
--- a/packages/shared/package.json
+++ b/packages/shared/package.json
@@ -20,6 +20,18 @@
"prepare:type": "tsup --dts-only",
"stub": "tsup --watch --onSuccess 'tsup --dts-only'"
},
+ "peerDependencies": {
+ "@vueuse/core": ">=10.0.0",
+ "vue": ">=3.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@vueuse/core": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ }
+ },
"dependencies": {
"rfdc": "^1.3.1"
},
diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts
index 2a62c99c8..c836ac133 100644
--- a/packages/shared/src/constants.ts
+++ b/packages/shared/src/constants.ts
@@ -2,3 +2,4 @@ export const VIEW_MODE_STORAGE_KEY = '__vue-devtools-view-mode__'
export const VITE_PLUGIN_DETECTED_STORAGE_KEY = '__vue-devtools-vite-plugin-detected__'
export const VITE_PLUGIN_CLIENT_URL_STORAGE_KEY = '__vue-devtools-vite-plugin-client-url__'
export const BROADCAST_CHANNEL_NAME = '__vue-devtools-broadcast-channel__'
+export const THEME_KEY = '__vue-devtools-theme__'
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
index 298f33d94..bab50eed8 100644
--- a/packages/shared/src/index.ts
+++ b/packages/shared/src/index.ts
@@ -1,3 +1,4 @@
export * from './env'
export * from './general'
export * from './constants'
+export * from './theme'
diff --git a/packages/shared/src/theme.ts b/packages/shared/src/theme.ts
new file mode 100644
index 000000000..e7895bae3
--- /dev/null
+++ b/packages/shared/src/theme.ts
@@ -0,0 +1,14 @@
+import { type UseColorModeOptions, useColorMode } from '@vueuse/core'
+import { computed } from 'vue'
+import { THEME_KEY } from './constants'
+
+export function useDevtoolsColorMode(options: Omit = {}) {
+ const colorMode = useColorMode({
+ ...options,
+ storageKey: THEME_KEY,
+ })
+ return {
+ colorMode,
+ isDark: computed(() => colorMode.value === 'dark'),
+ }
+}
diff --git a/packages/ui/package.json b/packages/ui/package.json
index ca0a040ca..2a3a81bbe 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -36,6 +36,7 @@
"vue": ">=3.0.0-0"
},
"dependencies": {
+ "@vue/devtools-shared": "workspace:*",
"@vueuse/components": "^10.9.0",
"@vueuse/core": "^10.9.0",
"@vueuse/integrations": "^10.9.0",
diff --git a/packages/ui/src/components/DarkToggle.vue b/packages/ui/src/components/DarkToggle.vue
index 725b9c0b5..2ecf22455 100644
--- a/packages/ui/src/components/DarkToggle.vue
+++ b/packages/ui/src/components/DarkToggle.vue
@@ -1,6 +1,7 @@