diff --git a/packages/client/src/init.ts b/packages/client/src/init.ts
index b15291174b1c236fbdec8330572d7aa37e93d53f..113324d4947563845c35af2aeb73b226582ef299 100644
--- a/packages/client/src/init.ts
+++ b/packages/client/src/init.ts
@@ -29,7 +29,7 @@ import { stream } from '@/stream';
 import * as sound from '@/scripts/sound';
 import { $i, refreshAccount, login, updateAccount, signout } from '@/account';
 import { defaultStore, ColdDeviceStorage } from '@/store';
-import { instance, instanceMetaReady } from '@/instance';
+import { fetchInstance, instance } from '@/instance';
 import { makeHotkey } from '@/scripts/hotkey';
 import { search } from '@/scripts/search';
 import { deviceKind } from '@/scripts/device-kind';
@@ -159,7 +159,7 @@ if ($i && $i.token) {
 }
 //#endregion
 
-instanceMetaReady.then(() => {
+fetchInstance().then(() => {
 	localStorage.setItem('v', instance.version);
 
 	// Init service worker
diff --git a/packages/client/src/instance.ts b/packages/client/src/instance.ts
index 85ad84b43c14c9aea2a58e3a3650902bce6078a7..6e912aa2e51786d7a69b51f621e5e0db79537a86 100644
--- a/packages/client/src/instance.ts
+++ b/packages/client/src/instance.ts
@@ -8,11 +8,11 @@ const data = localStorage.getItem('instance');
 
 // TODO: instanceをリアクティブにするかは再考の余地あり
 
-export const instance: Misskey.entities.InstanceMetadata = reactive(data != null ? JSON.parse(data) : {
+export const instance: Misskey.entities.InstanceMetadata = reactive(data ? JSON.parse(data) : {
 	// TODO: set default values
 });
 
-async function fetchInstance() {
+export async function fetchInstance() {
 	const meta = await api('meta', {
 		detail: false
 	});
@@ -24,11 +24,6 @@ async function fetchInstance() {
 	localStorage.setItem('instance', JSON.stringify(instance));
 }
 
-const initialFetchPromise = fetchInstance();
-export const instanceMetaReady = data != null ? Promise.resolve() : initialFetchPromise;
-
-export const refetchInstanceMeta = fetchInstance;
-
 export const emojiCategories = computed(() => {
 	if (instance.emojis == null) return [];
 	const categories = new Set();
diff --git a/packages/client/src/pages/admin/bot-protection.vue b/packages/client/src/pages/admin/bot-protection.vue
index 797080c1d22e933fd2d9e8d09213e534248f4000..82ab1553178d8775b97bcdd6f9dc05f143c5fcd1 100644
--- a/packages/client/src/pages/admin/bot-protection.vue
+++ b/packages/client/src/pages/admin/bot-protection.vue
@@ -52,7 +52,7 @@ import FormSuspense from '@/components/form/suspense.vue';
 import FormSlot from '@/components/form/slot.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -109,7 +109,7 @@ export default defineComponent({
 				recaptchaSiteKey: this.recaptchaSiteKey,
 				recaptchaSecretKey: this.recaptchaSecretKey,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/email-settings.vue b/packages/client/src/pages/admin/email-settings.vue
index c8135e6baf6fd9d0b68678c27d235f3b337ae1fa..6491a453ab7792dae9df61bd9ca3759a62065a90 100644
--- a/packages/client/src/pages/admin/email-settings.vue
+++ b/packages/client/src/pages/admin/email-settings.vue
@@ -52,7 +52,7 @@ import FormSplit from '@/components/form/split.vue';
 import FormSection from '@/components/form/section.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -129,7 +129,7 @@ export default defineComponent({
 				smtpUser: this.smtpUser,
 				smtpPass: this.smtpPass,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/instance-block.vue b/packages/client/src/pages/admin/instance-block.vue
index 97b2887d44151a8acf3102b7b1f2a47b3fb73eb8..6cadc7df391e8123a9b87d5f950964b76f7c95ad 100644
--- a/packages/client/src/pages/admin/instance-block.vue
+++ b/packages/client/src/pages/admin/instance-block.vue
@@ -18,7 +18,7 @@ import FormTextarea from '@/components/form/textarea.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -50,7 +50,7 @@ export default defineComponent({
 			os.apiWithDialog('admin/update-meta', {
 				blockedHosts: this.blockedHosts.split('\n') || [],
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/integrations.discord.vue b/packages/client/src/pages/admin/integrations.discord.vue
index 87ea65e26ef179068657d272d156ee6d6dd31820..8fc340150a841dd3d9139a48f3daf3469e029773 100644
--- a/packages/client/src/pages/admin/integrations.discord.vue
+++ b/packages/client/src/pages/admin/integrations.discord.vue
@@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -72,7 +72,7 @@ export default defineComponent({
 				discordClientId: this.discordClientId,
 				discordClientSecret: this.discordClientSecret,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/integrations.github.vue b/packages/client/src/pages/admin/integrations.github.vue
index 6990fa6f4797d37cc840475eb183cab672817944..d9db9c00f1d2f18be08dc2248d5f3716b6ce33e6 100644
--- a/packages/client/src/pages/admin/integrations.github.vue
+++ b/packages/client/src/pages/admin/integrations.github.vue
@@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -72,7 +72,7 @@ export default defineComponent({
 				githubClientId: this.githubClientId,
 				githubClientSecret: this.githubClientSecret,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/integrations.twitter.vue b/packages/client/src/pages/admin/integrations.twitter.vue
index 3337b5e0ed4fb9ffda1bbd6d7cd945485a89ce19..1f8074535aa64648c7b677e08cc6bcbaa82fb13d 100644
--- a/packages/client/src/pages/admin/integrations.twitter.vue
+++ b/packages/client/src/pages/admin/integrations.twitter.vue
@@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -72,7 +72,7 @@ export default defineComponent({
 				twitterConsumerKey: this.twitterConsumerKey,
 				twitterConsumerSecret: this.twitterConsumerSecret,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/integrations.vue b/packages/client/src/pages/admin/integrations.vue
index 23ae5d1b767eab38ebad5df8277c9cd04a7850f3..91d03fef31729b79f330753c45f0030432644020 100644
--- a/packages/client/src/pages/admin/integrations.vue
+++ b/packages/client/src/pages/admin/integrations.vue
@@ -33,7 +33,7 @@ import XGithub from './integrations.github.vue';
 import XDiscord from './integrations.discord.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
diff --git a/packages/client/src/pages/admin/object-storage.vue b/packages/client/src/pages/admin/object-storage.vue
index 64c08e30ab927e719272b589869cf2cb80e5ce37..6c5be220f85b07da509292b77c83283d1ecdfee0 100644
--- a/packages/client/src/pages/admin/object-storage.vue
+++ b/packages/client/src/pages/admin/object-storage.vue
@@ -75,7 +75,7 @@ import FormSplit from '@/components/form/split.vue';
 import FormSection from '@/components/form/section.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -151,7 +151,7 @@ export default defineComponent({
 				objectStorageSetPublicRead: this.objectStorageSetPublicRead,
 				objectStorageS3ForcePathStyle: this.objectStorageS3ForcePathStyle,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/other-settings.vue b/packages/client/src/pages/admin/other-settings.vue
index abf420b156a333464ee489e82a46ff89be1a38a6..6b588e88aaa4f12f195636fd9b53177d09f65152 100644
--- a/packages/client/src/pages/admin/other-settings.vue
+++ b/packages/client/src/pages/admin/other-settings.vue
@@ -14,7 +14,7 @@ import FormSection from '@/components/form/section.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -49,7 +49,7 @@ export default defineComponent({
 		save() {
 			os.apiWithDialog('admin/update-meta', {
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/proxy-account.vue b/packages/client/src/pages/admin/proxy-account.vue
index 4a2b22d2a6013442e4e2f018cf5eb1f3753c24a2..5c4fbffa0c8813e758948e24c02ccc4c889d7ea7 100644
--- a/packages/client/src/pages/admin/proxy-account.vue
+++ b/packages/client/src/pages/admin/proxy-account.vue
@@ -20,7 +20,7 @@ import MkInfo from '@/components/ui/info.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -65,7 +65,7 @@ export default defineComponent({
 			os.apiWithDialog('admin/update-meta', {
 				proxyAccountId: this.proxyAccountId,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/security.vue b/packages/client/src/pages/admin/security.vue
index af5f458654e8fad50c8c5025ba11bb463b397d35..d069891647883d9ed00a63c216c0294a0ba826dd 100644
--- a/packages/client/src/pages/admin/security.vue
+++ b/packages/client/src/pages/admin/security.vue
@@ -41,7 +41,7 @@ import FormButton from '@/components/ui/button.vue';
 import XBotProtection from './bot-protection.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -82,7 +82,7 @@ export default defineComponent({
 			os.apiWithDialog('admin/update-meta', {
 				summalyProxy: this.summalyProxy,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/admin/settings.vue b/packages/client/src/pages/admin/settings.vue
index 84462c7e841c05b79c8ef6925991c642a58f9104..5cf4d6c882faf4b77ce3485797363a803fea547a 100644
--- a/packages/client/src/pages/admin/settings.vue
+++ b/packages/client/src/pages/admin/settings.vue
@@ -139,7 +139,7 @@ import FormSplit from '@/components/form/split.vue';
 import FormSuspense from '@/components/form/suspense.vue';
 import * as os from '@/os';
 import * as symbols from '@/symbols';
-import { refetchInstanceMeta } from '@/instance';
+import { fetchInstance } from '@/instance';
 
 export default defineComponent({
 	components: {
@@ -244,7 +244,7 @@ export default defineComponent({
 				deeplAuthKey: this.deeplAuthKey,
 				deeplIsPro: this.deeplIsPro,
 			}).then(() => {
-				refetchInstanceMeta();
+				fetchInstance();
 			});
 		}
 	}
diff --git a/packages/client/src/pages/settings/theme.vue b/packages/client/src/pages/settings/theme.vue
index 72b7e69174b76afc28fe14206c22c81f5fc1c563..3e4ec1b2af79f07a59eae97aead3f10eb6ab9179 100644
--- a/packages/client/src/pages/settings/theme.vue
+++ b/packages/client/src/pages/settings/theme.vue
@@ -123,8 +123,8 @@ export default defineComponent({
 
 		const installedThemes = ref(getThemes());
 		const themes = computed(() => builtinThemes.concat(installedThemes.value));
-		const darkThemes = computed(() => themes.value.filter(t => t.base === 'dark' || t.kind === 'dark'));
-		const lightThemes = computed(() => themes.value.filter(t => t.base === 'light' || t.kind === 'light'));
+		const darkThemes = computed(() => themes.value.filter(t => t.base == 'dark' || t.kind == 'dark'));
+		const lightThemes = computed(() => themes.value.filter(t => t.base == 'light' || t.kind == 'light'));
 		const darkTheme = ColdDeviceStorage.ref('darkTheme');
 		const darkThemeId = computed({
 			get() {