diff --git a/src/lang/en.js b/src/lang/en.js
index 8088e441a16560462b82279ed32cf49c1263e992..fd23f37957958a83319e584f3a3d04e509a78f2e 100644
--- a/src/lang/en.js
+++ b/src/lang/en.js
@@ -312,7 +312,8 @@ export default {
     rateLimiters: 'Rate limiters',
     database: 'Database',
     other: 'Other',
-    success: 'Settings changed successfully!'
+    success: 'Settings changed successfully!',
+    emojiPacks: 'Emoji packs'
   },
   invites: {
     inviteTokens: 'Invite tokens',
diff --git a/src/router/index.js b/src/router/index.js
index a5c496cc4a1a594cb7c256af5402be06e844444e..53dbf8ec2eecc7aae194bd9cdbb0843b2963d797 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -63,20 +63,6 @@ const moderationLog = {
   ]
 }
 
-const emojiPacksDisabled = disabledFeatures.includes('emoji-packs')
-const emojiPacks = {
-  path: '/emoji-packs',
-  component: Layout,
-  children: [
-    {
-      path: 'index',
-      component: () => import('@/views/emoji-packs/index'),
-      name: 'Emoji packs',
-      meta: { title: 'emoji-packs', icon: 'settings', noCache: true }
-    }
-  ]
-}
-
 export const constantRouterMap = [
   {
     path: '/redirect',
@@ -144,7 +130,6 @@ export const asyncRouterMap = [
   ...(invitesDisabled ? [] : [invites]),
   ...(moderationLogDisabled ? [] : [moderationLog]),
   ...(settingsDisabled ? [] : [settings]),
-  ...(emojiPacksDisabled ? [] : [emojiPacks]),
   {
     path: '/users/:id',
     component: Layout,
diff --git a/src/views/settings/index.vue b/src/views/settings/index.vue
index 79ae772754314ecd1f995692c49cff437455d5fb..5e0c482b3c4c1363ddef738f347853c85df18506 100644
--- a/src/views/settings/index.vue
+++ b/src/views/settings/index.vue
@@ -23,6 +23,9 @@
       <el-tab-pane :label="$t('settings.endpoint')">
         <endpoint/>
       </el-tab-pane>
+      <el-tab-pane :label="$t('settings.emojiPacks')">
+        <emoji-packs/>
+      </el-tab-pane>
       <el-tab-pane :label="$t('settings.frontend')">
         <frontend/>
       </el-tab-pane>
@@ -71,9 +74,10 @@
 
 <script>
 import { ActivityPub, Authentication, AutoLinker, Captcha, Database, Endpoint, Esshd, Frontend, Gopher, Http, Instance, JobQueue, Logger, Mailer, MediaProxy, Metadata, Mrf, Other, RateLimiters, Upload, WebPush } from './components'
+import EmojiPacks from '../emojiPacks/index'
 
 export default {
-  components: { ActivityPub, Authentication, AutoLinker, Captcha, Database, Endpoint, Esshd, Frontend, Gopher, Http, Instance, JobQueue, Logger, Mailer, MediaProxy, Metadata, Mrf, Other, RateLimiters, Upload, WebPush },
+  components: { ActivityPub, Authentication, AutoLinker, Captcha, Database, Endpoint, EmojiPacks, Esshd, Frontend, Gopher, Http, Instance, JobQueue, Logger, Mailer, MediaProxy, Metadata, Mrf, Other, RateLimiters, Upload, WebPush },
   computed: {
     isMobile() {
       return this.$store.state.app.device === 'mobile'