diff --git a/src/components/debugging/StorageViewer.svelte b/src/components/debugging/StorageViewer.svelte
new file mode 100644
index 0000000..0a9bb49
--- /dev/null
+++ b/src/components/debugging/StorageViewer.svelte
@@ -0,0 +1,93 @@
+
+
+
+
+ / {storage}
+ {#each breadcrumbs as [name, entryPath]}
+ / {name}
+ {/each}
+
+{#if targetObject}
+
+{/if}
+
+
diff --git a/src/lib/utils.js b/src/lib/utils.js
new file mode 100644
index 0000000..db17ea5
--- /dev/null
+++ b/src/lib/utils.js
@@ -0,0 +1,23 @@
+/**
+ * Traverse and find the object using the key path.
+ * @param {Object} targetObject Target object to traverse into.
+ * @param {string[]} path Path of keys to traverse deep into the object.
+ * @return {Object|null} Resulting object or null if nothing found (or target entry is not an object.
+ */
+export function findDeepObject(targetObject, path) {
+ let result = targetObject;
+
+ for (let key of path) {
+ if (!result || typeof result !== 'object') {
+ return null;
+ }
+
+ result = result[key];
+ }
+
+ if (!result || typeof result !== "object") {
+ return null;
+ }
+
+ return result;
+}
diff --git a/src/routes/preferences/+page.svelte b/src/routes/preferences/+page.svelte
index c9f37fe..bc1d369 100644
--- a/src/routes/preferences/+page.svelte
+++ b/src/routes/preferences/+page.svelte
@@ -8,4 +8,6 @@
+
+
diff --git a/src/routes/preferences/debug/+page.svelte b/src/routes/preferences/debug/+page.svelte
new file mode 100644
index 0000000..31e7210
--- /dev/null
+++ b/src/routes/preferences/debug/+page.svelte
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/routes/preferences/debug/storage/+page.svelte b/src/routes/preferences/debug/storage/+page.svelte
new file mode 100644
index 0000000..ae87de5
--- /dev/null
+++ b/src/routes/preferences/debug/storage/+page.svelte
@@ -0,0 +1,13 @@
+
+
+
diff --git a/src/routes/preferences/debug/storage/[...path]/+page.svelte b/src/routes/preferences/debug/storage/[...path]/+page.svelte
new file mode 100644
index 0000000..fecea3c
--- /dev/null
+++ b/src/routes/preferences/debug/storage/[...path]/+page.svelte
@@ -0,0 +1,29 @@
+
+
+{#if storageName}
+
+{/if}
diff --git a/src/stores/debug.js b/src/stores/debug.js
new file mode 100644
index 0000000..02c17fe
--- /dev/null
+++ b/src/stores/debug.js
@@ -0,0 +1,21 @@
+import {writable} from "svelte/store";
+
+/**
+ * This is readable version of storages. Any changes made to these objects will not be sent to the local storage.
+ * @type {Writable>}
+ */
+export const storagesCollection = writable({});
+
+chrome.storage.local.get(storages => {
+ storagesCollection.set(storages);
+});
+
+chrome.storage.local.onChanged.addListener(changes => {
+ storagesCollection.update(storages => {
+ for (let updatedStorageName of Object.keys(changes)) {
+ storages[updatedStorageName] = changes[updatedStorageName].newValue;
+ }
+
+ return storages;
+ })
+});