diff --git a/packages/backend-rs/index.d.ts b/packages/backend-rs/index.d.ts
index d3bb13164a..3770056d8f 100644
--- a/packages/backend-rs/index.d.ts
+++ b/packages/backend-rs/index.d.ts
@@ -136,6 +136,19 @@ export function toPuny(host: string): string
export function formatMilliseconds(milliseconds: number): string
export function toMastodonId(firefishId: string): string | null
export function fromMastodonId(mastodonId: string): string | null
+export function fetchMeta(useCache: boolean): Promise
+export interface PugArgs {
+ img: string | null
+ title: string
+ instanceName: string
+ desc: string | null
+ icon: string | null
+ splashIcon: string | null
+ themeColor: string | null
+ randomMotd: string
+ privateMode: boolean | null
+}
+export function metaToPugArgs(meta: Meta): PugArgs
export function nyaify(text: string, lang?: string | undefined | null): string
export function hashPassword(password: string): string
export function verifyPassword(password: string, hash: string): boolean
diff --git a/packages/backend-rs/index.js b/packages/backend-rs/index.js
index 6fbfe9414d..363c858e4a 100644
--- a/packages/backend-rs/index.js
+++ b/packages/backend-rs/index.js
@@ -310,7 +310,7 @@ if (!nativeBinding) {
throw new Error(`Failed to load native binding`)
}
-const { readServerConfig, stringToAcct, acctToString, checkWordMute, getFullApAccount, isSelfHost, isSameOrigin, extractHost, toPuny, formatMilliseconds, toMastodonId, fromMastodonId, nyaify, hashPassword, verifyPassword, isOldPasswordAlgorithm, AntennaSrcEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding
+const { readServerConfig, stringToAcct, acctToString, checkWordMute, getFullApAccount, isSelfHost, isSameOrigin, extractHost, toPuny, formatMilliseconds, toMastodonId, fromMastodonId, fetchMeta, metaToPugArgs, nyaify, hashPassword, verifyPassword, isOldPasswordAlgorithm, AntennaSrcEnum, MutedNoteReasonEnum, NoteVisibilityEnum, NotificationTypeEnum, PageVisibilityEnum, PollNotevisibilityEnum, RelayStatusEnum, UserEmojimodpermEnum, UserProfileFfvisibilityEnum, UserProfileMutingnotificationtypesEnum, initIdGenerator, getTimestamp, genId, secureRndstr } = nativeBinding
module.exports.readServerConfig = readServerConfig
module.exports.stringToAcct = stringToAcct
@@ -324,6 +324,8 @@ module.exports.toPuny = toPuny
module.exports.formatMilliseconds = formatMilliseconds
module.exports.toMastodonId = toMastodonId
module.exports.fromMastodonId = fromMastodonId
+module.exports.fetchMeta = fetchMeta
+module.exports.metaToPugArgs = metaToPugArgs
module.exports.nyaify = nyaify
module.exports.hashPassword = hashPassword
module.exports.verifyPassword = verifyPassword
diff --git a/packages/backend-rs/src/misc/meta.rs b/packages/backend-rs/src/misc/meta.rs
new file mode 100644
index 0000000000..5aed617038
--- /dev/null
+++ b/packages/backend-rs/src/misc/meta.rs
@@ -0,0 +1,83 @@
+use crate::database::db_conn;
+use crate::model::entity::meta;
+use rand::prelude::*;
+use sea_orm::{prelude::*, ActiveValue};
+use std::sync::Mutex;
+
+type Meta = meta::Model;
+
+static CACHE: Mutex