diff --git a/packages/backend/.mocharc.json b/packages/backend/.mocharc.json
index 278a5b310a..26628066eb 100644
--- a/packages/backend/.mocharc.json
+++ b/packages/backend/.mocharc.json
@@ -1,6 +1,9 @@
 {
 	"extension": ["ts","js","cjs","mjs"],
-	"require": ["ts-node/register", "tsconfig-paths/register"],
+	"node-option": [
+		"experimental-specifier-resolution=node",
+		"loader=./test/loader.js"
+	],
 	"slow": 1000,
 	"timeout": 35000,
 	"exit": true
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 15118047a2..1f1d582f1c 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -1,6 +1,7 @@
 {
 	"main": "./index.js",
 	"private": true,
+	"type": "module",
 	"scripts": {
 		"init": "npm run migrate",
 		"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
@@ -18,14 +19,13 @@
 		"@elastic/elasticsearch": "7.11.0",
 		"@koa/cors": "3.1.0",
 		"@koa/multer": "3.0.0",
-		"@koa/router": "9.0.1",
+		"@koa/router": "10.1.1",
 		"@sinonjs/fake-timers": "9.1.0",
 		"@syuilo/aiscript": "0.11.1",
 		"@types/bcryptjs": "2.4.2",
 		"@types/bull": "3.15.8",
 		"@types/cbor": "6.0.0",
 		"@types/escape-regexp": "0.0.1",
-		"@types/glob": "7.2.0",
 		"@types/is-url": "1.2.30",
 		"@types/js-yaml": "4.0.5",
 		"@types/jsdom": "16.2.14",
@@ -82,8 +82,10 @@
 		"cacheable-lookup": "6.0.4",
 		"cafy": "15.2.1",
 		"cbor": "8.1.0",
-		"chalk": "4.1.2",
+		"chalk": "5.0.0",
+		"chalk-template": "0.3.1",
 		"cli-highlight": "2.1.11",
+		"color-convert": "2.0.1",
 		"content-disposition": "0.5.4",
 		"date-fns": "2.28.0",
 		"deep-email-validator": "0.1.21",
@@ -94,7 +96,6 @@
 		"feed": "4.2.2",
 		"file-type": "16.5.3",
 		"fluent-ffmpeg": "2.1.2",
-		"glob": "7.2.0",
 		"got": "11.8.2",
 		"hpagent": "0.1.2",
 		"http-signature": "1.3.6",
diff --git a/packages/backend/src/@types/probe-image-size.d.ts b/packages/backend/src/@types/probe-image-size.d.ts
index 665edcf2e7..11bb6c620c 100644
--- a/packages/backend/src/@types/probe-image-size.d.ts
+++ b/packages/backend/src/@types/probe-image-size.d.ts
@@ -1,5 +1,5 @@
 declare module 'probe-image-size' {
-	import { ReadStream } from 'fs';
+	import { ReadStream } from 'node:fs';
 
 	type ProbeOptions = {
 		retries: 1;
diff --git a/packages/backend/src/boot/index.ts b/packages/backend/src/boot/index.ts
index 1723c32dd0..5bb20a729f 100644
--- a/packages/backend/src/boot/index.ts
+++ b/packages/backend/src/boot/index.ts
@@ -1,18 +1,18 @@
-import * as cluster from 'cluster';
-import * as chalk from 'chalk';
-import Xev from 'xev';
+import cluster from 'node:cluster';
+import chalk from 'chalk';
+import { default as Xev } from 'xev';
 
-import Logger from '@/services/logger';
-import { envOption } from '../env';
+import Logger from '@/services/logger.js';
+import { envOption } from '../env.js';
 
 // for typeorm
 import 'reflect-metadata';
-import { masterMain } from './master';
-import { workerMain } from './worker';
+import { masterMain } from './master.js';
+import { workerMain } from './worker.js';
 
 const logger = new Logger('core', 'cyan');
 const clusterLogger = logger.createSubLogger('cluster', 'orange', false);
-const ev = new Xev();
+const ev = new Xev.default();
 
 /**
  * Init process
diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts
index eeb7017cb0..1c909dff13 100644
--- a/packages/backend/src/boot/master.ts
+++ b/packages/backend/src/boot/master.ts
@@ -1,22 +1,22 @@
-import * as fs from 'fs';
-import { fileURLToPath } from 'url';
-import { dirname } from 'path';
-import * as os from 'os';
-import * as cluster from 'cluster';
-import * as chalk from 'chalk';
+import * as fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+import * as os from 'node:os';
+import cluster from 'node:cluster';
+import chalk from 'chalk';
+import chalkTemplate from 'chalk-template';
 import * as portscanner from 'portscanner';
 import { getConnection } from 'typeorm';
 
-import Logger from '@/services/logger';
-import loadConfig from '@/config/load';
-import { Config } from '@/config/types';
-import { lessThan } from '@/prelude/array';
-import { envOption } from '../env';
-import { showMachineInfo } from '@/misc/show-machine-info';
-import { initDb } from '../db/postgre';
+import Logger from '@/services/logger.js';
+import loadConfig from '@/config/load.js';
+import { Config } from '@/config/types.js';
+import { lessThan } from '@/prelude/array.js';
+import { envOption } from '../env.js';
+import { showMachineInfo } from '@/misc/show-machine-info.js';
+import { initDb } from '../db/postgre.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/meta.json`, 'utf-8'));
@@ -24,22 +24,24 @@ const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../../built/meta.json
 const logger = new Logger('core', 'cyan');
 const bootLogger = logger.createSubLogger('boot', 'magenta', false);
 
+const themeColor = chalk.hex('#86b300');
+
 function greet() {
 	if (!envOption.quiet) {
 		//#region Misskey logo
 		const v = `v${meta.version}`;
-		console.log('  _____ _         _           ');
-		console.log(' |     |_|___ ___| |_ ___ _ _ ');
-		console.log(' | | | | |_ -|_ -| \'_| -_| | |');
-		console.log(' |_|_|_|_|___|___|_,_|___|_  |');
-		console.log(' ' + chalk.gray(v) + ('                        |___|\n'.substr(v.length)));
+		console.log(themeColor('  _____ _         _           '));
+		console.log(themeColor(' |     |_|___ ___| |_ ___ _ _ '));
+		console.log(themeColor(' | | | | |_ -|_ -| \'_| -_| | |'));
+		console.log(themeColor(' |_|_|_|_|___|___|_,_|___|_  |'));
+		console.log(' ' + chalk.gray(v) + themeColor('                        |___|\n'.substr(v.length)));
 		//#endregion
 
 		console.log(' Misskey is an open-source decentralized microblogging platform.');
-		console.log(chalk.keyword('orange')(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
+		console.log(chalk.rgb(255, 136, 0)(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
 
 		console.log('');
-		console.log(chalk`--- ${os.hostname()} {gray (PID: ${process.pid.toString()})} ---`);
+		console.log(chalkTemplate`--- ${os.hostname()} {gray (PID: ${process.pid.toString()})} ---`);
 	}
 
 	bootLogger.info('Welcome to Misskey!');
@@ -80,9 +82,9 @@ export async function masterMain() {
 	bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true);
 
 	if (!envOption.noDaemons) {
-		require('../daemons/server-stats').default();
-		require('../daemons/queue-stats').default();
-		require('../daemons/janitor').default();
+		import('../daemons/server-stats.js').then(x => x.default());
+		import('../daemons/queue-stats.js').then(x => x.default());
+		import('../daemons/janitor.js').then(x => x.default());
 	}
 }
 
diff --git a/packages/backend/src/boot/worker.ts b/packages/backend/src/boot/worker.ts
index 362fa3f26b..8038e25631 100644
--- a/packages/backend/src/boot/worker.ts
+++ b/packages/backend/src/boot/worker.ts
@@ -1,5 +1,5 @@
-import * as cluster from 'cluster';
-import { initDb } from '../db/postgre';
+import cluster from 'node:cluster';
+import { initDb } from '../db/postgre.js';
 
 /**
  * Init worker process
@@ -8,10 +8,10 @@ export async function workerMain() {
 	await initDb();
 
 	// start server
-	await require('../server').default();
+	await import('../server/index.js').then(x => x.default());
 
 	// start job queue
-	require('../queue').default();
+	import('../queue/index.js').then(x => x.default());
 
 	if (cluster.isWorker) {
 		// Send a 'ready' message to parent process
diff --git a/packages/backend/src/config/index.ts b/packages/backend/src/config/index.ts
index 7bfdca4612..3e53b00036 100644
--- a/packages/backend/src/config/index.ts
+++ b/packages/backend/src/config/index.ts
@@ -1,3 +1,3 @@
-import load from './load';
+import load from './load.js';
 
 export default load();
diff --git a/packages/backend/src/config/load.ts b/packages/backend/src/config/load.ts
index 1b5457cdb0..7f765463e4 100644
--- a/packages/backend/src/config/load.ts
+++ b/packages/backend/src/config/load.ts
@@ -2,14 +2,13 @@
  * Config loader
  */
 
-import * as fs from 'fs';
-import { fileURLToPath } from 'url';
-import { dirname } from 'path';
+import * as fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
 import * as yaml from 'js-yaml';
-import { Source, Mixin } from './types';
+import { Source, Mixin } from './types.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 /**
diff --git a/packages/backend/src/daemons/janitor.ts b/packages/backend/src/daemons/janitor.ts
index 115c1fe380..f2a1bfcc2f 100644
--- a/packages/backend/src/daemons/janitor.ts
+++ b/packages/backend/src/daemons/janitor.ts
@@ -1,7 +1,7 @@
 // TODO: 消したい
 
 const interval = 30 * 60 * 1000;
-import { AttestationChallenges } from '@/models/index';
+import { AttestationChallenges } from '@/models/index.js';
 import { LessThan } from 'typeorm';
 
 /**
diff --git a/packages/backend/src/daemons/queue-stats.ts b/packages/backend/src/daemons/queue-stats.ts
index 5faa16ee44..bfef110545 100644
--- a/packages/backend/src/daemons/queue-stats.ts
+++ b/packages/backend/src/daemons/queue-stats.ts
@@ -1,7 +1,7 @@
-import Xev from 'xev';
-import { deliverQueue, inboxQueue } from '../queue/queues';
+import { default as Xev } from 'xev';
+import { deliverQueue, inboxQueue } from '../queue/queues.js';
 
-const ev = new Xev();
+const ev = new Xev.default();
 
 const interval = 10000;
 
diff --git a/packages/backend/src/daemons/server-stats.ts b/packages/backend/src/daemons/server-stats.ts
index 115e88f150..327305ccc5 100644
--- a/packages/backend/src/daemons/server-stats.ts
+++ b/packages/backend/src/daemons/server-stats.ts
@@ -1,8 +1,8 @@
-import * as si from 'systeminformation';
-import Xev from 'xev';
+import si from 'systeminformation';
+import { default as Xev } from 'xev';
 import * as osUtils from 'os-utils';
 
-const ev = new Xev();
+const ev = new Xev.default();
 
 const interval = 2000;
 
diff --git a/packages/backend/src/db/elasticsearch.ts b/packages/backend/src/db/elasticsearch.ts
index 60a4061d44..d98c5d180b 100644
--- a/packages/backend/src/db/elasticsearch.ts
+++ b/packages/backend/src/db/elasticsearch.ts
@@ -1,5 +1,5 @@
 import * as elasticsearch from '@elastic/elasticsearch';
-import config from '@/config/index';
+import config from '@/config/index.js';
 
 const index = {
 	settings: {
diff --git a/packages/backend/src/db/logger.ts b/packages/backend/src/db/logger.ts
index 62f90555a0..22f4c6b1b0 100644
--- a/packages/backend/src/db/logger.ts
+++ b/packages/backend/src/db/logger.ts
@@ -1,3 +1,3 @@
-import Logger from '@/services/logger';
+import Logger from '@/services/logger.js';
 
 export const dbLogger = new Logger('db');
diff --git a/packages/backend/src/db/postgre.ts b/packages/backend/src/db/postgre.ts
index 69336c2a46..c1f7245bc7 100644
--- a/packages/backend/src/db/postgre.ts
+++ b/packages/backend/src/db/postgre.ts
@@ -1,78 +1,78 @@
 // https://github.com/typeorm/typeorm/issues/2400
-const types = require('pg').types;
-types.setTypeParser(20, Number);
+import pg from 'pg';
+pg.types.setTypeParser(20, Number);
 
 import { createConnection, Logger, getConnection } from 'typeorm';
 import * as highlight from 'cli-highlight';
-import config from '@/config/index';
+import config from '@/config/index.js';
 
-import { dbLogger } from './logger';
+import { dbLogger } from './logger.js';
 
-import { User } from '@/models/entities/user';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFolder } from '@/models/entities/drive-folder';
-import { AccessToken } from '@/models/entities/access-token';
-import { App } from '@/models/entities/app';
-import { PollVote } from '@/models/entities/poll-vote';
-import { Note } from '@/models/entities/note';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { NoteWatching } from '@/models/entities/note-watching';
-import { NoteThreadMuting } from '@/models/entities/note-thread-muting';
-import { NoteUnread } from '@/models/entities/note-unread';
-import { Notification } from '@/models/entities/notification';
-import { Meta } from '@/models/entities/meta';
-import { Following } from '@/models/entities/following';
-import { Instance } from '@/models/entities/instance';
-import { Muting } from '@/models/entities/muting';
-import { SwSubscription } from '@/models/entities/sw-subscription';
-import { Blocking } from '@/models/entities/blocking';
-import { UserList } from '@/models/entities/user-list';
-import { UserListJoining } from '@/models/entities/user-list-joining';
-import { UserGroup } from '@/models/entities/user-group';
-import { UserGroupJoining } from '@/models/entities/user-group-joining';
-import { UserGroupInvitation } from '@/models/entities/user-group-invitation';
-import { Hashtag } from '@/models/entities/hashtag';
-import { NoteFavorite } from '@/models/entities/note-favorite';
-import { AbuseUserReport } from '@/models/entities/abuse-user-report';
-import { RegistrationTicket } from '@/models/entities/registration-tickets';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { Signin } from '@/models/entities/signin';
-import { AuthSession } from '@/models/entities/auth-session';
-import { FollowRequest } from '@/models/entities/follow-request';
-import { Emoji } from '@/models/entities/emoji';
-import { UserNotePining } from '@/models/entities/user-note-pining';
-import { Poll } from '@/models/entities/poll';
-import { UserKeypair } from '@/models/entities/user-keypair';
-import { UserPublickey } from '@/models/entities/user-publickey';
-import { UserProfile } from '@/models/entities/user-profile';
-import { UserSecurityKey } from '@/models/entities/user-security-key';
-import { AttestationChallenge } from '@/models/entities/attestation-challenge';
-import { Page } from '@/models/entities/page';
-import { PageLike } from '@/models/entities/page-like';
-import { GalleryPost } from '@/models/entities/gallery-post';
-import { GalleryLike } from '@/models/entities/gallery-like';
-import { ModerationLog } from '@/models/entities/moderation-log';
-import { UsedUsername } from '@/models/entities/used-username';
-import { Announcement } from '@/models/entities/announcement';
-import { AnnouncementRead } from '@/models/entities/announcement-read';
-import { Clip } from '@/models/entities/clip';
-import { ClipNote } from '@/models/entities/clip-note';
-import { Antenna } from '@/models/entities/antenna';
-import { AntennaNote } from '@/models/entities/antenna-note';
-import { PromoNote } from '@/models/entities/promo-note';
-import { PromoRead } from '@/models/entities/promo-read';
-import { envOption } from '../env';
-import { Relay } from '@/models/entities/relay';
-import { MutedNote } from '@/models/entities/muted-note';
-import { Channel } from '@/models/entities/channel';
-import { ChannelFollowing } from '@/models/entities/channel-following';
-import { ChannelNotePining } from '@/models/entities/channel-note-pining';
-import { RegistryItem } from '@/models/entities/registry-item';
-import { Ad } from '@/models/entities/ad';
-import { PasswordResetRequest } from '@/models/entities/password-reset-request';
-import { UserPending } from '@/models/entities/user-pending';
+import { User } from '@/models/entities/user.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFolder } from '@/models/entities/drive-folder.js';
+import { AccessToken } from '@/models/entities/access-token.js';
+import { App } from '@/models/entities/app.js';
+import { PollVote } from '@/models/entities/poll-vote.js';
+import { Note } from '@/models/entities/note.js';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { NoteWatching } from '@/models/entities/note-watching.js';
+import { NoteThreadMuting } from '@/models/entities/note-thread-muting.js';
+import { NoteUnread } from '@/models/entities/note-unread.js';
+import { Notification } from '@/models/entities/notification.js';
+import { Meta } from '@/models/entities/meta.js';
+import { Following } from '@/models/entities/following.js';
+import { Instance } from '@/models/entities/instance.js';
+import { Muting } from '@/models/entities/muting.js';
+import { SwSubscription } from '@/models/entities/sw-subscription.js';
+import { Blocking } from '@/models/entities/blocking.js';
+import { UserList } from '@/models/entities/user-list.js';
+import { UserListJoining } from '@/models/entities/user-list-joining.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { UserGroupJoining } from '@/models/entities/user-group-joining.js';
+import { UserGroupInvitation } from '@/models/entities/user-group-invitation.js';
+import { Hashtag } from '@/models/entities/hashtag.js';
+import { NoteFavorite } from '@/models/entities/note-favorite.js';
+import { AbuseUserReport } from '@/models/entities/abuse-user-report.js';
+import { RegistrationTicket } from '@/models/entities/registration-tickets.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { Signin } from '@/models/entities/signin.js';
+import { AuthSession } from '@/models/entities/auth-session.js';
+import { FollowRequest } from '@/models/entities/follow-request.js';
+import { Emoji } from '@/models/entities/emoji.js';
+import { UserNotePining } from '@/models/entities/user-note-pining.js';
+import { Poll } from '@/models/entities/poll.js';
+import { UserKeypair } from '@/models/entities/user-keypair.js';
+import { UserPublickey } from '@/models/entities/user-publickey.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
+import { UserSecurityKey } from '@/models/entities/user-security-key.js';
+import { AttestationChallenge } from '@/models/entities/attestation-challenge.js';
+import { Page } from '@/models/entities/page.js';
+import { PageLike } from '@/models/entities/page-like.js';
+import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { GalleryLike } from '@/models/entities/gallery-like.js';
+import { ModerationLog } from '@/models/entities/moderation-log.js';
+import { UsedUsername } from '@/models/entities/used-username.js';
+import { Announcement } from '@/models/entities/announcement.js';
+import { AnnouncementRead } from '@/models/entities/announcement-read.js';
+import { Clip } from '@/models/entities/clip.js';
+import { ClipNote } from '@/models/entities/clip-note.js';
+import { Antenna } from '@/models/entities/antenna.js';
+import { AntennaNote } from '@/models/entities/antenna-note.js';
+import { PromoNote } from '@/models/entities/promo-note.js';
+import { PromoRead } from '@/models/entities/promo-read.js';
+import { envOption } from '../env.js';
+import { Relay } from '@/models/entities/relay.js';
+import { MutedNote } from '@/models/entities/muted-note.js';
+import { Channel } from '@/models/entities/channel.js';
+import { ChannelFollowing } from '@/models/entities/channel-following.js';
+import { ChannelNotePining } from '@/models/entities/channel-note-pining.js';
+import { RegistryItem } from '@/models/entities/registry-item.js';
+import { Ad } from '@/models/entities/ad.js';
+import { PasswordResetRequest } from '@/models/entities/password-reset-request.js';
+import { UserPending } from '@/models/entities/user-pending.js';
 
-import { entities as charts } from '@/services/chart/entities';
+import { entities as charts } from '@/services/chart/entities.js';
 
 const sqlLogger = dbLogger.createSubLogger('sql', 'white', false);
 
diff --git a/packages/backend/src/db/redis.ts b/packages/backend/src/db/redis.ts
index 9fc2b62412..9346041456 100644
--- a/packages/backend/src/db/redis.ts
+++ b/packages/backend/src/db/redis.ts
@@ -1,5 +1,5 @@
 import * as redis from 'redis';
-import config from '@/config/index';
+import config from '@/config/index.js';
 
 export function createConnection() {
 	return redis.createClient(
diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts
index 5e4e377ab0..bd9c0098bc 100644
--- a/packages/backend/src/index.ts
+++ b/packages/backend/src/index.ts
@@ -2,10 +2,12 @@
  * Misskey Entry Point!
  */
 
+import { EventEmitter } from 'node:events';
+import boot from './boot/index.js';
+
 Error.stackTraceLimit = Infinity;
+EventEmitter.defaultMaxListeners = 128;
 
-require('events').EventEmitter.defaultMaxListeners = 128;
-
-import boot from './boot/index';
-
-boot();
+boot().catch(err => {
+	console.error(err);
+});
diff --git a/packages/backend/src/mfm/from-html.ts b/packages/backend/src/mfm/from-html.ts
index 21e5ebb7a1..623cb0e71c 100644
--- a/packages/backend/src/mfm/from-html.ts
+++ b/packages/backend/src/mfm/from-html.ts
@@ -1,6 +1,6 @@
 import * as parse5 from 'parse5';
-import treeAdapter = require('parse5/lib/tree-adapters/default');
-import { URL } from 'url';
+import treeAdapter from 'parse5/lib/tree-adapters/default.js';
+import { URL } from 'node:url';
 
 const urlRegex     = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+/;
 const urlRegexFull = /^https?:\/\/[\w\/:%#@$&?!()\[\]~.,=+\-]+$/;
diff --git a/packages/backend/src/mfm/to-html.ts b/packages/backend/src/mfm/to-html.ts
index b16c6b95e5..5b382063eb 100644
--- a/packages/backend/src/mfm/to-html.ts
+++ b/packages/backend/src/mfm/to-html.ts
@@ -1,8 +1,8 @@
 import { JSDOM } from 'jsdom';
 import * as mfm from 'mfm-js';
-import config from '@/config/index';
-import { intersperse } from '@/prelude/array';
-import { IMentionedRemoteUsers } from '@/models/entities/note';
+import config from '@/config/index.js';
+import { intersperse } from '@/prelude/array.js';
+import { IMentionedRemoteUsers } from '@/models/entities/note.js';
 
 export function toHtml(nodes: mfm.MfmNode[] | null, mentionedRemoteUsers: IMentionedRemoteUsers = []) {
 	if (nodes == null) {
diff --git a/packages/backend/src/misc/acct.ts b/packages/backend/src/misc/acct.ts
new file mode 100644
index 0000000000..c32cee86c9
--- /dev/null
+++ b/packages/backend/src/misc/acct.ts
@@ -0,0 +1,14 @@
+export type Acct = {
+	username: string;
+	host: string | null;
+};
+
+export function parse(acct: string): Acct {
+	if (acct.startsWith('@')) acct = acct.substr(1);
+	const split = acct.split('@', 2);
+	return { username: split[0], host: split[1] || null };
+}
+
+export function toString(acct: Acct): string {
+	return acct.host == null ? acct.username : `${acct.username}@${acct.host}`;
+}
diff --git a/packages/backend/src/misc/antenna-cache.ts b/packages/backend/src/misc/antenna-cache.ts
index a23eeb45ec..dcf96c1610 100644
--- a/packages/backend/src/misc/antenna-cache.ts
+++ b/packages/backend/src/misc/antenna-cache.ts
@@ -1,6 +1,6 @@
-import { Antennas } from '@/models/index';
-import { Antenna } from '@/models/entities/antenna';
-import { subsdcriber } from '../db/redis';
+import { Antennas } from '@/models/index.js';
+import { Antenna } from '@/models/entities/antenna.js';
+import { subsdcriber } from '../db/redis.js';
 
 let antennasFetched = false;
 let antennas: Antenna[] = [];
diff --git a/packages/backend/src/misc/app-lock.ts b/packages/backend/src/misc/app-lock.ts
index a32b600612..b5089cc6a6 100644
--- a/packages/backend/src/misc/app-lock.ts
+++ b/packages/backend/src/misc/app-lock.ts
@@ -1,6 +1,6 @@
-import { redisClient } from '../db/redis';
-import { promisify } from 'util';
-import * as redisLock from 'redis-lock';
+import { redisClient } from '../db/redis.js';
+import { promisify } from 'node:util';
+import redisLock from 'redis-lock';
 
 /**
  * Retry delay (ms) for lock acquisition
diff --git a/packages/backend/src/misc/captcha.ts b/packages/backend/src/misc/captcha.ts
index 41a986d785..293cbdcd37 100644
--- a/packages/backend/src/misc/captcha.ts
+++ b/packages/backend/src/misc/captcha.ts
@@ -1,7 +1,7 @@
 import fetch from 'node-fetch';
-import { URLSearchParams } from 'url';
-import { getAgentByUrl } from './fetch';
-import config from '@/config/index';
+import { URLSearchParams } from 'node:url';
+import { getAgentByUrl } from './fetch.js';
+import config from '@/config/index.js';
 
 export async function verifyRecaptcha(secret: string, response: string) {
 	const result = await getCaptchaResponse('https://www.recaptcha.net/recaptcha/api/siteverify', secret, response).catch(e => {
diff --git a/packages/backend/src/misc/check-hit-antenna.ts b/packages/backend/src/misc/check-hit-antenna.ts
index 3c39a337fd..ceb74d6904 100644
--- a/packages/backend/src/misc/check-hit-antenna.ts
+++ b/packages/backend/src/misc/check-hit-antenna.ts
@@ -1,10 +1,10 @@
-import { Antenna } from '@/models/entities/antenna';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { UserListJoinings, UserGroupJoinings } from '@/models/index';
-import { getFullApAccount } from './convert-host';
-import * as Acct from 'misskey-js/built/acct';
-import { Packed } from './schema';
+import { Antenna } from '@/models/entities/antenna.js';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { UserListJoinings, UserGroupJoinings } from '@/models/index.js';
+import { getFullApAccount } from './convert-host.js';
+import * as Acct from '@/misc/acct.js';
+import { Packed } from './schema.js';
 
 /**
  * noteUserFollowers / antennaUserFollowing はどちらか一方が指定されていればよい
diff --git a/packages/backend/src/misc/check-word-mute.ts b/packages/backend/src/misc/check-word-mute.ts
index dedda3cdf6..588dc79e55 100644
--- a/packages/backend/src/misc/check-word-mute.ts
+++ b/packages/backend/src/misc/check-word-mute.ts
@@ -1,6 +1,6 @@
-const RE2 = require('re2');
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
+import RE2 from 're2';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
 
 type NoteLike = {
 	userId: Note['userId'];
diff --git a/packages/backend/src/misc/content-disposition.ts b/packages/backend/src/misc/content-disposition.ts
index 9df7ed4688..b2aec471d5 100644
--- a/packages/backend/src/misc/content-disposition.ts
+++ b/packages/backend/src/misc/content-disposition.ts
@@ -1,4 +1,4 @@
-const cd = require('content-disposition');
+import cd from 'content-disposition';
 
 export function contentDisposition(type: 'inline' | 'attachment', filename: string): string {
 	const fallback = filename.replace(/[^\w.-]/g, '_');
diff --git a/packages/backend/src/misc/convert-host.ts b/packages/backend/src/misc/convert-host.ts
index 6e9f6ed3e9..7eb940a7e0 100644
--- a/packages/backend/src/misc/convert-host.ts
+++ b/packages/backend/src/misc/convert-host.ts
@@ -1,6 +1,6 @@
-import { URL } from 'url';
-import config from '@/config/index';
-import { toASCII } from 'punycode/';
+import { URL } from 'node:url';
+import config from '@/config/index.js';
+import { toASCII } from 'punycode';
 
 export function getFullApAccount(username: string, host: string | null) {
 	return host ? `${username}@${toPuny(host)}` : `${username}@${toPuny(config.host)}`;
diff --git a/packages/backend/src/misc/count-same-renotes.ts b/packages/backend/src/misc/count-same-renotes.ts
index 6628761182..b7f8ce90c8 100644
--- a/packages/backend/src/misc/count-same-renotes.ts
+++ b/packages/backend/src/misc/count-same-renotes.ts
@@ -1,4 +1,4 @@
-import { Notes } from '@/models/index';
+import { Notes } from '@/models/index.js';
 
 export async function countSameRenotes(userId: string, renoteId: string, excludeNoteId: string | undefined): Promise<number> {
 	// 指定したユーザーの指定したノートのリノートがいくつあるか数える
diff --git a/packages/backend/src/misc/detect-url-mime.ts b/packages/backend/src/misc/detect-url-mime.ts
index 274c291737..cd143cf2fb 100644
--- a/packages/backend/src/misc/detect-url-mime.ts
+++ b/packages/backend/src/misc/detect-url-mime.ts
@@ -1,6 +1,6 @@
-import { createTemp } from './create-temp';
-import { downloadUrl } from './download-url';
-import { detectType } from './get-file-info';
+import { createTemp } from './create-temp.js';
+import { downloadUrl } from './download-url.js';
+import { detectType } from './get-file-info.js';
 
 export async function detectUrlMime(url: string) {
 	const [path, cleanup] = await createTemp();
diff --git a/packages/backend/src/misc/download-text-file.ts b/packages/backend/src/misc/download-text-file.ts
index e8e23cc120..c62c70ee33 100644
--- a/packages/backend/src/misc/download-text-file.ts
+++ b/packages/backend/src/misc/download-text-file.ts
@@ -1,8 +1,8 @@
-import * as fs from 'fs';
-import * as util from 'util';
-import Logger from '@/services/logger';
-import { createTemp } from './create-temp';
-import { downloadUrl } from './download-url';
+import * as fs from 'node:fs';
+import * as util from 'node:util';
+import Logger from '@/services/logger.js';
+import { createTemp } from './create-temp.js';
+import { downloadUrl } from './download-url.js';
 
 const logger = new Logger('download-text-file');
 
diff --git a/packages/backend/src/misc/download-url.ts b/packages/backend/src/misc/download-url.ts
index ba2fa9fae0..21eee57b33 100644
--- a/packages/backend/src/misc/download-url.ts
+++ b/packages/backend/src/misc/download-url.ts
@@ -1,13 +1,13 @@
-import * as fs from 'fs';
-import * as stream from 'stream';
-import * as util from 'util';
+import * as fs from 'node:fs';
+import * as stream from 'node:stream';
+import * as util from 'node:util';
 import got, * as Got from 'got';
-import { httpAgent, httpsAgent, StatusError } from './fetch';
-import config from '@/config/index';
-import * as chalk from 'chalk';
-import Logger from '@/services/logger';
+import { httpAgent, httpsAgent, StatusError } from './fetch.js';
+import config from '@/config/index.js';
+import chalk from 'chalk';
+import Logger from '@/services/logger.js';
 import * as IPCIDR from 'ip-cidr';
-const PrivateIp = require('private-ip');
+import PrivateIp from 'private-ip';
 
 const pipeline = util.promisify(stream.pipeline);
 
diff --git a/packages/backend/src/misc/emoji-regex.ts b/packages/backend/src/misc/emoji-regex.ts
index 8b07fbd8f2..0135d8736e 100644
--- a/packages/backend/src/misc/emoji-regex.ts
+++ b/packages/backend/src/misc/emoji-regex.ts
@@ -1,3 +1,4 @@
-const twemojiRegex = require('twemoji-parser/dist/lib/regex').default;
+import * as twemoji from 'twemoji-parser/dist/lib/regex.js';
+const twemojiRegex = twemoji.default;
 
 export const emojiRegex = new RegExp(`(${twemojiRegex.source})`);
diff --git a/packages/backend/src/misc/extract-custom-emojis-from-mfm.ts b/packages/backend/src/misc/extract-custom-emojis-from-mfm.ts
index b29ce281b3..a0319d8dd5 100644
--- a/packages/backend/src/misc/extract-custom-emojis-from-mfm.ts
+++ b/packages/backend/src/misc/extract-custom-emojis-from-mfm.ts
@@ -1,5 +1,5 @@
 import * as mfm from 'mfm-js';
-import { unique } from '@/prelude/array';
+import { unique } from '@/prelude/array.js';
 
 export function extractCustomEmojisFromMfm(nodes: mfm.MfmNode[]): string[] {
 	const emojiNodes = mfm.extract(nodes, (node) => {
diff --git a/packages/backend/src/misc/extract-hashtags.ts b/packages/backend/src/misc/extract-hashtags.ts
index b0a74df219..0b0418eefd 100644
--- a/packages/backend/src/misc/extract-hashtags.ts
+++ b/packages/backend/src/misc/extract-hashtags.ts
@@ -1,5 +1,5 @@
 import * as mfm from 'mfm-js';
-import { unique } from '@/prelude/array';
+import { unique } from '@/prelude/array.js';
 
 export function extractHashtags(nodes: mfm.MfmNode[]): string[] {
 	const hashtagNodes = mfm.extract(nodes, (node) => node.type === 'hashtag');
diff --git a/packages/backend/src/misc/fetch-meta.ts b/packages/backend/src/misc/fetch-meta.ts
index b7b055d180..9f85d3d1db 100644
--- a/packages/backend/src/misc/fetch-meta.ts
+++ b/packages/backend/src/misc/fetch-meta.ts
@@ -1,4 +1,4 @@
-import { Meta } from '@/models/entities/meta';
+import { Meta } from '@/models/entities/meta.js';
 import { getConnection } from 'typeorm';
 
 let cache: Meta;
diff --git a/packages/backend/src/misc/fetch-proxy-account.ts b/packages/backend/src/misc/fetch-proxy-account.ts
index e0eedea4c8..ed8a4c794d 100644
--- a/packages/backend/src/misc/fetch-proxy-account.ts
+++ b/packages/backend/src/misc/fetch-proxy-account.ts
@@ -1,6 +1,6 @@
-import { fetchMeta } from './fetch-meta';
-import { ILocalUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
+import { fetchMeta } from './fetch-meta.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
 
 export async function fetchProxyAccount(): Promise<ILocalUser | null> {
 	const meta = await fetchMeta();
diff --git a/packages/backend/src/misc/fetch.ts b/packages/backend/src/misc/fetch.ts
index baebab1922..47a5cd471a 100644
--- a/packages/backend/src/misc/fetch.ts
+++ b/packages/backend/src/misc/fetch.ts
@@ -3,8 +3,8 @@ import * as https from 'https';
 import CacheableLookup from 'cacheable-lookup';
 import fetch from 'node-fetch';
 import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent';
-import config from '@/config/index';
-import { URL } from 'url';
+import config from '@/config/index.js';
+import { URL } from 'node:url';
 
 export async function getJson(url: string, accept = 'application/json, */*', timeout = 10000, headers?: Record<string, string>) {
 	const res = await getResponse({
diff --git a/packages/backend/src/misc/gen-id.ts b/packages/backend/src/misc/gen-id.ts
index b1b542dc4b..fcf476857f 100644
--- a/packages/backend/src/misc/gen-id.ts
+++ b/packages/backend/src/misc/gen-id.ts
@@ -1,9 +1,9 @@
 import { ulid } from 'ulid';
-import { genAid } from './id/aid';
-import { genMeid } from './id/meid';
-import { genMeidg } from './id/meidg';
-import { genObjectId } from './id/object-id';
-import config from '@/config/index';
+import { genAid } from './id/aid.js';
+import { genMeid } from './id/meid.js';
+import { genMeidg } from './id/meidg.js';
+import { genObjectId } from './id/object-id.js';
+import config from '@/config/index.js';
 
 const metohd = config.id.toLowerCase();
 
diff --git a/packages/backend/src/misc/gen-identicon.ts b/packages/backend/src/misc/gen-identicon.ts
index fca67fcf21..9b30e5dbd4 100644
--- a/packages/backend/src/misc/gen-identicon.ts
+++ b/packages/backend/src/misc/gen-identicon.ts
@@ -3,9 +3,9 @@
  * https://en.wikipedia.org/wiki/Identicon
  */
 
+import { WriteStream } from 'node:fs';
 import * as p from 'pureimage';
-import * as gen from 'random-seed';
-import { WriteStream } from 'fs';
+import gen from 'random-seed';
 
 const size = 256; // px
 const n = 5; // resolution
diff --git a/packages/backend/src/misc/gen-key-pair.ts b/packages/backend/src/misc/gen-key-pair.ts
index 9db6b2a3ea..e2ad598501 100644
--- a/packages/backend/src/misc/gen-key-pair.ts
+++ b/packages/backend/src/misc/gen-key-pair.ts
@@ -1,5 +1,5 @@
-import * as crypto from 'crypto';
-import * as util from 'util';
+import * as crypto from 'node:crypto';
+import * as util from 'node:util';
 
 const generateKeyPair = util.promisify(crypto.generateKeyPair);
 
diff --git a/packages/backend/src/misc/get-file-info.ts b/packages/backend/src/misc/get-file-info.ts
index 361cdd2951..48a5b40cc4 100644
--- a/packages/backend/src/misc/get-file-info.ts
+++ b/packages/backend/src/misc/get-file-info.ts
@@ -1,11 +1,11 @@
-import * as fs from 'fs';
-import * as crypto from 'crypto';
-import * as stream from 'stream';
-import * as util from 'util';
-import * as fileType from 'file-type';
+import * as fs from 'node:fs';
+import * as crypto from 'node:crypto';
+import * as stream from 'node:stream';
+import * as util from 'node:util';
+import fileType from 'file-type';
 import isSvg from 'is-svg';
-import * as probeImageSize from 'probe-image-size';
-import * as sharp from 'sharp';
+import probeImageSize from 'probe-image-size';
+import sharp from 'sharp';
 import { encode } from 'blurhash';
 
 const pipeline = util.promisify(stream.pipeline);
diff --git a/packages/backend/src/misc/get-note-summary.ts b/packages/backend/src/misc/get-note-summary.ts
index d7273d1c5b..93783873da 100644
--- a/packages/backend/src/misc/get-note-summary.ts
+++ b/packages/backend/src/misc/get-note-summary.ts
@@ -1,4 +1,4 @@
-import { Packed } from './schema';
+import { Packed } from './schema.js';
 
 /**
  * 投稿を表す文字列を取得します。
diff --git a/packages/backend/src/misc/id/aid.ts b/packages/backend/src/misc/id/aid.ts
index 2bcde90bff..87e6888263 100644
--- a/packages/backend/src/misc/id/aid.ts
+++ b/packages/backend/src/misc/id/aid.ts
@@ -1,7 +1,7 @@
 // AID
 // 長さ8の[2000年1月1日からの経過ミリ秒をbase36でエンコードしたもの] + 長さ2の[ノイズ文字列]
 
-import * as crypto from 'crypto';
+import * as crypto from 'node:crypto';
 
 const TIME2000 = 946684800000;
 let counter = crypto.randomBytes(2).readUInt16LE(0);
diff --git a/packages/backend/src/misc/is-instance-muted.ts b/packages/backend/src/misc/is-instance-muted.ts
index 2e1785b517..a74ba524e3 100644
--- a/packages/backend/src/misc/is-instance-muted.ts
+++ b/packages/backend/src/misc/is-instance-muted.ts
@@ -1,4 +1,4 @@
-import { Packed } from "./schema";
+import { Packed } from './schema.js';
 
 export function isInstanceMuted(note: Packed<'Note'>, mutedInstances: Set<string>): boolean {
 	if (mutedInstances.has(note?.user?.host ?? '')) return true;
diff --git a/packages/backend/src/misc/is-quote.ts b/packages/backend/src/misc/is-quote.ts
index 2b57f036a2..779f548b03 100644
--- a/packages/backend/src/misc/is-quote.ts
+++ b/packages/backend/src/misc/is-quote.ts
@@ -1,4 +1,4 @@
-import { Note } from '@/models/entities/note';
+import { Note } from '@/models/entities/note.js';
 
 export default function(note: Note): boolean {
 	return note.renoteId != null && (note.text != null || note.hasPoll || (note.fileIds != null && note.fileIds.length > 0));
diff --git a/packages/backend/src/misc/keypair-store.ts b/packages/backend/src/misc/keypair-store.ts
index c018013b7b..3d505c0abb 100644
--- a/packages/backend/src/misc/keypair-store.ts
+++ b/packages/backend/src/misc/keypair-store.ts
@@ -1,7 +1,7 @@
-import { UserKeypairs } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { UserKeypair } from '@/models/entities/user-keypair';
-import { Cache } from './cache';
+import { UserKeypairs } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { UserKeypair } from '@/models/entities/user-keypair.js';
+import { Cache } from './cache.js';
 
 const cache = new Cache<UserKeypair>(Infinity);
 
diff --git a/packages/backend/src/misc/populate-emojis.ts b/packages/backend/src/misc/populate-emojis.ts
index 26c05e5fa6..4953c6890b 100644
--- a/packages/backend/src/misc/populate-emojis.ts
+++ b/packages/backend/src/misc/populate-emojis.ts
@@ -1,12 +1,12 @@
 import { In } from 'typeorm';
-import { Emojis } from '@/models/index';
-import { Emoji } from '@/models/entities/emoji';
-import { Note } from '@/models/entities/note';
-import { Cache } from './cache';
-import { isSelfHost, toPunyNullable } from './convert-host';
-import { decodeReaction } from './reaction-lib';
-import config from '@/config/index';
-import { query } from '@/prelude/url';
+import { Emojis } from '@/models/index.js';
+import { Emoji } from '@/models/entities/emoji.js';
+import { Note } from '@/models/entities/note.js';
+import { Cache } from './cache.js';
+import { isSelfHost, toPunyNullable } from './convert-host.js';
+import { decodeReaction } from './reaction-lib.js';
+import config from '@/config/index.js';
+import { query } from '@/prelude/url.js';
 
 const cache = new Cache<Emoji | null>(1000 * 60 * 60 * 12);
 
diff --git a/packages/backend/src/misc/reaction-lib.ts b/packages/backend/src/misc/reaction-lib.ts
index 04b1e34ebe..086944ccfb 100644
--- a/packages/backend/src/misc/reaction-lib.ts
+++ b/packages/backend/src/misc/reaction-lib.ts
@@ -1,8 +1,8 @@
 /* eslint-disable key-spacing */
-import { emojiRegex } from './emoji-regex';
-import { fetchMeta } from './fetch-meta';
-import { Emojis } from '@/models/index';
-import { toPunyNullable } from './convert-host';
+import { emojiRegex } from './emoji-regex.js';
+import { fetchMeta } from './fetch-meta.js';
+import { Emojis } from '@/models/index.js';
+import { toPunyNullable } from './convert-host.js';
 
 const legacies: Record<string, string> = {
 	'like':     '👍',
diff --git a/packages/backend/src/misc/schema.ts b/packages/backend/src/misc/schema.ts
index 5909969bbf..5b69812090 100644
--- a/packages/backend/src/misc/schema.ts
+++ b/packages/backend/src/misc/schema.ts
@@ -6,29 +6,29 @@ import {
 	packedMeDetailedSchema,
 	packedUserDetailedSchema,
 	packedUserSchema,
-} from '@/models/schema/user';
-import { packedNoteSchema } from '@/models/schema/note';
-import { packedUserListSchema } from '@/models/schema/user-list';
-import { packedAppSchema } from '@/models/schema/app';
-import { packedMessagingMessageSchema } from '@/models/schema/messaging-message';
-import { packedNotificationSchema } from '@/models/schema/notification';
-import { packedDriveFileSchema } from '@/models/schema/drive-file';
-import { packedDriveFolderSchema } from '@/models/schema/drive-folder';
-import { packedFollowingSchema } from '@/models/schema/following';
-import { packedMutingSchema } from '@/models/schema/muting';
-import { packedBlockingSchema } from '@/models/schema/blocking';
-import { packedNoteReactionSchema } from '@/models/schema/note-reaction';
-import { packedHashtagSchema } from '@/models/schema/hashtag';
-import { packedPageSchema } from '@/models/schema/page';
-import { packedUserGroupSchema } from '@/models/schema/user-group';
-import { packedNoteFavoriteSchema } from '@/models/schema/note-favorite';
-import { packedChannelSchema } from '@/models/schema/channel';
-import { packedAntennaSchema } from '@/models/schema/antenna';
-import { packedClipSchema } from '@/models/schema/clip';
-import { packedFederationInstanceSchema } from '@/models/schema/federation-instance';
-import { packedQueueCountSchema } from '@/models/schema/queue';
-import { packedGalleryPostSchema } from '@/models/schema/gallery-post';
-import { packedEmojiSchema } from '@/models/schema/emoji';
+} from '@/models/schema/user.js';
+import { packedNoteSchema } from '@/models/schema/note.js';
+import { packedUserListSchema } from '@/models/schema/user-list.js';
+import { packedAppSchema } from '@/models/schema/app.js';
+import { packedMessagingMessageSchema } from '@/models/schema/messaging-message.js';
+import { packedNotificationSchema } from '@/models/schema/notification.js';
+import { packedDriveFileSchema } from '@/models/schema/drive-file.js';
+import { packedDriveFolderSchema } from '@/models/schema/drive-folder.js';
+import { packedFollowingSchema } from '@/models/schema/following.js';
+import { packedMutingSchema } from '@/models/schema/muting.js';
+import { packedBlockingSchema } from '@/models/schema/blocking.js';
+import { packedNoteReactionSchema } from '@/models/schema/note-reaction.js';
+import { packedHashtagSchema } from '@/models/schema/hashtag.js';
+import { packedPageSchema } from '@/models/schema/page.js';
+import { packedUserGroupSchema } from '@/models/schema/user-group.js';
+import { packedNoteFavoriteSchema } from '@/models/schema/note-favorite.js';
+import { packedChannelSchema } from '@/models/schema/channel.js';
+import { packedAntennaSchema } from '@/models/schema/antenna.js';
+import { packedClipSchema } from '@/models/schema/clip.js';
+import { packedFederationInstanceSchema } from '@/models/schema/federation-instance.js';
+import { packedQueueCountSchema } from '@/models/schema/queue.js';
+import { packedGalleryPostSchema } from '@/models/schema/gallery-post.js';
+import { packedEmojiSchema } from '@/models/schema/emoji.js';
 
 export const refs = {
 	UserLite: packedUserLiteSchema,
diff --git a/packages/backend/src/misc/secure-rndstr.ts b/packages/backend/src/misc/secure-rndstr.ts
index 76ee1225eb..8d4fcb1ba9 100644
--- a/packages/backend/src/misc/secure-rndstr.ts
+++ b/packages/backend/src/misc/secure-rndstr.ts
@@ -1,4 +1,4 @@
-import * as crypto from 'crypto';
+import * as crypto from 'node:crypto';
 
 const L_CHARS = '0123456789abcdefghijklmnopqrstuvwxyz';
 const LU_CHARS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
diff --git a/packages/backend/src/misc/show-machine-info.ts b/packages/backend/src/misc/show-machine-info.ts
index 58747c1152..bc71cfbe96 100644
--- a/packages/backend/src/misc/show-machine-info.ts
+++ b/packages/backend/src/misc/show-machine-info.ts
@@ -1,6 +1,6 @@
-import * as os from 'os';
-import * as sysUtils from 'systeminformation';
-import Logger from '@/services/logger';
+import * as os from 'node:os';
+import sysUtils from 'systeminformation';
+import Logger from '@/services/logger.js';
 
 export async function showMachineInfo(parentLogger: Logger) {
 	const logger = parentLogger.createSubLogger('machine');
diff --git a/packages/backend/src/models/entities/abuse-user-report.ts b/packages/backend/src/models/entities/abuse-user-report.ts
index 27c1e47fd8..6ac5635528 100644
--- a/packages/backend/src/models/entities/abuse-user-report.ts
+++ b/packages/backend/src/models/entities/abuse-user-report.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class AbuseUserReport {
diff --git a/packages/backend/src/models/entities/access-token.ts b/packages/backend/src/models/entities/access-token.ts
index 33b60e44f3..69cdc49cec 100644
--- a/packages/backend/src/models/entities/access-token.ts
+++ b/packages/backend/src/models/entities/access-token.ts
@@ -1,7 +1,7 @@
 import { Entity, PrimaryColumn, Index, Column, ManyToOne, JoinColumn } from 'typeorm';
-import { User } from './user';
-import { App } from './app';
-import { id } from '../id';
+import { User } from './user.js';
+import { App } from './app.js';
+import { id } from '../id.js';
 
 @Entity()
 export class AccessToken {
diff --git a/packages/backend/src/models/entities/ad.ts b/packages/backend/src/models/entities/ad.ts
index 68be4ab1ca..36b758f205 100644
--- a/packages/backend/src/models/entities/ad.ts
+++ b/packages/backend/src/models/entities/ad.ts
@@ -1,5 +1,5 @@
 import { Entity, Index, Column, PrimaryColumn } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class Ad {
diff --git a/packages/backend/src/models/entities/announcement-read.ts b/packages/backend/src/models/entities/announcement-read.ts
index 88a1966e28..e4d256a864 100644
--- a/packages/backend/src/models/entities/announcement-read.ts
+++ b/packages/backend/src/models/entities/announcement-read.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Announcement } from './announcement';
-import { id } from '../id';
+import { User } from './user.js';
+import { Announcement } from './announcement.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'announcementId'], { unique: true })
diff --git a/packages/backend/src/models/entities/announcement.ts b/packages/backend/src/models/entities/announcement.ts
index 3448bb6861..beb2f82462 100644
--- a/packages/backend/src/models/entities/announcement.ts
+++ b/packages/backend/src/models/entities/announcement.ts
@@ -1,5 +1,5 @@
 import { Entity, Index, Column, PrimaryColumn } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class Announcement {
diff --git a/packages/backend/src/models/entities/antenna-note.ts b/packages/backend/src/models/entities/antenna-note.ts
index a72da423de..fcca493fe0 100644
--- a/packages/backend/src/models/entities/antenna-note.ts
+++ b/packages/backend/src/models/entities/antenna-note.ts
@@ -1,7 +1,7 @@
 import { Entity, Index, JoinColumn, Column, ManyToOne, PrimaryColumn } from 'typeorm';
-import { Note } from './note';
-import { Antenna } from './antenna';
-import { id } from '../id';
+import { Note } from './note.js';
+import { Antenna } from './antenna.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['noteId', 'antennaId'], { unique: true })
diff --git a/packages/backend/src/models/entities/antenna.ts b/packages/backend/src/models/entities/antenna.ts
index ffe7cc7e3d..6c8bb13e50 100644
--- a/packages/backend/src/models/entities/antenna.ts
+++ b/packages/backend/src/models/entities/antenna.ts
@@ -1,8 +1,8 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { UserList } from './user-list';
-import { UserGroupJoining } from './user-group-joining';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { UserList } from './user-list.js';
+import { UserGroupJoining } from './user-group-joining.js';
 
 @Entity()
 export class Antenna {
diff --git a/packages/backend/src/models/entities/app.ts b/packages/backend/src/models/entities/app.ts
index c1efdc0705..46c11548a5 100644
--- a/packages/backend/src/models/entities/app.ts
+++ b/packages/backend/src/models/entities/app.ts
@@ -1,6 +1,6 @@
 import { Entity, PrimaryColumn, Column, Index, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class App {
diff --git a/packages/backend/src/models/entities/attestation-challenge.ts b/packages/backend/src/models/entities/attestation-challenge.ts
index cf3527059e..c40df23293 100644
--- a/packages/backend/src/models/entities/attestation-challenge.ts
+++ b/packages/backend/src/models/entities/attestation-challenge.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, JoinColumn, Column, ManyToOne, Index } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class AttestationChallenge {
diff --git a/packages/backend/src/models/entities/auth-session.ts b/packages/backend/src/models/entities/auth-session.ts
index 1991385525..b825856201 100644
--- a/packages/backend/src/models/entities/auth-session.ts
+++ b/packages/backend/src/models/entities/auth-session.ts
@@ -1,7 +1,7 @@
 import { Entity, PrimaryColumn, Index, Column, ManyToOne, JoinColumn } from 'typeorm';
-import { User } from './user';
-import { App } from './app';
-import { id } from '../id';
+import { User } from './user.js';
+import { App } from './app.js';
+import { id } from '../id.js';
 
 @Entity()
 export class AuthSession {
diff --git a/packages/backend/src/models/entities/blocking.ts b/packages/backend/src/models/entities/blocking.ts
index aacbfef7fd..4ac73a00b5 100644
--- a/packages/backend/src/models/entities/blocking.ts
+++ b/packages/backend/src/models/entities/blocking.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['blockerId', 'blockeeId'], { unique: true })
diff --git a/packages/backend/src/models/entities/channel-following.ts b/packages/backend/src/models/entities/channel-following.ts
index 3727283a28..029dd6cf1a 100644
--- a/packages/backend/src/models/entities/channel-following.ts
+++ b/packages/backend/src/models/entities/channel-following.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { Channel } from './channel';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { Channel } from './channel.js';
 
 @Entity()
 @Index(['followerId', 'followeeId'], { unique: true })
diff --git a/packages/backend/src/models/entities/channel-note-pining.ts b/packages/backend/src/models/entities/channel-note-pining.ts
index d6b6774033..23be3b69d4 100644
--- a/packages/backend/src/models/entities/channel-note-pining.ts
+++ b/packages/backend/src/models/entities/channel-note-pining.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { Note } from './note';
-import { Channel } from './channel';
-import { id } from '../id';
+import { Note } from './note.js';
+import { Channel } from './channel.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['channelId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/channel.ts b/packages/backend/src/models/entities/channel.ts
index a6767b038f..abf6668bd2 100644
--- a/packages/backend/src/models/entities/channel.ts
+++ b/packages/backend/src/models/entities/channel.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { DriveFile } from './drive-file';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { DriveFile } from './drive-file.js';
 
 @Entity()
 export class Channel {
diff --git a/packages/backend/src/models/entities/clip-note.ts b/packages/backend/src/models/entities/clip-note.ts
index 2bc4352266..6f36885508 100644
--- a/packages/backend/src/models/entities/clip-note.ts
+++ b/packages/backend/src/models/entities/clip-note.ts
@@ -1,7 +1,7 @@
 import { Entity, Index, JoinColumn, Column, ManyToOne, PrimaryColumn } from 'typeorm';
-import { Note } from './note';
-import { Clip } from './clip';
-import { id } from '../id';
+import { Note } from './note.js';
+import { Clip } from './clip.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['noteId', 'clipId'], { unique: true })
diff --git a/packages/backend/src/models/entities/clip.ts b/packages/backend/src/models/entities/clip.ts
index 84f5c4d214..da6b3c7a7f 100644
--- a/packages/backend/src/models/entities/clip.ts
+++ b/packages/backend/src/models/entities/clip.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class Clip {
diff --git a/packages/backend/src/models/entities/drive-file.ts b/packages/backend/src/models/entities/drive-file.ts
index cec86880f5..3d375f0e35 100644
--- a/packages/backend/src/models/entities/drive-file.ts
+++ b/packages/backend/src/models/entities/drive-file.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { DriveFolder } from './drive-folder';
-import { id } from '../id';
+import { User } from './user.js';
+import { DriveFolder } from './drive-folder.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'folderId', 'id'])
diff --git a/packages/backend/src/models/entities/drive-folder.ts b/packages/backend/src/models/entities/drive-folder.ts
index 09f5e6448e..d4022c6ebc 100644
--- a/packages/backend/src/models/entities/drive-folder.ts
+++ b/packages/backend/src/models/entities/drive-folder.ts
@@ -1,6 +1,6 @@
 import { JoinColumn, ManyToOne, Entity, PrimaryColumn, Index, Column } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class DriveFolder {
diff --git a/packages/backend/src/models/entities/emoji.ts b/packages/backend/src/models/entities/emoji.ts
index 2e9c11d21c..b72ca72331 100644
--- a/packages/backend/src/models/entities/emoji.ts
+++ b/packages/backend/src/models/entities/emoji.ts
@@ -1,5 +1,5 @@
 import { PrimaryColumn, Entity, Index, Column } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['name', 'host'], { unique: true })
diff --git a/packages/backend/src/models/entities/follow-request.ts b/packages/backend/src/models/entities/follow-request.ts
index 6aa202299a..89946f6d35 100644
--- a/packages/backend/src/models/entities/follow-request.ts
+++ b/packages/backend/src/models/entities/follow-request.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['followerId', 'followeeId'], { unique: true })
diff --git a/packages/backend/src/models/entities/following.ts b/packages/backend/src/models/entities/following.ts
index ad387e5188..b283ca7e8a 100644
--- a/packages/backend/src/models/entities/following.ts
+++ b/packages/backend/src/models/entities/following.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['followerId', 'followeeId'], { unique: true })
diff --git a/packages/backend/src/models/entities/gallery-like.ts b/packages/backend/src/models/entities/gallery-like.ts
index 41615dcea9..4ce166d194 100644
--- a/packages/backend/src/models/entities/gallery-like.ts
+++ b/packages/backend/src/models/entities/gallery-like.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { GalleryPost } from './gallery-post';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { GalleryPost } from './gallery-post.js';
 
 @Entity()
 @Index(['userId', 'postId'], { unique: true })
diff --git a/packages/backend/src/models/entities/gallery-post.ts b/packages/backend/src/models/entities/gallery-post.ts
index 393603e3d9..774cb946e9 100644
--- a/packages/backend/src/models/entities/gallery-post.ts
+++ b/packages/backend/src/models/entities/gallery-post.ts
@@ -1,7 +1,7 @@
 import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { DriveFile } from './drive-file';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { DriveFile } from './drive-file.js';
 
 @Entity()
 export class GalleryPost {
diff --git a/packages/backend/src/models/entities/hashtag.ts b/packages/backend/src/models/entities/hashtag.ts
index 761974590a..6bd991f629 100644
--- a/packages/backend/src/models/entities/hashtag.ts
+++ b/packages/backend/src/models/entities/hashtag.ts
@@ -1,6 +1,6 @@
 import { Entity, PrimaryColumn, Index, Column } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class Hashtag {
diff --git a/packages/backend/src/models/entities/instance.ts b/packages/backend/src/models/entities/instance.ts
index d1314be178..c15c80ff43 100644
--- a/packages/backend/src/models/entities/instance.ts
+++ b/packages/backend/src/models/entities/instance.ts
@@ -1,5 +1,5 @@
 import { Entity, PrimaryColumn, Index, Column } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class Instance {
diff --git a/packages/backend/src/models/entities/messaging-message.ts b/packages/backend/src/models/entities/messaging-message.ts
index 06ae005de9..099fb7aa01 100644
--- a/packages/backend/src/models/entities/messaging-message.ts
+++ b/packages/backend/src/models/entities/messaging-message.ts
@@ -1,8 +1,8 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { DriveFile } from './drive-file';
-import { id } from '../id';
-import { UserGroup } from './user-group';
+import { User } from './user.js';
+import { DriveFile } from './drive-file.js';
+import { id } from '../id.js';
+import { UserGroup } from './user-group.js';
 
 @Entity()
 export class MessagingMessage {
diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts
index 3031642478..4328c8fbf8 100644
--- a/packages/backend/src/models/entities/meta.ts
+++ b/packages/backend/src/models/entities/meta.ts
@@ -1,7 +1,7 @@
 import { Entity, Column, PrimaryColumn, ManyToOne, JoinColumn } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { Clip } from './clip';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { Clip } from './clip.js';
 
 @Entity()
 export class Meta {
diff --git a/packages/backend/src/models/entities/moderation-log.ts b/packages/backend/src/models/entities/moderation-log.ts
index fe000e14f2..c99e550782 100644
--- a/packages/backend/src/models/entities/moderation-log.ts
+++ b/packages/backend/src/models/entities/moderation-log.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class ModerationLog {
diff --git a/packages/backend/src/models/entities/muted-note.ts b/packages/backend/src/models/entities/muted-note.ts
index b01bb0551a..96a4fa8e33 100644
--- a/packages/backend/src/models/entities/muted-note.ts
+++ b/packages/backend/src/models/entities/muted-note.ts
@@ -1,8 +1,8 @@
 import { Entity, Index, JoinColumn, Column, ManyToOne, PrimaryColumn } from 'typeorm';
-import { Note } from './note';
-import { User } from './user';
-import { id } from '../id';
-import { mutedNoteReasons } from '../../types';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { mutedNoteReasons } from '../../types.js';
 
 @Entity()
 @Index(['noteId', 'userId'], { unique: true })
diff --git a/packages/backend/src/models/entities/muting.ts b/packages/backend/src/models/entities/muting.ts
index b9f18a5852..8cdd2af9d1 100644
--- a/packages/backend/src/models/entities/muting.ts
+++ b/packages/backend/src/models/entities/muting.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['muterId', 'muteeId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note-favorite.ts b/packages/backend/src/models/entities/note-favorite.ts
index 69d9b49d13..fe065b77a8 100644
--- a/packages/backend/src/models/entities/note-favorite.ts
+++ b/packages/backend/src/models/entities/note-favorite.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { Note } from './note';
-import { User } from './user';
-import { id } from '../id';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note-reaction.ts b/packages/backend/src/models/entities/note-reaction.ts
index 369505a6c6..d7bc609898 100644
--- a/packages/backend/src/models/entities/note-reaction.ts
+++ b/packages/backend/src/models/entities/note-reaction.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Note } from './note';
-import { id } from '../id';
+import { User } from './user.js';
+import { Note } from './note.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note-thread-muting.ts b/packages/backend/src/models/entities/note-thread-muting.ts
index f4a3a48876..8c5f7bbab4 100644
--- a/packages/backend/src/models/entities/note-thread-muting.ts
+++ b/packages/backend/src/models/entities/note-thread-muting.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Note } from './note';
-import { id } from '../id';
+import { User } from './user.js';
+import { Note } from './note.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'threadId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note-unread.ts b/packages/backend/src/models/entities/note-unread.ts
index 952f71cdaa..a7acf254d3 100644
--- a/packages/backend/src/models/entities/note-unread.ts
+++ b/packages/backend/src/models/entities/note-unread.ts
@@ -1,8 +1,8 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Note } from './note';
-import { id } from '../id';
-import { Channel } from './channel';
+import { User } from './user.js';
+import { Note } from './note.js';
+import { id } from '../id.js';
+import { Channel } from './channel.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note-watching.ts b/packages/backend/src/models/entities/note-watching.ts
index 2758efdc35..ed82e7dfe7 100644
--- a/packages/backend/src/models/entities/note-watching.ts
+++ b/packages/backend/src/models/entities/note-watching.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Note } from './note';
-import { id } from '../id';
+import { User } from './user.js';
+import { Note } from './note.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/note.ts b/packages/backend/src/models/entities/note.ts
index e4a5ac871c..da49d53b69 100644
--- a/packages/backend/src/models/entities/note.ts
+++ b/packages/backend/src/models/entities/note.ts
@@ -1,9 +1,9 @@
 import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { DriveFile } from './drive-file';
-import { id } from '../id';
-import { noteVisibilities } from '../../types';
-import { Channel } from './channel';
+import { User } from './user.js';
+import { DriveFile } from './drive-file.js';
+import { id } from '../id.js';
+import { noteVisibilities } from '../../types.js';
+import { Channel } from './channel.js';
 
 @Entity()
 @Index('IDX_NOTE_TAGS', { synchronize: false })
diff --git a/packages/backend/src/models/entities/notification.ts b/packages/backend/src/models/entities/notification.ts
index 9c1d8242fe..4a4739b8c5 100644
--- a/packages/backend/src/models/entities/notification.ts
+++ b/packages/backend/src/models/entities/notification.ts
@@ -1,11 +1,11 @@
 import { Entity, Index, JoinColumn, ManyToOne, Column, PrimaryColumn } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { Note } from './note';
-import { FollowRequest } from './follow-request';
-import { UserGroupInvitation } from './user-group-invitation';
-import { AccessToken } from './access-token';
-import { notificationTypes } from '@/types';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { Note } from './note.js';
+import { FollowRequest } from './follow-request.js';
+import { UserGroupInvitation } from './user-group-invitation.js';
+import { AccessToken } from './access-token.js';
+import { notificationTypes } from '@/types.js';
 
 @Entity()
 export class Notification {
diff --git a/packages/backend/src/models/entities/page-like.ts b/packages/backend/src/models/entities/page-like.ts
index 16fb8f172a..17f4ebf520 100644
--- a/packages/backend/src/models/entities/page-like.ts
+++ b/packages/backend/src/models/entities/page-like.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { Page } from './page';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { Page } from './page.js';
 
 @Entity()
 @Index(['userId', 'pageId'], { unique: true })
diff --git a/packages/backend/src/models/entities/page.ts b/packages/backend/src/models/entities/page.ts
index 2b540e1990..baad3a36fa 100644
--- a/packages/backend/src/models/entities/page.ts
+++ b/packages/backend/src/models/entities/page.ts
@@ -1,7 +1,7 @@
 import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
-import { DriveFile } from './drive-file';
+import { User } from './user.js';
+import { id } from '../id.js';
+import { DriveFile } from './drive-file.js';
 
 @Entity()
 @Index(['userId', 'name'], { unique: true })
diff --git a/packages/backend/src/models/entities/password-reset-request.ts b/packages/backend/src/models/entities/password-reset-request.ts
index a2db0f1147..05e62cc5ab 100644
--- a/packages/backend/src/models/entities/password-reset-request.ts
+++ b/packages/backend/src/models/entities/password-reset-request.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, Column, ManyToOne, JoinColumn } from 'typeorm';
-import { id } from '../id';
-import { User } from './user';
+import { id } from '../id.js';
+import { User } from './user.js';
 
 @Entity()
 export class PasswordResetRequest {
diff --git a/packages/backend/src/models/entities/poll-vote.ts b/packages/backend/src/models/entities/poll-vote.ts
index fb44a58e9f..fca1cd0099 100644
--- a/packages/backend/src/models/entities/poll-vote.ts
+++ b/packages/backend/src/models/entities/poll-vote.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { Note } from './note';
-import { id } from '../id';
+import { User } from './user.js';
+import { Note } from './note.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId', 'choice'], { unique: true })
diff --git a/packages/backend/src/models/entities/poll.ts b/packages/backend/src/models/entities/poll.ts
index 9c80693491..83d0873cc5 100644
--- a/packages/backend/src/models/entities/poll.ts
+++ b/packages/backend/src/models/entities/poll.ts
@@ -1,8 +1,8 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, OneToOne } from 'typeorm';
-import { id } from '../id';
-import { Note } from './note';
-import { User } from './user';
-import { noteVisibilities } from '../../types';
+import { id } from '../id.js';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { noteVisibilities } from '../../types.js';
 
 @Entity()
 export class Poll {
diff --git a/packages/backend/src/models/entities/promo-note.ts b/packages/backend/src/models/entities/promo-note.ts
index e3fbab4414..d110b81e93 100644
--- a/packages/backend/src/models/entities/promo-note.ts
+++ b/packages/backend/src/models/entities/promo-note.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, OneToOne } from 'typeorm';
-import { Note } from './note';
-import { User } from './user';
-import { id } from '../id';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class PromoNote {
diff --git a/packages/backend/src/models/entities/promo-read.ts b/packages/backend/src/models/entities/promo-read.ts
index 777ed301ba..a63b79cd1e 100644
--- a/packages/backend/src/models/entities/promo-read.ts
+++ b/packages/backend/src/models/entities/promo-read.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { Note } from './note';
-import { User } from './user';
-import { id } from '../id';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/registration-tickets.ts b/packages/backend/src/models/entities/registration-tickets.ts
index d962f78a78..139e40f85e 100644
--- a/packages/backend/src/models/entities/registration-tickets.ts
+++ b/packages/backend/src/models/entities/registration-tickets.ts
@@ -1,5 +1,5 @@
 import { PrimaryColumn, Entity, Index, Column } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class RegistrationTicket {
diff --git a/packages/backend/src/models/entities/registry-item.ts b/packages/backend/src/models/entities/registry-item.ts
index 6d5f0185db..283796df91 100644
--- a/packages/backend/src/models/entities/registry-item.ts
+++ b/packages/backend/src/models/entities/registry-item.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 // TODO: 同じdomain、同じscope、同じkeyのレコードは二つ以上存在しないように制約付けたい
 @Entity()
diff --git a/packages/backend/src/models/entities/relay.ts b/packages/backend/src/models/entities/relay.ts
index 4c82ccb125..94d1929574 100644
--- a/packages/backend/src/models/entities/relay.ts
+++ b/packages/backend/src/models/entities/relay.ts
@@ -1,5 +1,5 @@
 import { PrimaryColumn, Entity, Index, Column } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class Relay {
diff --git a/packages/backend/src/models/entities/signin.ts b/packages/backend/src/models/entities/signin.ts
index 7f54f2ebf2..ba81f45e49 100644
--- a/packages/backend/src/models/entities/signin.ts
+++ b/packages/backend/src/models/entities/signin.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class Signin {
diff --git a/packages/backend/src/models/entities/sw-subscription.ts b/packages/backend/src/models/entities/sw-subscription.ts
index 2debcf7443..59144d348b 100644
--- a/packages/backend/src/models/entities/sw-subscription.ts
+++ b/packages/backend/src/models/entities/sw-subscription.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class SwSubscription {
diff --git a/packages/backend/src/models/entities/user-group-invitation.ts b/packages/backend/src/models/entities/user-group-invitation.ts
index 479442a135..10f357049f 100644
--- a/packages/backend/src/models/entities/user-group-invitation.ts
+++ b/packages/backend/src/models/entities/user-group-invitation.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { UserGroup } from './user-group';
-import { id } from '../id';
+import { User } from './user.js';
+import { UserGroup } from './user-group.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'userGroupId'], { unique: true })
diff --git a/packages/backend/src/models/entities/user-group-joining.ts b/packages/backend/src/models/entities/user-group-joining.ts
index 81f3358588..62a814218a 100644
--- a/packages/backend/src/models/entities/user-group-joining.ts
+++ b/packages/backend/src/models/entities/user-group-joining.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { UserGroup } from './user-group';
-import { id } from '../id';
+import { User } from './user.js';
+import { UserGroup } from './user-group.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'userGroupId'], { unique: true })
diff --git a/packages/backend/src/models/entities/user-group.ts b/packages/backend/src/models/entities/user-group.ts
index 1fdb60c40d..8d5de1d926 100644
--- a/packages/backend/src/models/entities/user-group.ts
+++ b/packages/backend/src/models/entities/user-group.ts
@@ -1,6 +1,6 @@
 import { Entity, Index, JoinColumn, Column, PrimaryColumn, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class UserGroup {
diff --git a/packages/backend/src/models/entities/user-keypair.ts b/packages/backend/src/models/entities/user-keypair.ts
index 48bff0d104..85fa062977 100644
--- a/packages/backend/src/models/entities/user-keypair.ts
+++ b/packages/backend/src/models/entities/user-keypair.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, JoinColumn, Column, OneToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class UserKeypair {
diff --git a/packages/backend/src/models/entities/user-list-joining.ts b/packages/backend/src/models/entities/user-list-joining.ts
index 2efa017527..12f28c4149 100644
--- a/packages/backend/src/models/entities/user-list-joining.ts
+++ b/packages/backend/src/models/entities/user-list-joining.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { UserList } from './user-list';
-import { id } from '../id';
+import { User } from './user.js';
+import { UserList } from './user-list.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'userListId'], { unique: true })
diff --git a/packages/backend/src/models/entities/user-list.ts b/packages/backend/src/models/entities/user-list.ts
index c2896a1dbe..ca69394e93 100644
--- a/packages/backend/src/models/entities/user-list.ts
+++ b/packages/backend/src/models/entities/user-list.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class UserList {
diff --git a/packages/backend/src/models/entities/user-note-pining.ts b/packages/backend/src/models/entities/user-note-pining.ts
index b91e02c5cb..c91ab7fdd8 100644
--- a/packages/backend/src/models/entities/user-note-pining.ts
+++ b/packages/backend/src/models/entities/user-note-pining.ts
@@ -1,7 +1,7 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
-import { Note } from './note';
-import { User } from './user';
-import { id } from '../id';
+import { Note } from './note.js';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['userId', 'noteId'], { unique: true })
diff --git a/packages/backend/src/models/entities/user-pending.ts b/packages/backend/src/models/entities/user-pending.ts
index 40482af333..7637948841 100644
--- a/packages/backend/src/models/entities/user-pending.ts
+++ b/packages/backend/src/models/entities/user-pending.ts
@@ -1,5 +1,5 @@
 import { PrimaryColumn, Entity, Index, Column } from 'typeorm';
-import { id } from '../id';
+import { id } from '../id.js';
 
 @Entity()
 export class UserPending {
diff --git a/packages/backend/src/models/entities/user-profile.ts b/packages/backend/src/models/entities/user-profile.ts
index d8317de8d3..f95cb144c5 100644
--- a/packages/backend/src/models/entities/user-profile.ts
+++ b/packages/backend/src/models/entities/user-profile.ts
@@ -1,8 +1,8 @@
 import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
-import { id } from '../id';
-import { User } from './user';
-import { Page } from './page';
-import { ffVisibility, notificationTypes } from '@/types';
+import { id } from '../id.js';
+import { User } from './user.js';
+import { Page } from './page.js';
+import { ffVisibility, notificationTypes } from '@/types.js';
 
 // TODO: このテーブルで管理している情報すべてレジストリで管理するようにしても良いかも
 //       ただ、「emailVerified が true なユーザーを find する」のようなクエリは書けなくなるからウーン
diff --git a/packages/backend/src/models/entities/user-publickey.ts b/packages/backend/src/models/entities/user-publickey.ts
index 128e13510c..31ed60de82 100644
--- a/packages/backend/src/models/entities/user-publickey.ts
+++ b/packages/backend/src/models/entities/user-publickey.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, Index, JoinColumn, Column, OneToOne } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class UserPublickey {
diff --git a/packages/backend/src/models/entities/user-security-key.ts b/packages/backend/src/models/entities/user-security-key.ts
index e7b63fb825..c4f2a852e2 100644
--- a/packages/backend/src/models/entities/user-security-key.ts
+++ b/packages/backend/src/models/entities/user-security-key.ts
@@ -1,6 +1,6 @@
 import { PrimaryColumn, Entity, JoinColumn, Column, ManyToOne, Index } from 'typeorm';
-import { User } from './user';
-import { id } from '../id';
+import { User } from './user.js';
+import { id } from '../id.js';
 
 @Entity()
 export class UserSecurityKey {
diff --git a/packages/backend/src/models/entities/user.ts b/packages/backend/src/models/entities/user.ts
index e4d9a3ced9..3eecde1f17 100644
--- a/packages/backend/src/models/entities/user.ts
+++ b/packages/backend/src/models/entities/user.ts
@@ -1,6 +1,6 @@
 import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
-import { DriveFile } from './drive-file';
-import { id } from '../id';
+import { DriveFile } from './drive-file.js';
+import { id } from '../id.js';
 
 @Entity()
 @Index(['usernameLower', 'host'], { unique: true })
diff --git a/packages/backend/src/models/index.ts b/packages/backend/src/models/index.ts
index da64063cef..e7b6854886 100644
--- a/packages/backend/src/models/index.ts
+++ b/packages/backend/src/models/index.ts
@@ -1,67 +1,67 @@
 import { getRepository, getCustomRepository } from 'typeorm';
-import { Announcement } from './entities/announcement';
-import { AnnouncementRead } from './entities/announcement-read';
-import { Instance } from './entities/instance';
-import { Poll } from './entities/poll';
-import { PollVote } from './entities/poll-vote';
-import { Meta } from './entities/meta';
-import { SwSubscription } from './entities/sw-subscription';
-import { NoteWatching } from './entities/note-watching';
-import { NoteThreadMuting } from './entities/note-thread-muting';
-import { NoteUnread } from './entities/note-unread';
-import { RegistrationTicket } from './entities/registration-tickets';
-import { UserRepository } from './repositories/user';
-import { NoteRepository } from './repositories/note';
-import { DriveFileRepository } from './repositories/drive-file';
-import { DriveFolderRepository } from './repositories/drive-folder';
-import { AccessToken } from './entities/access-token';
-import { UserNotePining } from './entities/user-note-pining';
-import { SigninRepository } from './repositories/signin';
-import { MessagingMessageRepository } from './repositories/messaging-message';
-import { UserListRepository } from './repositories/user-list';
-import { UserListJoining } from './entities/user-list-joining';
-import { UserGroupRepository } from './repositories/user-group';
-import { UserGroupJoining } from './entities/user-group-joining';
-import { UserGroupInvitationRepository } from './repositories/user-group-invitation';
-import { FollowRequestRepository } from './repositories/follow-request';
-import { MutingRepository } from './repositories/muting';
-import { BlockingRepository } from './repositories/blocking';
-import { NoteReactionRepository } from './repositories/note-reaction';
-import { NotificationRepository } from './repositories/notification';
-import { NoteFavoriteRepository } from './repositories/note-favorite';
-import { UserPublickey } from './entities/user-publickey';
-import { UserKeypair } from './entities/user-keypair';
-import { AppRepository } from './repositories/app';
-import { FollowingRepository } from './repositories/following';
-import { AbuseUserReportRepository } from './repositories/abuse-user-report';
-import { AuthSessionRepository } from './repositories/auth-session';
-import { UserProfile } from './entities/user-profile';
-import { AttestationChallenge } from './entities/attestation-challenge';
-import { UserSecurityKey } from './entities/user-security-key';
-import { HashtagRepository } from './repositories/hashtag';
-import { PageRepository } from './repositories/page';
-import { PageLikeRepository } from './repositories/page-like';
-import { GalleryPostRepository } from './repositories/gallery-post';
-import { GalleryLikeRepository } from './repositories/gallery-like';
-import { ModerationLogRepository } from './repositories/moderation-logs';
-import { UsedUsername } from './entities/used-username';
-import { ClipRepository } from './repositories/clip';
-import { ClipNote } from './entities/clip-note';
-import { AntennaRepository } from './repositories/antenna';
-import { AntennaNote } from './entities/antenna-note';
-import { PromoNote } from './entities/promo-note';
-import { PromoRead } from './entities/promo-read';
-import { EmojiRepository } from './repositories/emoji';
-import { RelayRepository } from './repositories/relay';
-import { ChannelRepository } from './repositories/channel';
-import { MutedNote } from './entities/muted-note';
-import { ChannelFollowing } from './entities/channel-following';
-import { ChannelNotePining } from './entities/channel-note-pining';
-import { RegistryItem } from './entities/registry-item';
-import { Ad } from './entities/ad';
-import { PasswordResetRequest } from './entities/password-reset-request';
-import { UserPending } from './entities/user-pending';
-import { InstanceRepository } from './repositories/instance';
+import { Announcement } from './entities/announcement.js';
+import { AnnouncementRead } from './entities/announcement-read.js';
+import { Instance } from './entities/instance.js';
+import { Poll } from './entities/poll.js';
+import { PollVote } from './entities/poll-vote.js';
+import { Meta } from './entities/meta.js';
+import { SwSubscription } from './entities/sw-subscription.js';
+import { NoteWatching } from './entities/note-watching.js';
+import { NoteThreadMuting } from './entities/note-thread-muting.js';
+import { NoteUnread } from './entities/note-unread.js';
+import { RegistrationTicket } from './entities/registration-tickets.js';
+import { UserRepository } from './repositories/user.js';
+import { NoteRepository } from './repositories/note.js';
+import { DriveFileRepository } from './repositories/drive-file.js';
+import { DriveFolderRepository } from './repositories/drive-folder.js';
+import { AccessToken } from './entities/access-token.js';
+import { UserNotePining } from './entities/user-note-pining.js';
+import { SigninRepository } from './repositories/signin.js';
+import { MessagingMessageRepository } from './repositories/messaging-message.js';
+import { UserListRepository } from './repositories/user-list.js';
+import { UserListJoining } from './entities/user-list-joining.js';
+import { UserGroupRepository } from './repositories/user-group.js';
+import { UserGroupJoining } from './entities/user-group-joining.js';
+import { UserGroupInvitationRepository } from './repositories/user-group-invitation.js';
+import { FollowRequestRepository } from './repositories/follow-request.js';
+import { MutingRepository } from './repositories/muting.js';
+import { BlockingRepository } from './repositories/blocking.js';
+import { NoteReactionRepository } from './repositories/note-reaction.js';
+import { NotificationRepository } from './repositories/notification.js';
+import { NoteFavoriteRepository } from './repositories/note-favorite.js';
+import { UserPublickey } from './entities/user-publickey.js';
+import { UserKeypair } from './entities/user-keypair.js';
+import { AppRepository } from './repositories/app.js';
+import { FollowingRepository } from './repositories/following.js';
+import { AbuseUserReportRepository } from './repositories/abuse-user-report.js';
+import { AuthSessionRepository } from './repositories/auth-session.js';
+import { UserProfile } from './entities/user-profile.js';
+import { AttestationChallenge } from './entities/attestation-challenge.js';
+import { UserSecurityKey } from './entities/user-security-key.js';
+import { HashtagRepository } from './repositories/hashtag.js';
+import { PageRepository } from './repositories/page.js';
+import { PageLikeRepository } from './repositories/page-like.js';
+import { GalleryPostRepository } from './repositories/gallery-post.js';
+import { GalleryLikeRepository } from './repositories/gallery-like.js';
+import { ModerationLogRepository } from './repositories/moderation-logs.js';
+import { UsedUsername } from './entities/used-username.js';
+import { ClipRepository } from './repositories/clip.js';
+import { ClipNote } from './entities/clip-note.js';
+import { AntennaRepository } from './repositories/antenna.js';
+import { AntennaNote } from './entities/antenna-note.js';
+import { PromoNote } from './entities/promo-note.js';
+import { PromoRead } from './entities/promo-read.js';
+import { EmojiRepository } from './repositories/emoji.js';
+import { RelayRepository } from './repositories/relay.js';
+import { ChannelRepository } from './repositories/channel.js';
+import { MutedNote } from './entities/muted-note.js';
+import { ChannelFollowing } from './entities/channel-following.js';
+import { ChannelNotePining } from './entities/channel-note-pining.js';
+import { RegistryItem } from './entities/registry-item.js';
+import { Ad } from './entities/ad.js';
+import { PasswordResetRequest } from './entities/password-reset-request.js';
+import { UserPending } from './entities/user-pending.js';
+import { InstanceRepository } from './repositories/instance.js';
 
 export const Announcements = getRepository(Announcement);
 export const AnnouncementReads = getRepository(AnnouncementRead);
diff --git a/packages/backend/src/models/repositories/abuse-user-report.ts b/packages/backend/src/models/repositories/abuse-user-report.ts
index 144195855b..348f88b3a2 100644
--- a/packages/backend/src/models/repositories/abuse-user-report.ts
+++ b/packages/backend/src/models/repositories/abuse-user-report.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Users } from '../index';
-import { AbuseUserReport } from '@/models/entities/abuse-user-report';
-import { awaitAll } from '@/prelude/await-all';
+import { Users } from '../index.js';
+import { AbuseUserReport } from '@/models/entities/abuse-user-report.js';
+import { awaitAll } from '@/prelude/await-all.js';
 
 @EntityRepository(AbuseUserReport)
 export class AbuseUserReportRepository extends Repository<AbuseUserReport> {
diff --git a/packages/backend/src/models/repositories/antenna.ts b/packages/backend/src/models/repositories/antenna.ts
index 3bf0645a7f..3440ca1871 100644
--- a/packages/backend/src/models/repositories/antenna.ts
+++ b/packages/backend/src/models/repositories/antenna.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Antenna } from '@/models/entities/antenna';
-import { Packed } from '@/misc/schema';
-import { AntennaNotes, UserGroupJoinings } from '../index';
+import { Antenna } from '@/models/entities/antenna.js';
+import { Packed } from '@/misc/schema.js';
+import { AntennaNotes, UserGroupJoinings } from '../index.js';
 
 @EntityRepository(Antenna)
 export class AntennaRepository extends Repository<Antenna> {
diff --git a/packages/backend/src/models/repositories/app.ts b/packages/backend/src/models/repositories/app.ts
index 5576c67236..4c3c488da0 100644
--- a/packages/backend/src/models/repositories/app.ts
+++ b/packages/backend/src/models/repositories/app.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { App } from '@/models/entities/app';
-import { AccessTokens } from '../index';
-import { Packed } from '@/misc/schema';
-import { User } from '../entities/user';
+import { App } from '@/models/entities/app.js';
+import { AccessTokens } from '../index.js';
+import { Packed } from '@/misc/schema.js';
+import { User } from '../entities/user.js';
 
 @EntityRepository(App)
 export class AppRepository extends Repository<App> {
diff --git a/packages/backend/src/models/repositories/auth-session.ts b/packages/backend/src/models/repositories/auth-session.ts
index 6308909c41..7a7bd3a1ed 100644
--- a/packages/backend/src/models/repositories/auth-session.ts
+++ b/packages/backend/src/models/repositories/auth-session.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Apps } from '../index';
-import { AuthSession } from '@/models/entities/auth-session';
-import { awaitAll } from '@/prelude/await-all';
-import { User } from '@/models/entities/user';
+import { Apps } from '../index.js';
+import { AuthSession } from '@/models/entities/auth-session.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(AuthSession)
 export class AuthSessionRepository extends Repository<AuthSession> {
diff --git a/packages/backend/src/models/repositories/blocking.ts b/packages/backend/src/models/repositories/blocking.ts
index c20b02f501..b155bf944b 100644
--- a/packages/backend/src/models/repositories/blocking.ts
+++ b/packages/backend/src/models/repositories/blocking.ts
@@ -1,9 +1,9 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Users } from '../index';
-import { Blocking } from '@/models/entities/blocking';
-import { awaitAll } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
-import { User } from '@/models/entities/user';
+import { Users } from '../index.js';
+import { Blocking } from '@/models/entities/blocking.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(Blocking)
 export class BlockingRepository extends Repository<Blocking> {
diff --git a/packages/backend/src/models/repositories/channel.ts b/packages/backend/src/models/repositories/channel.ts
index b3afb823ab..cc13d7c1e6 100644
--- a/packages/backend/src/models/repositories/channel.ts
+++ b/packages/backend/src/models/repositories/channel.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Channel } from '@/models/entities/channel';
-import { Packed } from '@/misc/schema';
-import { DriveFiles, ChannelFollowings, NoteUnreads } from '../index';
-import { User } from '@/models/entities/user';
+import { Channel } from '@/models/entities/channel.js';
+import { Packed } from '@/misc/schema.js';
+import { DriveFiles, ChannelFollowings, NoteUnreads } from '../index.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(Channel)
 export class ChannelRepository extends Repository<Channel> {
diff --git a/packages/backend/src/models/repositories/clip.ts b/packages/backend/src/models/repositories/clip.ts
index 6f9ceeb50a..9e1979729a 100644
--- a/packages/backend/src/models/repositories/clip.ts
+++ b/packages/backend/src/models/repositories/clip.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Clip } from '@/models/entities/clip';
-import { Packed } from '@/misc/schema';
-import { Users } from '../index';
-import { awaitAll } from '@/prelude/await-all';
+import { Clip } from '@/models/entities/clip.js';
+import { Packed } from '@/misc/schema.js';
+import { Users } from '../index.js';
+import { awaitAll } from '@/prelude/await-all.js';
 
 @EntityRepository(Clip)
 export class ClipRepository extends Repository<Clip> {
diff --git a/packages/backend/src/models/repositories/drive-file.ts b/packages/backend/src/models/repositories/drive-file.ts
index 44db9a0a58..27afe435e6 100644
--- a/packages/backend/src/models/repositories/drive-file.ts
+++ b/packages/backend/src/models/repositories/drive-file.ts
@@ -1,14 +1,14 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { DriveFile } from '@/models/entities/drive-file';
-import { Users, DriveFolders } from '../index';
-import { User } from '@/models/entities/user';
-import { toPuny } from '@/misc/convert-host';
-import { awaitAll, Promiseable } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
-import config from '@/config/index';
-import { query, appendQuery } from '@/prelude/url';
-import { Meta } from '@/models/entities/meta';
-import { fetchMeta } from '@/misc/fetch-meta';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { Users, DriveFolders } from '../index.js';
+import { User } from '@/models/entities/user.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { awaitAll, Promiseable } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
+import config from '@/config/index.js';
+import { query, appendQuery } from '@/prelude/url.js';
+import { Meta } from '@/models/entities/meta.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
 
 type PackOptions = {
 	detail?: boolean,
diff --git a/packages/backend/src/models/repositories/drive-folder.ts b/packages/backend/src/models/repositories/drive-folder.ts
index cc7e4ca55b..b0e09eedf5 100644
--- a/packages/backend/src/models/repositories/drive-folder.ts
+++ b/packages/backend/src/models/repositories/drive-folder.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { DriveFolders, DriveFiles } from '../index';
-import { DriveFolder } from '@/models/entities/drive-folder';
-import { awaitAll } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
+import { DriveFolders, DriveFiles } from '../index.js';
+import { DriveFolder } from '@/models/entities/drive-folder.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(DriveFolder)
 export class DriveFolderRepository extends Repository<DriveFolder> {
diff --git a/packages/backend/src/models/repositories/emoji.ts b/packages/backend/src/models/repositories/emoji.ts
index b9dc6ed0ac..3b13832a35 100644
--- a/packages/backend/src/models/repositories/emoji.ts
+++ b/packages/backend/src/models/repositories/emoji.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Emoji } from '@/models/entities/emoji';
-import { Packed } from '@/misc/schema';
+import { Emoji } from '@/models/entities/emoji.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(Emoji)
 export class EmojiRepository extends Repository<Emoji> {
diff --git a/packages/backend/src/models/repositories/follow-request.ts b/packages/backend/src/models/repositories/follow-request.ts
index d6ee58e235..1da1f875ea 100644
--- a/packages/backend/src/models/repositories/follow-request.ts
+++ b/packages/backend/src/models/repositories/follow-request.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { FollowRequest } from '@/models/entities/follow-request';
-import { Users } from '../index';
-import { User } from '@/models/entities/user';
+import { FollowRequest } from '@/models/entities/follow-request.js';
+import { Users } from '../index.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(FollowRequest)
 export class FollowRequestRepository extends Repository<FollowRequest> {
diff --git a/packages/backend/src/models/repositories/following.ts b/packages/backend/src/models/repositories/following.ts
index 9d20f442df..f25289d19c 100644
--- a/packages/backend/src/models/repositories/following.ts
+++ b/packages/backend/src/models/repositories/following.ts
@@ -1,9 +1,9 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Users } from '../index';
-import { Following } from '@/models/entities/following';
-import { awaitAll } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
-import { User } from '@/models/entities/user';
+import { Users } from '../index.js';
+import { Following } from '@/models/entities/following.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
+import { User } from '@/models/entities/user.js';
 
 type LocalFollowerFollowing = Following & {
 	followerHost: null;
diff --git a/packages/backend/src/models/repositories/gallery-like.ts b/packages/backend/src/models/repositories/gallery-like.ts
index 79123e5eec..545186fa19 100644
--- a/packages/backend/src/models/repositories/gallery-like.ts
+++ b/packages/backend/src/models/repositories/gallery-like.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { GalleryLike } from '@/models/entities/gallery-like';
-import { GalleryPosts } from '../index';
+import { GalleryLike } from '@/models/entities/gallery-like.js';
+import { GalleryPosts } from '../index.js';
 
 @EntityRepository(GalleryLike)
 export class GalleryLikeRepository extends Repository<GalleryLike> {
diff --git a/packages/backend/src/models/repositories/gallery-post.ts b/packages/backend/src/models/repositories/gallery-post.ts
index e9233bb91e..bbb036dd09 100644
--- a/packages/backend/src/models/repositories/gallery-post.ts
+++ b/packages/backend/src/models/repositories/gallery-post.ts
@@ -1,9 +1,9 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { GalleryPost } from '@/models/entities/gallery-post';
-import { Packed } from '@/misc/schema';
-import { Users, DriveFiles, GalleryLikes } from '../index';
-import { awaitAll } from '@/prelude/await-all';
-import { User } from '@/models/entities/user';
+import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { Packed } from '@/misc/schema.js';
+import { Users, DriveFiles, GalleryLikes } from '../index.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(GalleryPost)
 export class GalleryPostRepository extends Repository<GalleryPost> {
diff --git a/packages/backend/src/models/repositories/hashtag.ts b/packages/backend/src/models/repositories/hashtag.ts
index c4b8d50c4e..0548e19ee3 100644
--- a/packages/backend/src/models/repositories/hashtag.ts
+++ b/packages/backend/src/models/repositories/hashtag.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Hashtag } from '@/models/entities/hashtag';
-import { Packed } from '@/misc/schema';
+import { Hashtag } from '@/models/entities/hashtag.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(Hashtag)
 export class HashtagRepository extends Repository<Hashtag> {
diff --git a/packages/backend/src/models/repositories/instance.ts b/packages/backend/src/models/repositories/instance.ts
index 6097f58ba6..358e055aaa 100644
--- a/packages/backend/src/models/repositories/instance.ts
+++ b/packages/backend/src/models/repositories/instance.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Instance } from '@/models/entities/instance';
-import { Packed } from '@/misc/schema';
+import { Instance } from '@/models/entities/instance.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(Instance)
 export class InstanceRepository extends Repository<Instance> {
diff --git a/packages/backend/src/models/repositories/messaging-message.ts b/packages/backend/src/models/repositories/messaging-message.ts
index d01d82c368..3f51707008 100644
--- a/packages/backend/src/models/repositories/messaging-message.ts
+++ b/packages/backend/src/models/repositories/messaging-message.ts
@@ -1,8 +1,8 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { Users, DriveFiles, UserGroups } from '../index';
-import { Packed } from '@/misc/schema';
-import { User } from '@/models/entities/user';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { Users, DriveFiles, UserGroups } from '../index.js';
+import { Packed } from '@/misc/schema.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(MessagingMessage)
 export class MessagingMessageRepository extends Repository<MessagingMessage> {
diff --git a/packages/backend/src/models/repositories/moderation-logs.ts b/packages/backend/src/models/repositories/moderation-logs.ts
index f530613bcc..ea78104960 100644
--- a/packages/backend/src/models/repositories/moderation-logs.ts
+++ b/packages/backend/src/models/repositories/moderation-logs.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Users } from '../index';
-import { ModerationLog } from '@/models/entities/moderation-log';
-import { awaitAll } from '@/prelude/await-all';
+import { Users } from '../index.js';
+import { ModerationLog } from '@/models/entities/moderation-log.js';
+import { awaitAll } from '@/prelude/await-all.js';
 
 @EntityRepository(ModerationLog)
 export class ModerationLogRepository extends Repository<ModerationLog> {
diff --git a/packages/backend/src/models/repositories/muting.ts b/packages/backend/src/models/repositories/muting.ts
index bdbe9b47da..6ffecc302a 100644
--- a/packages/backend/src/models/repositories/muting.ts
+++ b/packages/backend/src/models/repositories/muting.ts
@@ -1,9 +1,9 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Users } from '../index';
-import { Muting } from '@/models/entities/muting';
-import { awaitAll } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
-import { User } from '@/models/entities/user';
+import { Users } from '../index.js';
+import { Muting } from '@/models/entities/muting.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(Muting)
 export class MutingRepository extends Repository<Muting> {
diff --git a/packages/backend/src/models/repositories/note-favorite.ts b/packages/backend/src/models/repositories/note-favorite.ts
index f4cd64e393..d7a7925ebc 100644
--- a/packages/backend/src/models/repositories/note-favorite.ts
+++ b/packages/backend/src/models/repositories/note-favorite.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { NoteFavorite } from '@/models/entities/note-favorite';
-import { Notes } from '../index';
-import { User } from '@/models/entities/user';
+import { NoteFavorite } from '@/models/entities/note-favorite.js';
+import { Notes } from '../index.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(NoteFavorite)
 export class NoteFavoriteRepository extends Repository<NoteFavorite> {
diff --git a/packages/backend/src/models/repositories/note-reaction.ts b/packages/backend/src/models/repositories/note-reaction.ts
index 097574effa..e83e753ec8 100644
--- a/packages/backend/src/models/repositories/note-reaction.ts
+++ b/packages/backend/src/models/repositories/note-reaction.ts
@@ -1,9 +1,9 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { Notes, Users } from '../index';
-import { Packed } from '@/misc/schema';
-import { convertLegacyReaction } from '@/misc/reaction-lib';
-import { User } from '@/models/entities/user';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { Notes, Users } from '../index.js';
+import { Packed } from '@/misc/schema.js';
+import { convertLegacyReaction } from '@/misc/reaction-lib.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(NoteReaction)
 export class NoteReactionRepository extends Repository<NoteReaction> {
diff --git a/packages/backend/src/models/repositories/note.ts b/packages/backend/src/models/repositories/note.ts
index 4d6a6d22f8..418d6e2346 100644
--- a/packages/backend/src/models/repositories/note.ts
+++ b/packages/backend/src/models/repositories/note.ts
@@ -1,14 +1,14 @@
 import { EntityRepository, Repository, In } from 'typeorm';
 import * as mfm from 'mfm-js';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { Users, PollVotes, DriveFiles, NoteReactions, Followings, Polls, Channels } from '../index';
-import { Packed } from '@/misc/schema';
-import { nyaize } from '@/misc/nyaize';
-import { awaitAll } from '@/prelude/await-all';
-import { convertLegacyReaction, convertLegacyReactions, decodeReaction } from '@/misc/reaction-lib';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { aggregateNoteEmojis, populateEmojis, prefetchEmojis } from '@/misc/populate-emojis';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { Users, PollVotes, DriveFiles, NoteReactions, Followings, Polls, Channels } from '../index.js';
+import { Packed } from '@/misc/schema.js';
+import { nyaize } from '@/misc/nyaize.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { convertLegacyReaction, convertLegacyReactions, decodeReaction } from '@/misc/reaction-lib.js';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { aggregateNoteEmojis, populateEmojis, prefetchEmojis } from '@/misc/populate-emojis.js';
 
 @EntityRepository(Note)
 export class NoteRepository extends Repository<Note> {
diff --git a/packages/backend/src/models/repositories/notification.ts b/packages/backend/src/models/repositories/notification.ts
index 5e42798898..441bb79261 100644
--- a/packages/backend/src/models/repositories/notification.ts
+++ b/packages/backend/src/models/repositories/notification.ts
@@ -1,13 +1,13 @@
 import { EntityRepository, In, Repository } from 'typeorm';
-import { Users, Notes, UserGroupInvitations, AccessTokens, NoteReactions } from '../index';
-import { Notification } from '@/models/entities/notification';
-import { awaitAll } from '@/prelude/await-all';
-import { Packed } from '@/misc/schema';
-import { Note } from '@/models/entities/note';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { User } from '@/models/entities/user';
-import { aggregateNoteEmojis, prefetchEmojis } from '@/misc/populate-emojis';
-import { notificationTypes } from '@/types';
+import { Users, Notes, UserGroupInvitations, AccessTokens, NoteReactions } from '../index.js';
+import { Notification } from '@/models/entities/notification.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { Packed } from '@/misc/schema.js';
+import { Note } from '@/models/entities/note.js';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { User } from '@/models/entities/user.js';
+import { aggregateNoteEmojis, prefetchEmojis } from '@/misc/populate-emojis.js';
+import { notificationTypes } from '@/types.js';
 
 @EntityRepository(Notification)
 export class NotificationRepository extends Repository<Notification> {
diff --git a/packages/backend/src/models/repositories/page-like.ts b/packages/backend/src/models/repositories/page-like.ts
index 28f34254d9..66d780584f 100644
--- a/packages/backend/src/models/repositories/page-like.ts
+++ b/packages/backend/src/models/repositories/page-like.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { PageLike } from '@/models/entities/page-like';
-import { Pages } from '../index';
-import { User } from '@/models/entities/user';
+import { PageLike } from '@/models/entities/page-like.js';
+import { Pages } from '../index.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(PageLike)
 export class PageLikeRepository extends Repository<PageLike> {
diff --git a/packages/backend/src/models/repositories/page.ts b/packages/backend/src/models/repositories/page.ts
index ec76c2e418..037c13c434 100644
--- a/packages/backend/src/models/repositories/page.ts
+++ b/packages/backend/src/models/repositories/page.ts
@@ -1,10 +1,10 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Page } from '@/models/entities/page';
-import { Packed } from '@/misc/schema';
-import { Users, DriveFiles, PageLikes } from '../index';
-import { awaitAll } from '@/prelude/await-all';
-import { DriveFile } from '@/models/entities/drive-file';
-import { User } from '@/models/entities/user';
+import { Page } from '@/models/entities/page.js';
+import { Packed } from '@/misc/schema.js';
+import { Users, DriveFiles, PageLikes } from '../index.js';
+import { awaitAll } from '@/prelude/await-all.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { User } from '@/models/entities/user.js';
 
 @EntityRepository(Page)
 export class PageRepository extends Repository<Page> {
diff --git a/packages/backend/src/models/repositories/relay.ts b/packages/backend/src/models/repositories/relay.ts
index 72ead899f1..160ca60f7b 100644
--- a/packages/backend/src/models/repositories/relay.ts
+++ b/packages/backend/src/models/repositories/relay.ts
@@ -1,5 +1,5 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Relay } from '@/models/entities/relay';
+import { Relay } from '@/models/entities/relay.js';
 
 @EntityRepository(Relay)
 export class RelayRepository extends Repository<Relay> {
diff --git a/packages/backend/src/models/repositories/signin.ts b/packages/backend/src/models/repositories/signin.ts
index f375f9b5c0..a0e2ce1526 100644
--- a/packages/backend/src/models/repositories/signin.ts
+++ b/packages/backend/src/models/repositories/signin.ts
@@ -1,5 +1,5 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { Signin } from '@/models/entities/signin';
+import { Signin } from '@/models/entities/signin.js';
 
 @EntityRepository(Signin)
 export class SigninRepository extends Repository<Signin> {
diff --git a/packages/backend/src/models/repositories/user-group-invitation.ts b/packages/backend/src/models/repositories/user-group-invitation.ts
index 638603d6ea..e338242c64 100644
--- a/packages/backend/src/models/repositories/user-group-invitation.ts
+++ b/packages/backend/src/models/repositories/user-group-invitation.ts
@@ -1,6 +1,6 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { UserGroupInvitation } from '@/models/entities/user-group-invitation';
-import { UserGroups } from '../index';
+import { UserGroupInvitation } from '@/models/entities/user-group-invitation.js';
+import { UserGroups } from '../index.js';
 
 @EntityRepository(UserGroupInvitation)
 export class UserGroupInvitationRepository extends Repository<UserGroupInvitation> {
diff --git a/packages/backend/src/models/repositories/user-group.ts b/packages/backend/src/models/repositories/user-group.ts
index 3ed37ca0ed..a9ffe7369e 100644
--- a/packages/backend/src/models/repositories/user-group.ts
+++ b/packages/backend/src/models/repositories/user-group.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { UserGroup } from '@/models/entities/user-group';
-import { UserGroupJoinings } from '../index';
-import { Packed } from '@/misc/schema';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { UserGroupJoinings } from '../index.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(UserGroup)
 export class UserGroupRepository extends Repository<UserGroup> {
diff --git a/packages/backend/src/models/repositories/user-list.ts b/packages/backend/src/models/repositories/user-list.ts
index a2bffe8357..0ea26427fe 100644
--- a/packages/backend/src/models/repositories/user-list.ts
+++ b/packages/backend/src/models/repositories/user-list.ts
@@ -1,7 +1,7 @@
 import { EntityRepository, Repository } from 'typeorm';
-import { UserList } from '@/models/entities/user-list';
-import { UserListJoinings } from '../index';
-import { Packed } from '@/misc/schema';
+import { UserList } from '@/models/entities/user-list.js';
+import { UserListJoinings } from '../index.js';
+import { Packed } from '@/misc/schema.js';
 
 @EntityRepository(UserList)
 export class UserListRepository extends Repository<UserList> {
diff --git a/packages/backend/src/models/repositories/user.ts b/packages/backend/src/models/repositories/user.ts
index aea94b3797..478b1ac287 100644
--- a/packages/backend/src/models/repositories/user.ts
+++ b/packages/backend/src/models/repositories/user.ts
@@ -1,13 +1,13 @@
 import { EntityRepository, Repository, In, Not } from 'typeorm';
-import * as Ajv from 'ajv';
-import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances } from '../index';
-import config from '@/config/index';
-import { Packed } from '@/misc/schema';
-import { awaitAll, Promiseable } from '@/prelude/await-all';
-import { populateEmojis } from '@/misc/populate-emojis';
-import { getAntennas } from '@/misc/antenna-cache';
-import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const';
+import Ajv from 'ajv';
+import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances } from '../index.js';
+import config from '@/config/index.js';
+import { Packed } from '@/misc/schema.js';
+import { awaitAll, Promiseable } from '@/prelude/await-all.js';
+import { populateEmojis } from '@/misc/populate-emojis.js';
+import { getAntennas } from '@/misc/antenna-cache.js';
+import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
 
 type IsUserDetailed<Detailed extends boolean> = Detailed extends true ? Packed<'UserDetailed'> : Packed<'UserLite'>;
 type IsMeAndIsUserDetailed<ExpectsMe extends boolean | null, Detailed extends boolean> =
diff --git a/packages/backend/src/models/schema/federation-instance.ts b/packages/backend/src/models/schema/federation-instance.ts
index 41fc9d3ef7..c4e7b3f18b 100644
--- a/packages/backend/src/models/schema/federation-instance.ts
+++ b/packages/backend/src/models/schema/federation-instance.ts
@@ -1,4 +1,4 @@
-import config from "@/config";
+import config from '@/config/index.js';
 
 export const packedFederationInstanceSchema = {
 	type: 'object',
diff --git a/packages/backend/src/models/schema/notification.ts b/packages/backend/src/models/schema/notification.ts
index f3c293c480..d3f2405cdd 100644
--- a/packages/backend/src/models/schema/notification.ts
+++ b/packages/backend/src/models/schema/notification.ts
@@ -1,4 +1,4 @@
-import { notificationTypes } from "@/types";
+import { notificationTypes } from '@/types.js';
 
 export const packedNotificationSchema = {
 	type: 'object',
diff --git a/packages/backend/src/prelude/array.ts b/packages/backend/src/prelude/array.ts
index 1e9e62b895..0b2830cb7b 100644
--- a/packages/backend/src/prelude/array.ts
+++ b/packages/backend/src/prelude/array.ts
@@ -1,4 +1,4 @@
-import { EndoRelation, Predicate } from './relation';
+import { EndoRelation, Predicate } from './relation.js';
 
 /**
  * Count the number of elements that satisfy the predicate
diff --git a/packages/backend/src/queue/get-job-info.ts b/packages/backend/src/queue/get-job-info.ts
index f601ae62d0..d33e349c36 100644
--- a/packages/backend/src/queue/get-job-info.ts
+++ b/packages/backend/src/queue/get-job-info.ts
@@ -1,4 +1,4 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
 export function getJobInfo(job: Bull.Job, increment = false) {
 	const age = Date.now() - job.timestamp;
diff --git a/packages/backend/src/queue/index.ts b/packages/backend/src/queue/index.ts
index 62f372f3a8..24c0e1f237 100644
--- a/packages/backend/src/queue/index.ts
+++ b/packages/backend/src/queue/index.ts
@@ -1,19 +1,19 @@
 import * as httpSignature from 'http-signature';
 
-import config from '@/config/index';
-import { envOption } from '../env';
+import config from '@/config/index.js';
+import { envOption } from '../env.js';
 
-import processDeliver from './processors/deliver';
-import processInbox from './processors/inbox';
-import processDb from './processors/db/index';
-import processObjectStorage from './processors/object-storage/index';
-import processSystemQueue from './processors/system/index';
-import { queueLogger } from './logger';
-import { DriveFile } from '@/models/entities/drive-file';
-import { getJobInfo } from './get-job-info';
-import { systemQueue, dbQueue, deliverQueue, inboxQueue, objectStorageQueue } from './queues';
-import { ThinUser } from './types';
-import { IActivity } from '@/remote/activitypub/type';
+import processDeliver from './processors/deliver.js';
+import processInbox from './processors/inbox.js';
+import processDb from './processors/db/index.js';
+import processObjectStorage from './processors/object-storage/index.js';
+import processSystemQueue from './processors/system/index.js';
+import { queueLogger } from './logger.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { getJobInfo } from './get-job-info.js';
+import { systemQueue, dbQueue, deliverQueue, inboxQueue, objectStorageQueue } from './queues.js';
+import { ThinUser } from './types.js';
+import { IActivity } from '@/remote/activitypub/type.js';
 
 function renderError(e: Error): any {
 	return {
diff --git a/packages/backend/src/queue/initialize.ts b/packages/backend/src/queue/initialize.ts
index af9acb3ce5..1db118ca9f 100644
--- a/packages/backend/src/queue/initialize.ts
+++ b/packages/backend/src/queue/initialize.ts
@@ -1,5 +1,5 @@
-import * as Bull from 'bull';
-import config from '@/config/index';
+import Bull from 'bull';
+import config from '@/config/index.js';
 
 export function initialize<T>(name: string, limitPerSec = -1) {
 	return new Bull<T>(name, {
diff --git a/packages/backend/src/queue/logger.ts b/packages/backend/src/queue/logger.ts
index f789b9d079..2843a3c263 100644
--- a/packages/backend/src/queue/logger.ts
+++ b/packages/backend/src/queue/logger.ts
@@ -1,3 +1,3 @@
-import Logger from '@/services/logger';
+import Logger from '@/services/logger.js';
 
 export const queueLogger = new Logger('queue', 'orange');
diff --git a/packages/backend/src/queue/processors/db/delete-account.ts b/packages/backend/src/queue/processors/db/delete-account.ts
index 3af181d1d4..dbc1f16a46 100644
--- a/packages/backend/src/queue/processors/db/delete-account.ts
+++ b/packages/backend/src/queue/processors/db/delete-account.ts
@@ -1,12 +1,12 @@
-import * as Bull from 'bull';
-import { queueLogger } from '../../logger';
-import { DriveFiles, Notes, UserProfiles, Users } from '@/models/index';
-import { DbUserDeleteJobData } from '@/queue/types';
-import { Note } from '@/models/entities/note';
-import { DriveFile } from '@/models/entities/drive-file';
+import Bull from 'bull';
+import { queueLogger } from '../../logger.js';
+import { DriveFiles, Notes, UserProfiles, Users } from '@/models/index.js';
+import { DbUserDeleteJobData } from '@/queue/types.js';
+import { Note } from '@/models/entities/note.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
 import { MoreThan } from 'typeorm';
-import { deleteFileSync } from '@/services/drive/delete-file';
-import { sendEmail } from '@/services/send-email';
+import { deleteFileSync } from '@/services/drive/delete-file.js';
+import { sendEmail } from '@/services/send-email.js';
 
 const logger = queueLogger.createSubLogger('delete-account');
 
diff --git a/packages/backend/src/queue/processors/db/delete-drive-files.ts b/packages/backend/src/queue/processors/db/delete-drive-files.ts
index d26f5a47c4..f6a8699855 100644
--- a/packages/backend/src/queue/processors/db/delete-drive-files.ts
+++ b/packages/backend/src/queue/processors/db/delete-drive-files.ts
@@ -1,10 +1,10 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import { deleteFileSync } from '@/services/drive/delete-file';
-import { Users, DriveFiles } from '@/models/index';
+import { queueLogger } from '../../logger.js';
+import { deleteFileSync } from '@/services/drive/delete-file.js';
+import { Users, DriveFiles } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import { DbUserJobData } from '@/queue/types';
+import { DbUserJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('delete-drive-files');
 
diff --git a/packages/backend/src/queue/processors/db/export-blocking.ts b/packages/backend/src/queue/processors/db/export-blocking.ts
index f4de9ce005..83f1ec8fd6 100644
--- a/packages/backend/src/queue/processors/db/export-blocking.ts
+++ b/packages/backend/src/queue/processors/db/export-blocking.ts
@@ -1,14 +1,14 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { getFullApAccount } from '@/misc/convert-host';
-import { Users, Blockings } from '@/models/index';
+import { getFullApAccount } from '@/misc/convert-host.js';
+import { Users, Blockings } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import { DbUserJobData } from '@/queue/types';
+import { DbUserJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('export-blocking');
 
diff --git a/packages/backend/src/queue/processors/db/export-custom-emojis.ts b/packages/backend/src/queue/processors/db/export-custom-emojis.ts
index 28d54661c5..a65b46cc00 100644
--- a/packages/backend/src/queue/processors/db/export-custom-emojis.ts
+++ b/packages/backend/src/queue/processors/db/export-custom-emojis.ts
@@ -1,17 +1,17 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
 import { ulid } from 'ulid';
-const mime = require('mime-types');
-const archiver = require('archiver');
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import mime from 'mime-types';
+import archiver from 'archiver';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { Users, Emojis } from '@/models/index';
-import {  } from '@/queue/types';
-import { downloadUrl } from '@/misc/download-url';
-import config from '@/config/index';
+import { Users, Emojis } from '@/models/index.js';
+import {  } from '@/queue/types.js';
+import { downloadUrl } from '@/misc/download-url.js';
+import config from '@/config/index.js';
 
 const logger = queueLogger.createSubLogger('export-custom-emojis');
 
diff --git a/packages/backend/src/queue/processors/db/export-following.ts b/packages/backend/src/queue/processors/db/export-following.ts
index d63904aa41..162862180b 100644
--- a/packages/backend/src/queue/processors/db/export-following.ts
+++ b/packages/backend/src/queue/processors/db/export-following.ts
@@ -1,15 +1,15 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { getFullApAccount } from '@/misc/convert-host';
-import { Users, Followings, Mutings } from '@/models/index';
+import { getFullApAccount } from '@/misc/convert-host.js';
+import { Users, Followings, Mutings } from '@/models/index.js';
 import { In, MoreThan, Not } from 'typeorm';
-import { DbUserJobData } from '@/queue/types';
-import { Following } from '@/models/entities/following';
+import { DbUserJobData } from '@/queue/types.js';
+import { Following } from '@/models/entities/following.js';
 
 const logger = queueLogger.createSubLogger('export-following');
 
diff --git a/packages/backend/src/queue/processors/db/export-mute.ts b/packages/backend/src/queue/processors/db/export-mute.ts
index 9e917ccbf3..8602e00bff 100644
--- a/packages/backend/src/queue/processors/db/export-mute.ts
+++ b/packages/backend/src/queue/processors/db/export-mute.ts
@@ -1,14 +1,14 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { getFullApAccount } from '@/misc/convert-host';
-import { Users, Mutings } from '@/models/index';
+import { getFullApAccount } from '@/misc/convert-host.js';
+import { Users, Mutings } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import { DbUserJobData } from '@/queue/types';
+import { DbUserJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('export-mute');
 
diff --git a/packages/backend/src/queue/processors/db/export-notes.ts b/packages/backend/src/queue/processors/db/export-notes.ts
index 6719cf0bb7..c79679366c 100644
--- a/packages/backend/src/queue/processors/db/export-notes.ts
+++ b/packages/backend/src/queue/processors/db/export-notes.ts
@@ -1,15 +1,15 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { Users, Notes, Polls } from '@/models/index';
+import { Users, Notes, Polls } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import { Note } from '@/models/entities/note';
-import { Poll } from '@/models/entities/poll';
-import { DbUserJobData } from '@/queue/types';
+import { Note } from '@/models/entities/note.js';
+import { Poll } from '@/models/entities/poll.js';
+import { DbUserJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('export-notes');
 
diff --git a/packages/backend/src/queue/processors/db/export-user-lists.ts b/packages/backend/src/queue/processors/db/export-user-lists.ts
index fcd2ba336c..1c04c36789 100644
--- a/packages/backend/src/queue/processors/db/export-user-lists.ts
+++ b/packages/backend/src/queue/processors/db/export-user-lists.ts
@@ -1,14 +1,14 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
-import { queueLogger } from '../../logger';
-import { addFile } from '@/services/drive/add-file';
+import { queueLogger } from '../../logger.js';
+import { addFile } from '@/services/drive/add-file.js';
 import { format as dateFormat } from 'date-fns';
-import { getFullApAccount } from '@/misc/convert-host';
-import { Users, UserLists, UserListJoinings } from '@/models/index';
+import { getFullApAccount } from '@/misc/convert-host.js';
+import { Users, UserLists, UserListJoinings } from '@/models/index.js';
 import { In } from 'typeorm';
-import { DbUserJobData } from '@/queue/types';
+import { DbUserJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('export-user-lists');
 
diff --git a/packages/backend/src/queue/processors/db/import-blocking.ts b/packages/backend/src/queue/processors/db/import-blocking.ts
index 42c3cd0a40..857c2629e3 100644
--- a/packages/backend/src/queue/processors/db/import-blocking.ts
+++ b/packages/backend/src/queue/processors/db/import-blocking.ts
@@ -1,13 +1,13 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import * as Acct from 'misskey-js/built/acct';
-import { resolveUser } from '@/remote/resolve-user';
-import { downloadTextFile } from '@/misc/download-text-file';
-import { isSelfHost, toPuny } from '@/misc/convert-host';
-import { Users, DriveFiles, Blockings } from '@/models/index';
-import { DbUserImportJobData } from '@/queue/types';
-import block from '@/services/blocking/create';
+import { queueLogger } from '../../logger.js';
+import * as Acct from '@/misc/acct.js';
+import { resolveUser } from '@/remote/resolve-user.js';
+import { downloadTextFile } from '@/misc/download-text-file.js';
+import { isSelfHost, toPuny } from '@/misc/convert-host.js';
+import { Users, DriveFiles, Blockings } from '@/models/index.js';
+import { DbUserImportJobData } from '@/queue/types.js';
+import block from '@/services/blocking/create.js';
 
 const logger = queueLogger.createSubLogger('import-blocking');
 
diff --git a/packages/backend/src/queue/processors/db/import-custom-emojis.ts b/packages/backend/src/queue/processors/db/import-custom-emojis.ts
index b6c0126534..f862276b47 100644
--- a/packages/backend/src/queue/processors/db/import-custom-emojis.ts
+++ b/packages/backend/src/queue/processors/db/import-custom-emojis.ts
@@ -1,15 +1,15 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 import * as tmp from 'tmp';
-import * as fs from 'fs';
-const unzipper = require('unzipper');
+import * as fs from 'node:fs';
+import unzipper from 'unzipper';
 import { getConnection } from 'typeorm';
 
-import { queueLogger } from '../../logger';
-import { downloadUrl } from '@/misc/download-url';
-import { DriveFiles, Emojis } from '@/models/index';
-import { DbUserImportJobData } from '@/queue/types';
-import { addFile } from '@/services/drive/add-file';
-import { genId } from '@/misc/gen-id';
+import { queueLogger } from '../../logger.js';
+import { downloadUrl } from '@/misc/download-url.js';
+import { DriveFiles, Emojis } from '@/models/index.js';
+import { DbUserImportJobData } from '@/queue/types.js';
+import { addFile } from '@/services/drive/add-file.js';
+import { genId } from '@/misc/gen-id.js';
 
 const logger = queueLogger.createSubLogger('import-custom-emojis');
 
diff --git a/packages/backend/src/queue/processors/db/import-following.ts b/packages/backend/src/queue/processors/db/import-following.ts
index f19296832e..235fc28394 100644
--- a/packages/backend/src/queue/processors/db/import-following.ts
+++ b/packages/backend/src/queue/processors/db/import-following.ts
@@ -1,13 +1,13 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import follow from '@/services/following/create';
-import * as Acct from 'misskey-js/built/acct';
-import { resolveUser } from '@/remote/resolve-user';
-import { downloadTextFile } from '@/misc/download-text-file';
-import { isSelfHost, toPuny } from '@/misc/convert-host';
-import { Users, DriveFiles } from '@/models/index';
-import { DbUserImportJobData } from '@/queue/types';
+import { queueLogger } from '../../logger.js';
+import follow from '@/services/following/create.js';
+import * as Acct from '@/misc/acct.js';
+import { resolveUser } from '@/remote/resolve-user.js';
+import { downloadTextFile } from '@/misc/download-text-file.js';
+import { isSelfHost, toPuny } from '@/misc/convert-host.js';
+import { Users, DriveFiles } from '@/models/index.js';
+import { DbUserImportJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('import-following');
 
diff --git a/packages/backend/src/queue/processors/db/import-muting.ts b/packages/backend/src/queue/processors/db/import-muting.ts
index 189740c292..32f5f6bbee 100644
--- a/packages/backend/src/queue/processors/db/import-muting.ts
+++ b/packages/backend/src/queue/processors/db/import-muting.ts
@@ -1,14 +1,14 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import * as Acct from 'misskey-js/built/acct';
-import { resolveUser } from '@/remote/resolve-user';
-import { downloadTextFile } from '@/misc/download-text-file';
-import { isSelfHost, toPuny } from '@/misc/convert-host';
-import { Users, DriveFiles, Mutings } from '@/models/index';
-import { DbUserImportJobData } from '@/queue/types';
-import { User } from '@/models/entities/user';
-import { genId } from '@/misc/gen-id';
+import { queueLogger } from '../../logger.js';
+import * as Acct from '@/misc/acct.js';
+import { resolveUser } from '@/remote/resolve-user.js';
+import { downloadTextFile } from '@/misc/download-text-file.js';
+import { isSelfHost, toPuny } from '@/misc/convert-host.js';
+import { Users, DriveFiles, Mutings } from '@/models/index.js';
+import { DbUserImportJobData } from '@/queue/types.js';
+import { User } from '@/models/entities/user.js';
+import { genId } from '@/misc/gen-id.js';
 
 const logger = queueLogger.createSubLogger('import-muting');
 
diff --git a/packages/backend/src/queue/processors/db/import-user-lists.ts b/packages/backend/src/queue/processors/db/import-user-lists.ts
index 9b3c0ed60e..ae263e19b0 100644
--- a/packages/backend/src/queue/processors/db/import-user-lists.ts
+++ b/packages/backend/src/queue/processors/db/import-user-lists.ts
@@ -1,14 +1,14 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import * as Acct from 'misskey-js/built/acct';
-import { resolveUser } from '@/remote/resolve-user';
-import { pushUserToUserList } from '@/services/user-list/push';
-import { downloadTextFile } from '@/misc/download-text-file';
-import { isSelfHost, toPuny } from '@/misc/convert-host';
-import { DriveFiles, Users, UserLists, UserListJoinings } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { DbUserImportJobData } from '@/queue/types';
+import { queueLogger } from '../../logger.js';
+import * as Acct from '@/misc/acct.js';
+import { resolveUser } from '@/remote/resolve-user.js';
+import { pushUserToUserList } from '@/services/user-list/push.js';
+import { downloadTextFile } from '@/misc/download-text-file.js';
+import { isSelfHost, toPuny } from '@/misc/convert-host.js';
+import { DriveFiles, Users, UserLists, UserListJoinings } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { DbUserImportJobData } from '@/queue/types.js';
 
 const logger = queueLogger.createSubLogger('import-user-lists');
 
diff --git a/packages/backend/src/queue/processors/db/index.ts b/packages/backend/src/queue/processors/db/index.ts
index 5fffa378f5..e91d569779 100644
--- a/packages/backend/src/queue/processors/db/index.ts
+++ b/packages/backend/src/queue/processors/db/index.ts
@@ -1,18 +1,18 @@
-import * as Bull from 'bull';
-import { DbJobData } from '@/queue/types';
-import { deleteDriveFiles } from './delete-drive-files';
-import { exportCustomEmojis } from './export-custom-emojis';
-import { exportNotes } from './export-notes';
-import { exportFollowing } from './export-following';
-import { exportMute } from './export-mute';
-import { exportBlocking } from './export-blocking';
-import { exportUserLists } from './export-user-lists';
-import { importFollowing } from './import-following';
-import { importUserLists } from './import-user-lists';
-import { deleteAccount } from './delete-account';
-import { importMuting } from './import-muting';
-import { importBlocking } from './import-blocking';
-import { importCustomEmojis } from './import-custom-emojis';
+import Bull from 'bull';
+import { DbJobData } from '@/queue/types.js';
+import { deleteDriveFiles } from './delete-drive-files.js';
+import { exportCustomEmojis } from './export-custom-emojis.js';
+import { exportNotes } from './export-notes.js';
+import { exportFollowing } from './export-following.js';
+import { exportMute } from './export-mute.js';
+import { exportBlocking } from './export-blocking.js';
+import { exportUserLists } from './export-user-lists.js';
+import { importFollowing } from './import-following.js';
+import { importUserLists } from './import-user-lists.js';
+import { deleteAccount } from './delete-account.js';
+import { importMuting } from './import-muting.js';
+import { importBlocking } from './import-blocking.js';
+import { importCustomEmojis } from './import-custom-emojis.js';
 
 const jobs = {
 	deleteDriveFiles,
diff --git a/packages/backend/src/queue/processors/deliver.ts b/packages/backend/src/queue/processors/deliver.ts
index bd91dfc3b5..291c05766e 100644
--- a/packages/backend/src/queue/processors/deliver.ts
+++ b/packages/backend/src/queue/processors/deliver.ts
@@ -1,17 +1,17 @@
-import { URL } from 'url';
-import * as Bull from 'bull';
-import request from '@/remote/activitypub/request';
-import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc';
-import Logger from '@/services/logger';
-import { Instances } from '@/models/index';
-import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index';
-import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { toPuny } from '@/misc/convert-host';
-import { Cache } from '@/misc/cache';
-import { Instance } from '@/models/entities/instance';
-import { DeliverJobData } from '../types';
-import { StatusError } from '@/misc/fetch';
+import { URL } from 'node:url';
+import Bull from 'bull';
+import request from '@/remote/activitypub/request.js';
+import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
+import Logger from '@/services/logger.js';
+import { Instances } from '@/models/index.js';
+import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index.js';
+import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { Cache } from '@/misc/cache.js';
+import { Instance } from '@/models/entities/instance.js';
+import { DeliverJobData } from '../types.js';
+import { StatusError } from '@/misc/fetch.js';
 
 const logger = new Logger('deliver');
 
diff --git a/packages/backend/src/queue/processors/inbox.ts b/packages/backend/src/queue/processors/inbox.ts
index c189256c33..b407066b7c 100644
--- a/packages/backend/src/queue/processors/inbox.ts
+++ b/packages/backend/src/queue/processors/inbox.ts
@@ -1,20 +1,20 @@
-import { URL } from 'url';
-import * as Bull from 'bull';
+import { URL } from 'node:url';
+import Bull from 'bull';
 import * as httpSignature from 'http-signature';
-import perform from '@/remote/activitypub/perform';
-import Logger from '@/services/logger';
-import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc';
-import { Instances } from '@/models/index';
-import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { toPuny, extractDbHost } from '@/misc/convert-host';
-import { getApId } from '@/remote/activitypub/type';
-import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
-import { InboxJobData } from '../types';
-import DbResolver from '@/remote/activitypub/db-resolver';
-import { resolvePerson } from '@/remote/activitypub/models/person';
-import { LdSignature } from '@/remote/activitypub/misc/ld-signature';
-import { StatusError } from '@/misc/fetch';
+import perform from '@/remote/activitypub/perform.js';
+import Logger from '@/services/logger.js';
+import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
+import { Instances } from '@/models/index.js';
+import { apRequestChart, federationChart, instanceChart } from '@/services/chart/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { toPuny, extractDbHost } from '@/misc/convert-host.js';
+import { getApId } from '@/remote/activitypub/type.js';
+import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
+import { InboxJobData } from '../types.js';
+import DbResolver from '@/remote/activitypub/db-resolver.js';
+import { resolvePerson } from '@/remote/activitypub/models/person.js';
+import { LdSignature } from '@/remote/activitypub/misc/ld-signature.js';
+import { StatusError } from '@/misc/fetch.js';
 
 const logger = new Logger('inbox');
 
diff --git a/packages/backend/src/queue/processors/object-storage/clean-remote-files.ts b/packages/backend/src/queue/processors/object-storage/clean-remote-files.ts
index 788383a0a3..7d71a20adb 100644
--- a/packages/backend/src/queue/processors/object-storage/clean-remote-files.ts
+++ b/packages/backend/src/queue/processors/object-storage/clean-remote-files.ts
@@ -1,8 +1,8 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import { deleteFileSync } from '@/services/drive/delete-file';
-import { DriveFiles } from '@/models/index';
+import { queueLogger } from '../../logger.js';
+import { deleteFileSync } from '@/services/drive/delete-file.js';
+import { DriveFiles } from '@/models/index.js';
 import { MoreThan, Not, IsNull } from 'typeorm';
 
 const logger = queueLogger.createSubLogger('clean-remote-files');
diff --git a/packages/backend/src/queue/processors/object-storage/delete-file.ts b/packages/backend/src/queue/processors/object-storage/delete-file.ts
index ed22968a27..c271e3ddd4 100644
--- a/packages/backend/src/queue/processors/object-storage/delete-file.ts
+++ b/packages/backend/src/queue/processors/object-storage/delete-file.ts
@@ -1,6 +1,6 @@
-import { ObjectStorageFileJobData } from '@/queue/types';
-import * as Bull from 'bull';
-import { deleteObjectStorageFile } from '@/services/drive/delete-file';
+import { ObjectStorageFileJobData } from '@/queue/types.js';
+import Bull from 'bull';
+import { deleteObjectStorageFile } from '@/services/drive/delete-file.js';
 
 export default async (job: Bull.Job<ObjectStorageFileJobData>) => {
 	const key: string = job.data.key;
diff --git a/packages/backend/src/queue/processors/object-storage/index.ts b/packages/backend/src/queue/processors/object-storage/index.ts
index 0d9570e179..ae6c481fea 100644
--- a/packages/backend/src/queue/processors/object-storage/index.ts
+++ b/packages/backend/src/queue/processors/object-storage/index.ts
@@ -1,7 +1,7 @@
-import * as Bull from 'bull';
-import { ObjectStorageJobData } from '@/queue/types';
-import deleteFile from './delete-file';
-import cleanRemoteFiles from './clean-remote-files';
+import Bull from 'bull';
+import { ObjectStorageJobData } from '@/queue/types.js';
+import deleteFile from './delete-file.js';
+import cleanRemoteFiles from './clean-remote-files.js';
 
 const jobs = {
 	deleteFile,
diff --git a/packages/backend/src/queue/processors/system/clean-charts.ts b/packages/backend/src/queue/processors/system/clean-charts.ts
index 3ae0f495f8..c9169d5acf 100644
--- a/packages/backend/src/queue/processors/system/clean-charts.ts
+++ b/packages/backend/src/queue/processors/system/clean-charts.ts
@@ -1,7 +1,7 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import { activeUsersChart, driveChart, federationChart, hashtagChart, instanceChart, notesChart, perUserDriveChart, perUserFollowingChart, perUserNotesChart, perUserReactionsChart, usersChart, apRequestChart } from '@/services/chart/index';
+import { queueLogger } from '../../logger.js';
+import { activeUsersChart, driveChart, federationChart, hashtagChart, instanceChart, notesChart, perUserDriveChart, perUserFollowingChart, perUserNotesChart, perUserReactionsChart, usersChart, apRequestChart } from '@/services/chart/index.js';
 
 const logger = queueLogger.createSubLogger('clean-charts');
 
diff --git a/packages/backend/src/queue/processors/system/index.ts b/packages/backend/src/queue/processors/system/index.ts
index 1513ea4a84..dca3249e82 100644
--- a/packages/backend/src/queue/processors/system/index.ts
+++ b/packages/backend/src/queue/processors/system/index.ts
@@ -1,7 +1,7 @@
-import * as Bull from 'bull';
-import { tickCharts } from './tick-charts';
-import { resyncCharts } from './resync-charts';
-import { cleanCharts } from './clean-charts';
+import Bull from 'bull';
+import { tickCharts } from './tick-charts.js';
+import { resyncCharts } from './resync-charts.js';
+import { cleanCharts } from './clean-charts.js';
 
 const jobs = {
 	tickCharts,
diff --git a/packages/backend/src/queue/processors/system/resync-charts.ts b/packages/backend/src/queue/processors/system/resync-charts.ts
index 78a70bb981..20012513af 100644
--- a/packages/backend/src/queue/processors/system/resync-charts.ts
+++ b/packages/backend/src/queue/processors/system/resync-charts.ts
@@ -1,7 +1,7 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import { driveChart, notesChart, usersChart } from '@/services/chart/index';
+import { queueLogger } from '../../logger.js';
+import { driveChart, notesChart, usersChart } from '@/services/chart/index.js';
 
 const logger = queueLogger.createSubLogger('resync-charts');
 
diff --git a/packages/backend/src/queue/processors/system/tick-charts.ts b/packages/backend/src/queue/processors/system/tick-charts.ts
index d53089f89c..13403f8f73 100644
--- a/packages/backend/src/queue/processors/system/tick-charts.ts
+++ b/packages/backend/src/queue/processors/system/tick-charts.ts
@@ -1,7 +1,7 @@
-import * as Bull from 'bull';
+import Bull from 'bull';
 
-import { queueLogger } from '../../logger';
-import { activeUsersChart, driveChart, federationChart, hashtagChart, instanceChart, notesChart, perUserDriveChart, perUserFollowingChart, perUserNotesChart, perUserReactionsChart, usersChart, apRequestChart } from '@/services/chart/index';
+import { queueLogger } from '../../logger.js';
+import { activeUsersChart, driveChart, federationChart, hashtagChart, instanceChart, notesChart, perUserDriveChart, perUserFollowingChart, perUserNotesChart, perUserReactionsChart, usersChart, apRequestChart } from '@/services/chart/index.js';
 
 const logger = queueLogger.createSubLogger('tick-charts');
 
diff --git a/packages/backend/src/queue/queues.ts b/packages/backend/src/queue/queues.ts
index b1d790fcb1..6ac4ec69cf 100644
--- a/packages/backend/src/queue/queues.ts
+++ b/packages/backend/src/queue/queues.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { initialize as initializeQueue } from './initialize';
-import { DeliverJobData, InboxJobData, DbJobData, ObjectStorageJobData } from './types';
+import config from '@/config/index.js';
+import { initialize as initializeQueue } from './initialize.js';
+import { DeliverJobData, InboxJobData, DbJobData, ObjectStorageJobData } from './types.js';
 
 export const systemQueue = initializeQueue<Record<string, unknown>>('system');
 export const deliverQueue = initializeQueue<DeliverJobData>('deliver', config.deliverJobPerSec || 128);
diff --git a/packages/backend/src/queue/types.ts b/packages/backend/src/queue/types.ts
index 91036177dc..7363c2c727 100644
--- a/packages/backend/src/queue/types.ts
+++ b/packages/backend/src/queue/types.ts
@@ -1,6 +1,6 @@
-import { DriveFile } from '@/models/entities/drive-file';
-import { User } from '@/models/entities/user';
-import { IActivity } from '@/remote/activitypub/type';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { User } from '@/models/entities/user.js';
+import { IActivity } from '@/remote/activitypub/type.js';
 import * as httpSignature from 'http-signature';
 
 export type DeliverJobData = {
diff --git a/packages/backend/src/remote/activitypub/ap-request.ts b/packages/backend/src/remote/activitypub/ap-request.ts
index c75f44f2e6..96bfec3b11 100644
--- a/packages/backend/src/remote/activitypub/ap-request.ts
+++ b/packages/backend/src/remote/activitypub/ap-request.ts
@@ -1,5 +1,5 @@
-import * as crypto from 'crypto';
-import { URL } from 'url';
+import * as crypto from 'node:crypto';
+import { URL } from 'node:url';
 
 type Request = {
 	url: string;
diff --git a/packages/backend/src/remote/activitypub/audience.ts b/packages/backend/src/remote/activitypub/audience.ts
index e82ed94a68..598a90c431 100644
--- a/packages/backend/src/remote/activitypub/audience.ts
+++ b/packages/backend/src/remote/activitypub/audience.ts
@@ -1,9 +1,9 @@
-import { ApObject, getApIds } from './type';
-import Resolver from './resolver';
-import { resolvePerson } from './models/person';
-import { unique, concat } from '@/prelude/array';
+import { ApObject, getApIds } from './type.js';
+import Resolver from './resolver.js';
+import { resolvePerson } from './models/person.js';
+import { unique, concat } from '@/prelude/array.js';
 import * as promiseLimit from 'promise-limit';
-import { User, IRemoteUser } from '@/models/entities/user';
+import { User, IRemoteUser } from '@/models/entities/user.js';
 
 type Visibility = 'public' | 'home' | 'followers' | 'specified';
 
diff --git a/packages/backend/src/remote/activitypub/db-resolver.ts b/packages/backend/src/remote/activitypub/db-resolver.ts
index f2064cf26d..9281e494d0 100644
--- a/packages/backend/src/remote/activitypub/db-resolver.ts
+++ b/packages/backend/src/remote/activitypub/db-resolver.ts
@@ -1,12 +1,12 @@
-import config from '@/config/index';
-import { Note } from '@/models/entities/note';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { UserPublickey } from '@/models/entities/user-publickey';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { Notes, Users, UserPublickeys, MessagingMessages } from '@/models/index';
-import { IObject, getApId } from './type';
-import { resolvePerson } from './models/person';
-import escapeRegexp = require('escape-regexp');
+import config from '@/config/index.js';
+import { Note } from '@/models/entities/note.js';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { UserPublickey } from '@/models/entities/user-publickey.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { Notes, Users, UserPublickeys, MessagingMessages } from '@/models/index.js';
+import { IObject, getApId } from './type.js';
+import { resolvePerson } from './models/person.js';
+import escapeRegexp from 'escape-regexp';
 
 export default class DbResolver {
 	constructor() {
diff --git a/packages/backend/src/remote/activitypub/deliver-manager.ts b/packages/backend/src/remote/activitypub/deliver-manager.ts
index b16f907693..9c4e3418ff 100644
--- a/packages/backend/src/remote/activitypub/deliver-manager.ts
+++ b/packages/backend/src/remote/activitypub/deliver-manager.ts
@@ -1,6 +1,6 @@
-import { Users, Followings } from '@/models/index';
-import { ILocalUser, IRemoteUser, User } from '@/models/entities/user';
-import { deliver } from '@/queue/index';
+import { Users, Followings } from '@/models/index.js';
+import { ILocalUser, IRemoteUser, User } from '@/models/entities/user.js';
+import { deliver } from '@/queue/index.js';
 
 //#region types
 interface IRecipe {
diff --git a/packages/backend/src/remote/activitypub/kernel/accept/follow.ts b/packages/backend/src/remote/activitypub/kernel/accept/follow.ts
index 1afb733ab5..393516addf 100644
--- a/packages/backend/src/remote/activitypub/kernel/accept/follow.ts
+++ b/packages/backend/src/remote/activitypub/kernel/accept/follow.ts
@@ -1,8 +1,8 @@
-import { IRemoteUser } from '@/models/entities/user';
-import accept from '@/services/following/requests/accept';
-import { IFollow } from '../../type';
-import DbResolver from '../../db-resolver';
-import { relayAccepted } from '@/services/relay';
+import { IRemoteUser } from '@/models/entities/user.js';
+import accept from '@/services/following/requests/accept.js';
+import { IFollow } from '../../type.js';
+import DbResolver from '../../db-resolver.js';
+import { relayAccepted } from '@/services/relay.js';
 
 export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
 	// ※ activityはこっちから投げたフォローリクエストなので、activity.actorは存在するローカルユーザーである必要がある
diff --git a/packages/backend/src/remote/activitypub/kernel/accept/index.ts b/packages/backend/src/remote/activitypub/kernel/accept/index.ts
index 5c6f81b2e3..354bd4f6e1 100644
--- a/packages/backend/src/remote/activitypub/kernel/accept/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/accept/index.ts
@@ -1,8 +1,8 @@
-import Resolver from '../../resolver';
-import { IRemoteUser } from '@/models/entities/user';
-import acceptFollow from './follow';
-import { IAccept, isFollow, getApType } from '../../type';
-import { apLogger } from '../../logger';
+import Resolver from '../../resolver.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import acceptFollow from './follow.js';
+import { IAccept, isFollow, getApType } from '../../type.js';
+import { apLogger } from '../../logger.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/add/index.ts b/packages/backend/src/remote/activitypub/kernel/add/index.ts
index b33be0cc85..9a2fac1e74 100644
--- a/packages/backend/src/remote/activitypub/kernel/add/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/add/index.ts
@@ -1,7 +1,7 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { IAdd } from '../../type';
-import { resolveNote } from '../../models/note';
-import { addPinned } from '@/services/i/pin';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IAdd } from '../../type.js';
+import { resolveNote } from '../../models/note.js';
+import { addPinned } from '@/services/i/pin.js';
 
 export default async (actor: IRemoteUser, activity: IAdd): Promise<void> => {
 	if ('actor' in activity && actor.uri !== activity.actor) {
diff --git a/packages/backend/src/remote/activitypub/kernel/announce/index.ts b/packages/backend/src/remote/activitypub/kernel/announce/index.ts
index 581357e577..7e2e73bdd5 100644
--- a/packages/backend/src/remote/activitypub/kernel/announce/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/announce/index.ts
@@ -1,8 +1,8 @@
-import Resolver from '../../resolver';
-import { IRemoteUser } from '@/models/entities/user';
-import announceNote from './note';
-import { IAnnounce, getApId } from '../../type';
-import { apLogger } from '../../logger';
+import Resolver from '../../resolver.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import announceNote from './note.js';
+import { IAnnounce, getApId } from '../../type.js';
+import { apLogger } from '../../logger.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/announce/note.ts b/packages/backend/src/remote/activitypub/kernel/announce/note.ts
index eae92d4180..f6068fac79 100644
--- a/packages/backend/src/remote/activitypub/kernel/announce/note.ts
+++ b/packages/backend/src/remote/activitypub/kernel/announce/note.ts
@@ -1,14 +1,14 @@
-import Resolver from '../../resolver';
-import post from '@/services/note/create';
-import { IRemoteUser } from '@/models/entities/user';
-import { IAnnounce, getApId } from '../../type';
-import { fetchNote, resolveNote } from '../../models/note';
-import { apLogger } from '../../logger';
-import { extractDbHost } from '@/misc/convert-host';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { getApLock } from '@/misc/app-lock';
-import { parseAudience } from '../../audience';
-import { StatusError } from '@/misc/fetch';
+import Resolver from '../../resolver.js';
+import post from '@/services/note/create.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IAnnounce, getApId } from '../../type.js';
+import { fetchNote, resolveNote } from '../../models/note.js';
+import { apLogger } from '../../logger.js';
+import { extractDbHost } from '@/misc/convert-host.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { getApLock } from '@/misc/app-lock.js';
+import { parseAudience } from '../../audience.js';
+import { StatusError } from '@/misc/fetch.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/block/index.ts b/packages/backend/src/remote/activitypub/kernel/block/index.ts
index 4fd1e07b9b..9e4f1b316e 100644
--- a/packages/backend/src/remote/activitypub/kernel/block/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/block/index.ts
@@ -1,7 +1,7 @@
-import { IBlock } from '../../type';
-import block from '@/services/blocking/create';
-import { IRemoteUser } from '@/models/entities/user';
-import DbResolver from '../../db-resolver';
+import { IBlock } from '../../type.js';
+import block from '@/services/blocking/create.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import DbResolver from '../../db-resolver.js';
 
 export default async (actor: IRemoteUser, activity: IBlock): Promise<string> => {
 	// ※ activity.objectにブロック対象があり、それは存在するローカルユーザーのはず
diff --git a/packages/backend/src/remote/activitypub/kernel/create/index.ts b/packages/backend/src/remote/activitypub/kernel/create/index.ts
index ce039a363b..1187b95ac6 100644
--- a/packages/backend/src/remote/activitypub/kernel/create/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/create/index.ts
@@ -1,9 +1,9 @@
-import Resolver from '../../resolver';
-import { IRemoteUser } from '@/models/entities/user';
-import createNote from './note';
-import { ICreate, getApId, isPost, getApType } from '../../type';
-import { apLogger } from '../../logger';
-import { toArray, concat, unique } from '@/prelude/array';
+import Resolver from '../../resolver.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import createNote from './note.js';
+import { ICreate, getApId, isPost, getApType } from '../../type.js';
+import { apLogger } from '../../logger.js';
+import { toArray, concat, unique } from '@/prelude/array.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/create/note.ts b/packages/backend/src/remote/activitypub/kernel/create/note.ts
index 14e311e4cd..b5c47990aa 100644
--- a/packages/backend/src/remote/activitypub/kernel/create/note.ts
+++ b/packages/backend/src/remote/activitypub/kernel/create/note.ts
@@ -1,10 +1,10 @@
-import Resolver from '../../resolver';
-import { IRemoteUser } from '@/models/entities/user';
-import { createNote, fetchNote } from '../../models/note';
-import { getApId, IObject, ICreate } from '../../type';
-import { getApLock } from '@/misc/app-lock';
-import { extractDbHost } from '@/misc/convert-host';
-import { StatusError } from '@/misc/fetch';
+import Resolver from '../../resolver.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { createNote, fetchNote } from '../../models/note.js';
+import { getApId, IObject, ICreate } from '../../type.js';
+import { getApLock } from '@/misc/app-lock.js';
+import { extractDbHost } from '@/misc/convert-host.js';
+import { StatusError } from '@/misc/fetch.js';
 
 /**
  * 投稿作成アクティビティを捌きます
diff --git a/packages/backend/src/remote/activitypub/kernel/delete/actor.ts b/packages/backend/src/remote/activitypub/kernel/delete/actor.ts
index 502f8d5ab5..2f75841e52 100644
--- a/packages/backend/src/remote/activitypub/kernel/delete/actor.ts
+++ b/packages/backend/src/remote/activitypub/kernel/delete/actor.ts
@@ -1,7 +1,7 @@
-import { apLogger } from '../../logger';
-import { createDeleteAccountJob } from '@/queue';
-import { IRemoteUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
+import { apLogger } from '../../logger.js';
+import { createDeleteAccountJob } from '@/queue/index.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/delete/index.ts b/packages/backend/src/remote/activitypub/kernel/delete/index.ts
index 86a452de76..b6d5e96d03 100644
--- a/packages/backend/src/remote/activitypub/kernel/delete/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/delete/index.ts
@@ -1,8 +1,8 @@
-import deleteNote from './note';
-import { IRemoteUser } from '@/models/entities/user';
-import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type';
-import { toSingle } from '@/prelude/array';
-import { deleteActor } from './actor';
+import deleteNote from './note.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type.js';
+import { toSingle } from '@/prelude/array.js';
+import { deleteActor } from './actor.js';
 
 /**
  * 削除アクティビティを捌きます
diff --git a/packages/backend/src/remote/activitypub/kernel/delete/note.ts b/packages/backend/src/remote/activitypub/kernel/delete/note.ts
index 3875a33d13..ad5e1a2edc 100644
--- a/packages/backend/src/remote/activitypub/kernel/delete/note.ts
+++ b/packages/backend/src/remote/activitypub/kernel/delete/note.ts
@@ -1,9 +1,9 @@
-import { IRemoteUser } from '@/models/entities/user';
-import deleteNode from '@/services/note/delete';
-import { apLogger } from '../../logger';
-import DbResolver from '../../db-resolver';
-import { getApLock } from '@/misc/app-lock';
-import { deleteMessage } from '@/services/messages/delete';
+import { IRemoteUser } from '@/models/entities/user.js';
+import deleteNode from '@/services/note/delete.js';
+import { apLogger } from '../../logger.js';
+import DbResolver from '../../db-resolver.js';
+import { getApLock } from '@/misc/app-lock.js';
+import { deleteMessage } from '@/services/messages/delete.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/flag/index.ts b/packages/backend/src/remote/activitypub/kernel/flag/index.ts
index d910e2ebe2..e80e632786 100644
--- a/packages/backend/src/remote/activitypub/kernel/flag/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/flag/index.ts
@@ -1,9 +1,9 @@
-import { IRemoteUser } from '@/models/entities/user';
-import config from '@/config/index';
-import { IFlag, getApIds } from '../../type';
-import { AbuseUserReports, Users } from '@/models/index';
+import { IRemoteUser } from '@/models/entities/user.js';
+import config from '@/config/index.js';
+import { IFlag, getApIds } from '../../type.js';
+import { AbuseUserReports, Users } from '@/models/index.js';
 import { In } from 'typeorm';
-import { genId } from '@/misc/gen-id';
+import { genId } from '@/misc/gen-id.js';
 
 export default async (actor: IRemoteUser, activity: IFlag): Promise<string> => {
 	// objectは `(User|Note) | (User|Note)[]` だけど、全パターンDBスキーマと対応させられないので
diff --git a/packages/backend/src/remote/activitypub/kernel/follow.ts b/packages/backend/src/remote/activitypub/kernel/follow.ts
index 3183207afa..49c1a7ee01 100644
--- a/packages/backend/src/remote/activitypub/kernel/follow.ts
+++ b/packages/backend/src/remote/activitypub/kernel/follow.ts
@@ -1,7 +1,7 @@
-import { IRemoteUser } from '@/models/entities/user';
-import follow from '@/services/following/create';
-import { IFollow } from '../type';
-import DbResolver from '../db-resolver';
+import { IRemoteUser } from '@/models/entities/user.js';
+import follow from '@/services/following/create.js';
+import { IFollow } from '../type.js';
+import DbResolver from '../db-resolver.js';
 
 export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
 	const dbResolver = new DbResolver();
diff --git a/packages/backend/src/remote/activitypub/kernel/index.ts b/packages/backend/src/remote/activitypub/kernel/index.ts
index a103e5a1be..6aea8e57cf 100644
--- a/packages/backend/src/remote/activitypub/kernel/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/index.ts
@@ -1,22 +1,22 @@
-import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection, isFlag } from '../type';
-import { IRemoteUser } from '@/models/entities/user';
-import create from './create/index';
-import performDeleteActivity from './delete/index';
-import performUpdateActivity from './update/index';
-import { performReadActivity } from './read';
-import follow from './follow';
-import undo from './undo/index';
-import like from './like';
-import announce from './announce/index';
-import accept from './accept/index';
-import reject from './reject/index';
-import add from './add/index';
-import remove from './remove/index';
-import block from './block/index';
-import flag from './flag/index';
-import { apLogger } from '../logger';
-import Resolver from '../resolver';
-import { toArray } from '@/prelude/array';
+import { IObject, isCreate, isDelete, isUpdate, isRead, isFollow, isAccept, isReject, isAdd, isRemove, isAnnounce, isLike, isUndo, isBlock, isCollectionOrOrderedCollection, isCollection, isFlag } from '../type.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import create from './create/index.js';
+import performDeleteActivity from './delete/index.js';
+import performUpdateActivity from './update/index.js';
+import { performReadActivity } from './read.js';
+import follow from './follow.js';
+import undo from './undo/index.js';
+import like from './like.js';
+import announce from './announce/index.js';
+import accept from './accept/index.js';
+import reject from './reject/index.js';
+import add from './add/index.js';
+import remove from './remove/index.js';
+import block from './block/index.js';
+import flag from './flag/index.js';
+import { apLogger } from '../logger.js';
+import Resolver from '../resolver.js';
+import { toArray } from '@/prelude/array.js';
 
 export async function performActivity(actor: IRemoteUser, activity: IObject) {
 	if (isCollectionOrOrderedCollection(activity)) {
diff --git a/packages/backend/src/remote/activitypub/kernel/like.ts b/packages/backend/src/remote/activitypub/kernel/like.ts
index 58d5aefefc..715cc379b9 100644
--- a/packages/backend/src/remote/activitypub/kernel/like.ts
+++ b/packages/backend/src/remote/activitypub/kernel/like.ts
@@ -1,7 +1,7 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { ILike, getApId } from '../type';
-import create from '@/services/note/reaction/create';
-import { fetchNote, extractEmojis } from '../models/note';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { ILike, getApId } from '../type.js';
+import create from '@/services/note/reaction/create.js';
+import { fetchNote, extractEmojis } from '../models/note.js';
 
 export default async (actor: IRemoteUser, activity: ILike) => {
 	const targetUri = getApId(activity.object);
diff --git a/packages/backend/src/remote/activitypub/kernel/read.ts b/packages/backend/src/remote/activitypub/kernel/read.ts
index 11a1731869..93cc36ec46 100644
--- a/packages/backend/src/remote/activitypub/kernel/read.ts
+++ b/packages/backend/src/remote/activitypub/kernel/read.ts
@@ -1,8 +1,8 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { IRead, getApId } from '../type';
-import { isSelfHost, extractDbHost } from '@/misc/convert-host';
-import { MessagingMessages } from '@/models/index';
-import { readUserMessagingMessage } from '../../../server/api/common/read-messaging-message';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IRead, getApId } from '../type.js';
+import { isSelfHost, extractDbHost } from '@/misc/convert-host.js';
+import { MessagingMessages } from '@/models/index.js';
+import { readUserMessagingMessage } from '../../../server/api/common/read-messaging-message.js';
 
 export const performReadActivity = async (actor: IRemoteUser, activity: IRead): Promise<string> => {
 	const id = await getApId(activity.object);
diff --git a/packages/backend/src/remote/activitypub/kernel/reject/follow.ts b/packages/backend/src/remote/activitypub/kernel/reject/follow.ts
index 049437b18f..72751e83c0 100644
--- a/packages/backend/src/remote/activitypub/kernel/reject/follow.ts
+++ b/packages/backend/src/remote/activitypub/kernel/reject/follow.ts
@@ -1,9 +1,9 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { remoteReject } from '@/services/following/reject';
-import { IFollow } from '../../type';
-import DbResolver from '../../db-resolver';
-import { relayRejected } from '@/services/relay';
-import { Users } from '@/models';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { remoteReject } from '@/services/following/reject.js';
+import { IFollow } from '../../type.js';
+import DbResolver from '../../db-resolver.js';
+import { relayRejected } from '@/services/relay.js';
+import { Users } from '@/models/index.js';
 
 export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
 	// ※ activityはこっちから投げたフォローリクエストなので、activity.actorは存在するローカルユーザーである必要がある
diff --git a/packages/backend/src/remote/activitypub/kernel/reject/index.ts b/packages/backend/src/remote/activitypub/kernel/reject/index.ts
index d0de9c329b..ed86a4aa2f 100644
--- a/packages/backend/src/remote/activitypub/kernel/reject/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/reject/index.ts
@@ -1,8 +1,8 @@
-import Resolver from '../../resolver';
-import { IRemoteUser } from '@/models/entities/user';
-import rejectFollow from './follow';
-import { IReject, isFollow, getApType } from '../../type';
-import { apLogger } from '../../logger';
+import Resolver from '../../resolver.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import rejectFollow from './follow.js';
+import { IReject, isFollow, getApType } from '../../type.js';
+import { apLogger } from '../../logger.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/remove/index.ts b/packages/backend/src/remote/activitypub/kernel/remove/index.ts
index d59953e653..7d7b3386c0 100644
--- a/packages/backend/src/remote/activitypub/kernel/remove/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/remove/index.ts
@@ -1,7 +1,7 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { IRemove } from '../../type';
-import { resolveNote } from '../../models/note';
-import { removePinned } from '@/services/i/pin';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IRemove } from '../../type.js';
+import { resolveNote } from '../../models/note.js';
+import { removePinned } from '@/services/i/pin.js';
 
 export default async (actor: IRemoteUser, activity: IRemove): Promise<void> => {
 	if ('actor' in activity && actor.uri !== activity.actor) {
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/accept.ts b/packages/backend/src/remote/activitypub/kernel/undo/accept.ts
index 10c8a9c9d9..2383eea5bd 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/accept.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/accept.ts
@@ -1,9 +1,9 @@
-import unfollow from '@/services/following/delete';
-import cancelRequest from '@/services/following/requests/cancel';
-import {IAccept} from '../../type';
-import { IRemoteUser } from '@/models/entities/user';
-import { Followings } from '@/models/index';
-import DbResolver from '../../db-resolver';
+import unfollow from '@/services/following/delete.js';
+import cancelRequest from '@/services/following/requests/cancel.js';
+import {IAccept} from '../../type.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { Followings } from '@/models/index.js';
+import DbResolver from '../../db-resolver.js';
 
 export default async (actor: IRemoteUser, activity: IAccept): Promise<string> => {
 	const dbResolver = new DbResolver();
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/announce.ts b/packages/backend/src/remote/activitypub/kernel/undo/announce.ts
index 7f302a616d..822c1e4948 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/announce.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/announce.ts
@@ -1,7 +1,7 @@
-import { Notes } from '@/models/index';
-import { IRemoteUser } from '@/models/entities/user';
-import { IAnnounce, getApId } from '../../type';
-import deleteNote from '@/services/note/delete';
+import { Notes } from '@/models/index.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { IAnnounce, getApId } from '../../type.js';
+import deleteNote from '@/services/note/delete.js';
 
 export const undoAnnounce = async (actor: IRemoteUser, activity: IAnnounce): Promise<string> => {
 	const uri = getApId(activity);
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/block.ts b/packages/backend/src/remote/activitypub/kernel/undo/block.ts
index 61940486be..844b067e2b 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/block.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/block.ts
@@ -1,7 +1,7 @@
-import { IBlock } from '../../type';
-import unblock from '@/services/blocking/delete';
-import { IRemoteUser } from '@/models/entities/user';
-import DbResolver from '../../db-resolver';
+import { IBlock } from '../../type.js';
+import unblock from '@/services/blocking/delete.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import DbResolver from '../../db-resolver.js';
 
 export default async (actor: IRemoteUser, activity: IBlock): Promise<string> => {
 	const dbResolver = new DbResolver();
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/follow.ts b/packages/backend/src/remote/activitypub/kernel/undo/follow.ts
index 783e5acf15..6715adcf76 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/follow.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/follow.ts
@@ -1,9 +1,9 @@
-import unfollow from '@/services/following/delete';
-import cancelRequest from '@/services/following/requests/cancel';
-import { IFollow } from '../../type';
-import { IRemoteUser } from '@/models/entities/user';
-import { FollowRequests, Followings } from '@/models/index';
-import DbResolver from '../../db-resolver';
+import unfollow from '@/services/following/delete.js';
+import cancelRequest from '@/services/following/requests/cancel.js';
+import { IFollow } from '../../type.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { FollowRequests, Followings } from '@/models/index.js';
+import DbResolver from '../../db-resolver.js';
 
 export default async (actor: IRemoteUser, activity: IFollow): Promise<string> => {
 	const dbResolver = new DbResolver();
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/index.ts b/packages/backend/src/remote/activitypub/kernel/undo/index.ts
index 8de78420e3..05937c6855 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/index.ts
@@ -1,12 +1,12 @@
-import { IRemoteUser } from '@/models/entities/user';
-import {IUndo, isFollow, isBlock, isLike, isAnnounce, getApType, isAccept} from '../../type';
-import unfollow from './follow';
-import unblock from './block';
-import undoLike from './like';
-import undoAccept from './accept';
-import { undoAnnounce } from './announce';
-import Resolver from '../../resolver';
-import { apLogger } from '../../logger';
+import { IRemoteUser } from '@/models/entities/user.js';
+import {IUndo, isFollow, isBlock, isLike, isAnnounce, getApType, isAccept} from '../../type.js';
+import unfollow from './follow.js';
+import unblock from './block.js';
+import undoLike from './like.js';
+import undoAccept from './accept.js';
+import { undoAnnounce } from './announce.js';
+import Resolver from '../../resolver.js';
+import { apLogger } from '../../logger.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/kernel/undo/like.ts b/packages/backend/src/remote/activitypub/kernel/undo/like.ts
index 107d3053e3..08ac630351 100644
--- a/packages/backend/src/remote/activitypub/kernel/undo/like.ts
+++ b/packages/backend/src/remote/activitypub/kernel/undo/like.ts
@@ -1,7 +1,7 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { ILike, getApId } from '../../type';
-import deleteReaction from '@/services/note/reaction/delete';
-import { fetchNote } from '../../models/note';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { ILike, getApId } from '../../type.js';
+import deleteReaction from '@/services/note/reaction/delete.js';
+import { fetchNote } from '../../models/note.js';
 
 /**
  * Process Undo.Like activity
diff --git a/packages/backend/src/remote/activitypub/kernel/update/index.ts b/packages/backend/src/remote/activitypub/kernel/update/index.ts
index 52bfc5002e..7888c698e3 100644
--- a/packages/backend/src/remote/activitypub/kernel/update/index.ts
+++ b/packages/backend/src/remote/activitypub/kernel/update/index.ts
@@ -1,9 +1,9 @@
-import { IRemoteUser } from '@/models/entities/user';
-import { getApType, IUpdate, isActor } from '../../type';
-import { apLogger } from '../../logger';
-import { updateQuestion } from '../../models/question';
-import Resolver from '../../resolver';
-import { updatePerson } from '../../models/person';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { getApType, IUpdate, isActor } from '../../type.js';
+import { apLogger } from '../../logger.js';
+import { updateQuestion } from '../../models/question.js';
+import Resolver from '../../resolver.js';
+import { updatePerson } from '../../models/person.js';
 
 /**
  * Updateアクティビティを捌きます
diff --git a/packages/backend/src/remote/activitypub/logger.ts b/packages/backend/src/remote/activitypub/logger.ts
index e13add01db..cab51b3bf5 100644
--- a/packages/backend/src/remote/activitypub/logger.ts
+++ b/packages/backend/src/remote/activitypub/logger.ts
@@ -1,3 +1,3 @@
-import { remoteLogger } from '../logger';
+import { remoteLogger } from '../logger.js';
 
 export const apLogger = remoteLogger.createSubLogger('ap', 'magenta');
diff --git a/packages/backend/src/remote/activitypub/misc/get-note-html.ts b/packages/backend/src/remote/activitypub/misc/get-note-html.ts
index 043335a5be..3800b40608 100644
--- a/packages/backend/src/remote/activitypub/misc/get-note-html.ts
+++ b/packages/backend/src/remote/activitypub/misc/get-note-html.ts
@@ -1,6 +1,6 @@
 import * as mfm from 'mfm-js';
-import { Note } from '@/models/entities/note';
-import { toHtml } from '../../../mfm/to-html';
+import { Note } from '@/models/entities/note.js';
+import { toHtml } from '../../../mfm/to-html.js';
 
 export default function(note: Note) {
 	let html = note.text ? toHtml(mfm.parse(note.text), JSON.parse(note.mentionedRemoteUsers)) : null;
diff --git a/packages/backend/src/remote/activitypub/misc/html-to-mfm.ts b/packages/backend/src/remote/activitypub/misc/html-to-mfm.ts
index 5cca04df21..bb1ba7925c 100644
--- a/packages/backend/src/remote/activitypub/misc/html-to-mfm.ts
+++ b/packages/backend/src/remote/activitypub/misc/html-to-mfm.ts
@@ -1,6 +1,6 @@
-import { IObject } from '../type';
-import { extractApHashtagObjects } from '../models/tag';
-import { fromHtml } from '../../../mfm/from-html';
+import { IObject } from '../type.js';
+import { extractApHashtagObjects } from '../models/tag.js';
+import { fromHtml } from '../../../mfm/from-html.js';
 
 export function htmlToMfm(html: string, tag?: IObject | IObject[]) {
 	const hashtagNames = extractApHashtagObjects(tag).map(x => x.name).filter((x): x is string => x != null);
diff --git a/packages/backend/src/remote/activitypub/misc/ld-signature.ts b/packages/backend/src/remote/activitypub/misc/ld-signature.ts
index 3b799c755c..34294c935d 100644
--- a/packages/backend/src/remote/activitypub/misc/ld-signature.ts
+++ b/packages/backend/src/remote/activitypub/misc/ld-signature.ts
@@ -1,8 +1,8 @@
-import * as crypto from 'crypto';
+import * as crypto from 'node:crypto';
 import * as jsonld from 'jsonld';
-import { CONTEXTS } from './contexts';
+import { CONTEXTS } from './contexts.js';
 import fetch from 'node-fetch';
-import { httpAgent, httpsAgent } from '@/misc/fetch';
+import { httpAgent, httpsAgent } from '@/misc/fetch.js';
 
 // RsaSignature2017 based from https://github.com/transmute-industries/RsaSignature2017
 
diff --git a/packages/backend/src/remote/activitypub/models/image.ts b/packages/backend/src/remote/activitypub/models/image.ts
index 6f60b7827d..b5e9181d30 100644
--- a/packages/backend/src/remote/activitypub/models/image.ts
+++ b/packages/backend/src/remote/activitypub/models/image.ts
@@ -1,12 +1,12 @@
-import { uploadFromUrl } from '@/services/drive/upload-from-url';
-import { IRemoteUser } from '@/models/entities/user';
-import Resolver from '../resolver';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { apLogger } from '../logger';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles } from '@/models/index';
-import { truncate } from '@/misc/truncate';
-import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits';
+import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import Resolver from '../resolver.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { apLogger } from '../logger.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles } from '@/models/index.js';
+import { truncate } from '@/misc/truncate.js';
+import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/models/mention.ts b/packages/backend/src/remote/activitypub/models/mention.ts
index ade9c90806..a75f9ce980 100644
--- a/packages/backend/src/remote/activitypub/models/mention.ts
+++ b/packages/backend/src/remote/activitypub/models/mention.ts
@@ -1,9 +1,9 @@
-import { toArray, unique } from '@/prelude/array';
-import { IObject, isMention, IApMention } from '../type';
-import { resolvePerson } from './person';
+import { toArray, unique } from '@/prelude/array.js';
+import { IObject, isMention, IApMention } from '../type.js';
+import { resolvePerson } from './person.js';
 import * as promiseLimit from 'promise-limit';
-import Resolver from '../resolver';
-import { User } from '@/models/entities/user';
+import Resolver from '../resolver.js';
+import { User } from '@/models/entities/user.js';
 
 export async function extractApMentions(tags: IObject | IObject[] | null | undefined) {
 	const hrefs = unique(extractApMentionObjects(tags).map(x => x.href as string));
diff --git a/packages/backend/src/remote/activitypub/models/note.ts b/packages/backend/src/remote/activitypub/models/note.ts
index 6847925a51..8ef480ed7a 100644
--- a/packages/backend/src/remote/activitypub/models/note.ts
+++ b/packages/backend/src/remote/activitypub/models/note.ts
@@ -1,32 +1,32 @@
 import * as promiseLimit from 'promise-limit';
 
-import config from '@/config/index';
-import Resolver from '../resolver';
-import post from '@/services/note/create';
-import { resolvePerson, updatePerson } from './person';
-import { resolveImage } from './image';
-import { IRemoteUser } from '@/models/entities/user';
-import { htmlToMfm } from '../misc/html-to-mfm';
-import { extractApHashtags } from './tag';
-import { unique, toArray, toSingle } from '@/prelude/array';
-import { extractPollFromQuestion } from './question';
-import vote from '@/services/note/polls/vote';
-import { apLogger } from '../logger';
-import { DriveFile } from '@/models/entities/drive-file';
-import { deliverQuestionUpdate } from '@/services/note/polls/update';
-import { extractDbHost, toPuny } from '@/misc/convert-host';
-import { Emojis, Polls, MessagingMessages } from '@/models/index';
-import { Note } from '@/models/entities/note';
-import { IObject, getOneApId, getApId, getOneApHrefNullable, validPost, IPost, isEmoji, getApType } from '../type';
-import { Emoji } from '@/models/entities/emoji';
-import { genId } from '@/misc/gen-id';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { getApLock } from '@/misc/app-lock';
-import { createMessage } from '@/services/messages/create';
-import { parseAudience } from '../audience';
-import { extractApMentions } from './mention';
-import DbResolver from '../db-resolver';
-import { StatusError } from '@/misc/fetch';
+import config from '@/config/index.js';
+import Resolver from '../resolver.js';
+import post from '@/services/note/create.js';
+import { resolvePerson, updatePerson } from './person.js';
+import { resolveImage } from './image.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { htmlToMfm } from '../misc/html-to-mfm.js';
+import { extractApHashtags } from './tag.js';
+import { unique, toArray, toSingle } from '@/prelude/array.js';
+import { extractPollFromQuestion } from './question.js';
+import vote from '@/services/note/polls/vote.js';
+import { apLogger } from '../logger.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { deliverQuestionUpdate } from '@/services/note/polls/update.js';
+import { extractDbHost, toPuny } from '@/misc/convert-host.js';
+import { Emojis, Polls, MessagingMessages } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
+import { IObject, getOneApId, getApId, getOneApHrefNullable, validPost, IPost, isEmoji, getApType } from '../type.js';
+import { Emoji } from '@/models/entities/emoji.js';
+import { genId } from '@/misc/gen-id.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { getApLock } from '@/misc/app-lock.js';
+import { createMessage } from '@/services/messages/create.js';
+import { parseAudience } from '../audience.js';
+import { extractApMentions } from './mention.js';
+import DbResolver from '../db-resolver.js';
+import { StatusError } from '@/misc/fetch.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/models/person.ts b/packages/backend/src/remote/activitypub/models/person.ts
index 12660a5441..1c03bddccc 100644
--- a/packages/backend/src/remote/activitypub/models/person.ts
+++ b/packages/backend/src/remote/activitypub/models/person.ts
@@ -1,35 +1,35 @@
-import { URL } from 'url';
+import { URL } from 'node:url';
 import * as promiseLimit from 'promise-limit';
 
 import $, { Context } from 'cafy';
-import config from '@/config/index';
-import Resolver from '../resolver';
-import { resolveImage } from './image';
-import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, IApPropertyValue, getApType, isActor } from '../type';
-import { fromHtml } from '../../../mfm/from-html';
-import { htmlToMfm } from '../misc/html-to-mfm';
-import { resolveNote, extractEmojis } from './note';
-import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc';
-import { extractApHashtags } from './tag';
-import { apLogger } from '../logger';
-import { Note } from '@/models/entities/note';
-import { updateUsertags } from '@/services/update-hashtag';
-import { Users, Instances, DriveFiles, Followings, UserProfiles, UserPublickeys } from '@/models/index';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { Emoji } from '@/models/entities/emoji';
-import { UserNotePining } from '@/models/entities/user-note-pining';
-import { genId } from '@/misc/gen-id';
-import { instanceChart, usersChart } from '@/services/chart/index';
-import { UserPublickey } from '@/models/entities/user-publickey';
-import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
-import { toPuny } from '@/misc/convert-host';
-import { UserProfile } from '@/models/entities/user-profile';
+import config from '@/config/index.js';
+import Resolver from '../resolver.js';
+import { resolveImage } from './image.js';
+import { isCollectionOrOrderedCollection, isCollection, IActor, getApId, getOneApHrefNullable, IObject, isPropertyValue, IApPropertyValue, getApType, isActor } from '../type.js';
+import { fromHtml } from '../../../mfm/from-html.js';
+import { htmlToMfm } from '../misc/html-to-mfm.js';
+import { resolveNote, extractEmojis } from './note.js';
+import { registerOrFetchInstanceDoc } from '@/services/register-or-fetch-instance-doc.js';
+import { extractApHashtags } from './tag.js';
+import { apLogger } from '../logger.js';
+import { Note } from '@/models/entities/note.js';
+import { updateUsertags } from '@/services/update-hashtag.js';
+import { Users, Instances, DriveFiles, Followings, UserProfiles, UserPublickeys } from '@/models/index.js';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { Emoji } from '@/models/entities/emoji.js';
+import { UserNotePining } from '@/models/entities/user-note-pining.js';
+import { genId } from '@/misc/gen-id.js';
+import { instanceChart, usersChart } from '@/services/chart/index.js';
+import { UserPublickey } from '@/models/entities/user-publickey.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
 import { getConnection } from 'typeorm';
-import { toArray } from '@/prelude/array';
-import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
-import { truncate } from '@/misc/truncate';
-import { StatusError } from '@/misc/fetch';
+import { toArray } from '@/prelude/array.js';
+import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
+import { truncate } from '@/misc/truncate.js';
+import { StatusError } from '@/misc/fetch.js';
 
 const logger = apLogger;
 
diff --git a/packages/backend/src/remote/activitypub/models/question.ts b/packages/backend/src/remote/activitypub/models/question.ts
index 3e48e598e6..0a77465e31 100644
--- a/packages/backend/src/remote/activitypub/models/question.ts
+++ b/packages/backend/src/remote/activitypub/models/question.ts
@@ -1,9 +1,9 @@
-import config from '@/config/index';
-import Resolver from '../resolver';
-import { IObject, IQuestion, isQuestion  } from '../type';
-import { apLogger } from '../logger';
-import { Notes, Polls } from '@/models/index';
-import { IPoll } from '@/models/entities/poll';
+import config from '@/config/index.js';
+import Resolver from '../resolver.js';
+import { IObject, IQuestion, isQuestion  } from '../type.js';
+import { apLogger } from '../logger.js';
+import { Notes, Polls } from '@/models/index.js';
+import { IPoll } from '@/models/entities/poll.js';
 
 export async function extractPollFromQuestion(source: string | IObject, resolver?: Resolver): Promise<IPoll> {
 	if (resolver == null) resolver = new Resolver();
diff --git a/packages/backend/src/remote/activitypub/models/tag.ts b/packages/backend/src/remote/activitypub/models/tag.ts
index fbc6b9b428..964dabad04 100644
--- a/packages/backend/src/remote/activitypub/models/tag.ts
+++ b/packages/backend/src/remote/activitypub/models/tag.ts
@@ -1,5 +1,5 @@
-import { toArray } from '@/prelude/array';
-import { IObject, isHashtag, IApHashtag } from '../type';
+import { toArray } from '@/prelude/array.js';
+import { IObject, isHashtag, IApHashtag } from '../type.js';
 
 export function extractApHashtags(tags: IObject | IObject[] | null | undefined) {
 	if (tags == null) return [];
diff --git a/packages/backend/src/remote/activitypub/perform.ts b/packages/backend/src/remote/activitypub/perform.ts
index 01f0e3676e..3e18815586 100644
--- a/packages/backend/src/remote/activitypub/perform.ts
+++ b/packages/backend/src/remote/activitypub/perform.ts
@@ -1,6 +1,6 @@
-import { IObject } from './type';
-import { IRemoteUser } from '@/models/entities/user';
-import { performActivity } from './kernel/index';
+import { IObject } from './type.js';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { performActivity } from './kernel/index.js';
 
 export default async (actor: IRemoteUser, activity: IObject): Promise<void> => {
 	await performActivity(actor, activity);
diff --git a/packages/backend/src/remote/activitypub/renderer/accept.ts b/packages/backend/src/remote/activitypub/renderer/accept.ts
index 3bce2165cd..cb01f6a91b 100644
--- a/packages/backend/src/remote/activitypub/renderer/accept.ts
+++ b/packages/backend/src/remote/activitypub/renderer/accept.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
 
 export default (object: any, user: { id: User['id']; host: null }) => ({
 	type: 'Accept',
diff --git a/packages/backend/src/remote/activitypub/renderer/add.ts b/packages/backend/src/remote/activitypub/renderer/add.ts
index 960daf8424..ec47884291 100644
--- a/packages/backend/src/remote/activitypub/renderer/add.ts
+++ b/packages/backend/src/remote/activitypub/renderer/add.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { ILocalUser } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
 
 export default (user: ILocalUser, target: any, object: any) => ({
 	type: 'Add',
diff --git a/packages/backend/src/remote/activitypub/renderer/announce.ts b/packages/backend/src/remote/activitypub/renderer/announce.ts
index ab113b48e6..2709fea51d 100644
--- a/packages/backend/src/remote/activitypub/renderer/announce.ts
+++ b/packages/backend/src/remote/activitypub/renderer/announce.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { Note } from '@/models/entities/note';
+import config from '@/config/index.js';
+import { Note } from '@/models/entities/note.js';
 
 export default (object: any, note: Note) => {
 	const attributedTo = `${config.url}/users/${note.userId}`;
diff --git a/packages/backend/src/remote/activitypub/renderer/block.ts b/packages/backend/src/remote/activitypub/renderer/block.ts
index bfb831daa8..10a4fde517 100644
--- a/packages/backend/src/remote/activitypub/renderer/block.ts
+++ b/packages/backend/src/remote/activitypub/renderer/block.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { ILocalUser, IRemoteUser } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { ILocalUser, IRemoteUser } from '@/models/entities/user.js';
 
 export default (blocker: ILocalUser, blockee: IRemoteUser) => ({
 	type: 'Block',
diff --git a/packages/backend/src/remote/activitypub/renderer/create.ts b/packages/backend/src/remote/activitypub/renderer/create.ts
index ac9e69af20..281a3cb2af 100644
--- a/packages/backend/src/remote/activitypub/renderer/create.ts
+++ b/packages/backend/src/remote/activitypub/renderer/create.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { Note } from '@/models/entities/note';
+import config from '@/config/index.js';
+import { Note } from '@/models/entities/note.js';
 
 export default (object: any, note: Note) => {
 	const activity = {
diff --git a/packages/backend/src/remote/activitypub/renderer/delete.ts b/packages/backend/src/remote/activitypub/renderer/delete.ts
index 176a6f7e27..4edd3a8807 100644
--- a/packages/backend/src/remote/activitypub/renderer/delete.ts
+++ b/packages/backend/src/remote/activitypub/renderer/delete.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
 
 export default (object: any, user: { id: User['id']; host: null }) => ({
 	type: 'Delete',
diff --git a/packages/backend/src/remote/activitypub/renderer/document.ts b/packages/backend/src/remote/activitypub/renderer/document.ts
index a9d86dea15..c973de4c4c 100644
--- a/packages/backend/src/remote/activitypub/renderer/document.ts
+++ b/packages/backend/src/remote/activitypub/renderer/document.ts
@@ -1,5 +1,5 @@
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles } from '@/models/index';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export default (file: DriveFile) => ({
 	type: 'Document',
diff --git a/packages/backend/src/remote/activitypub/renderer/emoji.ts b/packages/backend/src/remote/activitypub/renderer/emoji.ts
index e7ae7d959a..0bf15eefd9 100644
--- a/packages/backend/src/remote/activitypub/renderer/emoji.ts
+++ b/packages/backend/src/remote/activitypub/renderer/emoji.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { Emoji } from '@/models/entities/emoji';
+import config from '@/config/index.js';
+import { Emoji } from '@/models/entities/emoji.js';
 
 export default (emoji: Emoji) => ({
 	id: `${config.url}/emojis/${emoji.name}`,
diff --git a/packages/backend/src/remote/activitypub/renderer/flag.ts b/packages/backend/src/remote/activitypub/renderer/flag.ts
index 60ac496509..6fbc11580f 100644
--- a/packages/backend/src/remote/activitypub/renderer/flag.ts
+++ b/packages/backend/src/remote/activitypub/renderer/flag.ts
@@ -1,7 +1,7 @@
-import config from '@/config/index';
-import { IObject, IActivity } from '@/remote/activitypub/type';
-import { ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { getInstanceActor } from '@/services/instance-actor';
+import config from '@/config/index.js';
+import { IObject, IActivity } from '@/remote/activitypub/type.js';
+import { ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { getInstanceActor } from '@/services/instance-actor.js';
 
 // to anonymise reporters, the reporting actor must be a system user
 // object has to be a uri or array of uris
diff --git a/packages/backend/src/remote/activitypub/renderer/follow-relay.ts b/packages/backend/src/remote/activitypub/renderer/follow-relay.ts
index 38800267bf..2c9678090f 100644
--- a/packages/backend/src/remote/activitypub/renderer/follow-relay.ts
+++ b/packages/backend/src/remote/activitypub/renderer/follow-relay.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { Relay } from '@/models/entities/relay';
-import { ILocalUser } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { Relay } from '@/models/entities/relay.js';
+import { ILocalUser } from '@/models/entities/user.js';
 
 export function renderFollowRelay(relay: Relay, relayActor: ILocalUser) {
 	const follow = {
diff --git a/packages/backend/src/remote/activitypub/renderer/follow-user.ts b/packages/backend/src/remote/activitypub/renderer/follow-user.ts
index e3dde7f7fe..ad1d63b933 100644
--- a/packages/backend/src/remote/activitypub/renderer/follow-user.ts
+++ b/packages/backend/src/remote/activitypub/renderer/follow-user.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { Users } from '@/models/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { Users } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
 
 /**
  * Convert (local|remote)(Follower|Followee)ID to URL
diff --git a/packages/backend/src/remote/activitypub/renderer/follow.ts b/packages/backend/src/remote/activitypub/renderer/follow.ts
index 5258df7e97..9e9692b77a 100644
--- a/packages/backend/src/remote/activitypub/renderer/follow.ts
+++ b/packages/backend/src/remote/activitypub/renderer/follow.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { Users } from '@/models/index';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
 
 export default (follower: { id: User['id']; host: User['host']; uri: User['host'] }, followee: { id: User['id']; host: User['host']; uri: User['host'] }, requestId?: string) => {
 	const follow = {
diff --git a/packages/backend/src/remote/activitypub/renderer/hashtag.ts b/packages/backend/src/remote/activitypub/renderer/hashtag.ts
index d83a8e68b1..a7b441e006 100644
--- a/packages/backend/src/remote/activitypub/renderer/hashtag.ts
+++ b/packages/backend/src/remote/activitypub/renderer/hashtag.ts
@@ -1,4 +1,4 @@
-import config from '@/config/index';
+import config from '@/config/index.js';
 
 export default (tag: string) => ({
 	type: 'Hashtag',
diff --git a/packages/backend/src/remote/activitypub/renderer/image.ts b/packages/backend/src/remote/activitypub/renderer/image.ts
index ee3860be8c..c7d5a31a27 100644
--- a/packages/backend/src/remote/activitypub/renderer/image.ts
+++ b/packages/backend/src/remote/activitypub/renderer/image.ts
@@ -1,5 +1,5 @@
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles } from '@/models/index';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export default (file: DriveFile) => ({
 	type: 'Image',
diff --git a/packages/backend/src/remote/activitypub/renderer/index.ts b/packages/backend/src/remote/activitypub/renderer/index.ts
index cffc9bfe04..5f69332266 100644
--- a/packages/backend/src/remote/activitypub/renderer/index.ts
+++ b/packages/backend/src/remote/activitypub/renderer/index.ts
@@ -1,9 +1,9 @@
-import config from '@/config/index';
+import config from '@/config/index.js';
 import { v4 as uuid } from 'uuid';
-import { IActivity } from '../type';
-import { LdSignature } from '../misc/ld-signature';
-import { getUserKeypair } from '@/misc/keypair-store';
-import { User } from '@/models/entities/user';
+import { IActivity } from '../type.js';
+import { LdSignature } from '../misc/ld-signature.js';
+import { getUserKeypair } from '@/misc/keypair-store.js';
+import { User } from '@/models/entities/user.js';
 
 export const renderActivity = (x: any): IActivity | null => {
 	if (x == null) return null;
diff --git a/packages/backend/src/remote/activitypub/renderer/key.ts b/packages/backend/src/remote/activitypub/renderer/key.ts
index 51bc888dd7..c4f3d464f8 100644
--- a/packages/backend/src/remote/activitypub/renderer/key.ts
+++ b/packages/backend/src/remote/activitypub/renderer/key.ts
@@ -1,7 +1,7 @@
-import config from '@/config/index';
-import { ILocalUser } from '@/models/entities/user';
-import { UserKeypair } from '@/models/entities/user-keypair';
-import { createPublicKey } from 'crypto';
+import config from '@/config/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { UserKeypair } from '@/models/entities/user-keypair.js';
+import { createPublicKey } from 'node:crypto';
 
 export default (user: ILocalUser, key: UserKeypair, postfix?: string) => ({
 	id: `${config.url}/users/${user.id}${postfix || '/publickey'}`,
diff --git a/packages/backend/src/remote/activitypub/renderer/like.ts b/packages/backend/src/remote/activitypub/renderer/like.ts
index 2e4da9d26f..1bf36d4708 100644
--- a/packages/backend/src/remote/activitypub/renderer/like.ts
+++ b/packages/backend/src/remote/activitypub/renderer/like.ts
@@ -1,8 +1,8 @@
-import config from '@/config/index';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { Note } from '@/models/entities/note';
-import { Emojis } from '@/models/index';
-import renderEmoji from './emoji';
+import config from '@/config/index.js';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { Note } from '@/models/entities/note.js';
+import { Emojis } from '@/models/index.js';
+import renderEmoji from './emoji.js';
 
 export const renderLike = async (noteReaction: NoteReaction, note: Note) => {
 	const reaction = noteReaction.reaction;
diff --git a/packages/backend/src/remote/activitypub/renderer/mention.ts b/packages/backend/src/remote/activitypub/renderer/mention.ts
index 06d2d33e59..c7e62e8840 100644
--- a/packages/backend/src/remote/activitypub/renderer/mention.ts
+++ b/packages/backend/src/remote/activitypub/renderer/mention.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { User, ILocalUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
+import config from '@/config/index.js';
+import { User, ILocalUser } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
 
 export default (mention: User) => ({
 	type: 'Mention',
diff --git a/packages/backend/src/remote/activitypub/renderer/note.ts b/packages/backend/src/remote/activitypub/renderer/note.ts
index 654ab68123..c3d9e120d6 100644
--- a/packages/backend/src/remote/activitypub/renderer/note.ts
+++ b/packages/backend/src/remote/activitypub/renderer/note.ts
@@ -1,15 +1,15 @@
-import renderDocument from './document';
-import renderHashtag from './hashtag';
-import renderMention from './mention';
-import renderEmoji from './emoji';
-import config from '@/config/index';
-import toHtml from '../misc/get-note-html';
-import { Note, IMentionedRemoteUsers } from '@/models/entities/note';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles, Notes, Users, Emojis, Polls } from '@/models/index';
+import renderDocument from './document.js';
+import renderHashtag from './hashtag.js';
+import renderMention from './mention.js';
+import renderEmoji from './emoji.js';
+import config from '@/config/index.js';
+import toHtml from '../misc/get-note-html.js';
+import { Note, IMentionedRemoteUsers } from '@/models/entities/note.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles, Notes, Users, Emojis, Polls } from '@/models/index.js';
 import { In } from 'typeorm';
-import { Emoji } from '@/models/entities/emoji';
-import { Poll } from '@/models/entities/poll';
+import { Emoji } from '@/models/entities/emoji.js';
+import { Poll } from '@/models/entities/poll.js';
 
 export default async function renderNote(note: Note, dive = true, isTalk = false): Promise<Record<string, unknown>> {
 	const getPromisedFiles = async (ids: string[]) => {
diff --git a/packages/backend/src/remote/activitypub/renderer/person.ts b/packages/backend/src/remote/activitypub/renderer/person.ts
index d1c4c0040b..3d86e37cca 100644
--- a/packages/backend/src/remote/activitypub/renderer/person.ts
+++ b/packages/backend/src/remote/activitypub/renderer/person.ts
@@ -1,16 +1,16 @@
-import { URL } from 'url';
+import { URL } from 'node:url';
 import * as mfm from 'mfm-js';
-import renderImage from './image';
-import renderKey from './key';
-import config from '@/config/index';
-import { ILocalUser } from '@/models/entities/user';
-import { toHtml } from '../../../mfm/to-html';
-import { getEmojis } from './note';
-import renderEmoji from './emoji';
-import { IIdentifier } from '../models/identifier';
-import renderHashtag from './hashtag';
-import { DriveFiles, UserProfiles } from '@/models/index';
-import { getUserKeypair } from '@/misc/keypair-store';
+import renderImage from './image.js';
+import renderKey from './key.js';
+import config from '@/config/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { toHtml } from '../../../mfm/to-html.js';
+import { getEmojis } from './note.js';
+import renderEmoji from './emoji.js';
+import { IIdentifier } from '../models/identifier.js';
+import renderHashtag from './hashtag.js';
+import { DriveFiles, UserProfiles } from '@/models/index.js';
+import { getUserKeypair } from '@/misc/keypair-store.js';
 
 export async function renderPerson(user: ILocalUser) {
 	const id = `${config.url}/users/${user.id}`;
diff --git a/packages/backend/src/remote/activitypub/renderer/question.ts b/packages/backend/src/remote/activitypub/renderer/question.ts
index 3cbff33abc..d4d1b590af 100644
--- a/packages/backend/src/remote/activitypub/renderer/question.ts
+++ b/packages/backend/src/remote/activitypub/renderer/question.ts
@@ -1,7 +1,7 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { Poll } from '@/models/entities/poll';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { Poll } from '@/models/entities/poll.js';
 
 export default async function renderQuestion(user: { id: User['id'] }, note: Note, poll: Poll) {
 	const question = {
diff --git a/packages/backend/src/remote/activitypub/renderer/read.ts b/packages/backend/src/remote/activitypub/renderer/read.ts
index 2fe3b8e5e0..a30e649f64 100644
--- a/packages/backend/src/remote/activitypub/renderer/read.ts
+++ b/packages/backend/src/remote/activitypub/renderer/read.ts
@@ -1,6 +1,6 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { MessagingMessage } from '@/models/entities/messaging-message';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
 
 export const renderReadActivity = (user: { id: User['id'] }, message: MessagingMessage) => ({
 	type: 'Read',
diff --git a/packages/backend/src/remote/activitypub/renderer/reject.ts b/packages/backend/src/remote/activitypub/renderer/reject.ts
index 575ef52ab8..ab4cc1646a 100644
--- a/packages/backend/src/remote/activitypub/renderer/reject.ts
+++ b/packages/backend/src/remote/activitypub/renderer/reject.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
 
 export default (object: any, user: { id: User['id'] }) => ({
 	type: 'Reject',
diff --git a/packages/backend/src/remote/activitypub/renderer/remove.ts b/packages/backend/src/remote/activitypub/renderer/remove.ts
index 8afaf199cc..1be3edc5d5 100644
--- a/packages/backend/src/remote/activitypub/renderer/remove.ts
+++ b/packages/backend/src/remote/activitypub/renderer/remove.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
 
 export default (user: { id: User['id'] }, target: any, object: any) => ({
 	type: 'Remove',
diff --git a/packages/backend/src/remote/activitypub/renderer/undo.ts b/packages/backend/src/remote/activitypub/renderer/undo.ts
index 14115b788d..d28778e22e 100644
--- a/packages/backend/src/remote/activitypub/renderer/undo.ts
+++ b/packages/backend/src/remote/activitypub/renderer/undo.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { ILocalUser, User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { ILocalUser, User } from '@/models/entities/user.js';
 
 export default (object: any, user: { id: User['id'] }) => {
 	if (object == null) return null;
diff --git a/packages/backend/src/remote/activitypub/renderer/update.ts b/packages/backend/src/remote/activitypub/renderer/update.ts
index 8bb415d117..cf880f03fc 100644
--- a/packages/backend/src/remote/activitypub/renderer/update.ts
+++ b/packages/backend/src/remote/activitypub/renderer/update.ts
@@ -1,5 +1,5 @@
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
 
 export default (object: any, user: { id: User['id'] }) => {
 	const activity = {
diff --git a/packages/backend/src/remote/activitypub/renderer/vote.ts b/packages/backend/src/remote/activitypub/renderer/vote.ts
index fd7bc9dbed..b6eb8e095d 100644
--- a/packages/backend/src/remote/activitypub/renderer/vote.ts
+++ b/packages/backend/src/remote/activitypub/renderer/vote.ts
@@ -1,8 +1,8 @@
-import config from '@/config/index';
-import { Note } from '@/models/entities/note';
-import { IRemoteUser, User } from '@/models/entities/user';
-import { PollVote } from '@/models/entities/poll-vote';
-import { Poll } from '@/models/entities/poll';
+import config from '@/config/index.js';
+import { Note } from '@/models/entities/note.js';
+import { IRemoteUser, User } from '@/models/entities/user.js';
+import { PollVote } from '@/models/entities/poll-vote.js';
+import { Poll } from '@/models/entities/poll.js';
 
 export default async function renderVote(user: { id: User['id'] }, vote: PollVote, note: Note, poll: Poll, pollOwner: IRemoteUser): Promise<any> {
 	return {
diff --git a/packages/backend/src/remote/activitypub/request.ts b/packages/backend/src/remote/activitypub/request.ts
index 715937e2a7..5cbfd8c259 100644
--- a/packages/backend/src/remote/activitypub/request.ts
+++ b/packages/backend/src/remote/activitypub/request.ts
@@ -1,8 +1,8 @@
-import config from '@/config/index';
-import { getUserKeypair } from '@/misc/keypair-store';
-import { User } from '@/models/entities/user';
-import { getResponse } from '../../misc/fetch';
-import { createSignedPost, createSignedGet } from './ap-request';
+import config from '@/config/index.js';
+import { getUserKeypair } from '@/misc/keypair-store.js';
+import { User } from '@/models/entities/user.js';
+import { getResponse } from '../../misc/fetch.js';
+import { createSignedPost, createSignedGet } from './ap-request.js';
 
 export default async (user: { id: User['id'] }, url: string, object: any) => {
 	const body = JSON.stringify(object);
diff --git a/packages/backend/src/remote/activitypub/resolver.ts b/packages/backend/src/remote/activitypub/resolver.ts
index f392a65e3a..c1269c75c5 100644
--- a/packages/backend/src/remote/activitypub/resolver.ts
+++ b/packages/backend/src/remote/activitypub/resolver.ts
@@ -1,11 +1,11 @@
-import config from '@/config/index';
-import { getJson } from '@/misc/fetch';
-import { ILocalUser } from '@/models/entities/user';
-import { getInstanceActor } from '@/services/instance-actor';
-import { signedGet } from './request';
-import { IObject, isCollectionOrOrderedCollection, ICollection, IOrderedCollection } from './type';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { extractDbHost } from '@/misc/convert-host';
+import config from '@/config/index.js';
+import { getJson } from '@/misc/fetch.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { getInstanceActor } from '@/services/instance-actor.js';
+import { signedGet } from './request.js';
+import { IObject, isCollectionOrOrderedCollection, ICollection, IOrderedCollection } from './type.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { extractDbHost } from '@/misc/convert-host.js';
 
 export default class Resolver {
 	private history: Set<string>;
diff --git a/packages/backend/src/remote/logger.ts b/packages/backend/src/remote/logger.ts
index 9ffad4d716..4921f53bd8 100644
--- a/packages/backend/src/remote/logger.ts
+++ b/packages/backend/src/remote/logger.ts
@@ -1,3 +1,3 @@
-import Logger from '@/services/logger';
+import Logger from '@/services/logger.js';
 
 export const remoteLogger = new Logger('remote', 'cyan');
diff --git a/packages/backend/src/remote/resolve-user.ts b/packages/backend/src/remote/resolve-user.ts
index 747735ecaa..8cbf02e68d 100644
--- a/packages/backend/src/remote/resolve-user.ts
+++ b/packages/backend/src/remote/resolve-user.ts
@@ -1,12 +1,12 @@
-import { URL } from 'url';
-import webFinger from './webfinger';
-import config from '@/config/index';
-import { createPerson, updatePerson } from './activitypub/models/person';
-import { remoteLogger } from './logger';
-import * as chalk from 'chalk';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
+import { URL } from 'node:url';
+import webFinger from './webfinger.js';
+import config from '@/config/index.js';
+import { createPerson, updatePerson } from './activitypub/models/person.js';
+import { remoteLogger } from './logger.js';
+import chalk from 'chalk';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
+import { toPuny } from '@/misc/convert-host.js';
 
 const logger = remoteLogger.createSubLogger('resolve-user');
 
diff --git a/packages/backend/src/remote/webfinger.ts b/packages/backend/src/remote/webfinger.ts
index f63fd03628..9d3bfab24b 100644
--- a/packages/backend/src/remote/webfinger.ts
+++ b/packages/backend/src/remote/webfinger.ts
@@ -1,6 +1,6 @@
-import { URL } from 'url';
-import { getJson } from '@/misc/fetch';
-import { query as urlQuery } from '@/prelude/url';
+import { URL } from 'node:url';
+import { getJson } from '@/misc/fetch.js';
+import { query as urlQuery } from '@/prelude/url.js';
 
 type ILink = {
 	href: string;
diff --git a/packages/backend/src/server/activitypub.ts b/packages/backend/src/server/activitypub.ts
index bbbc231b8c..45eec3d26c 100644
--- a/packages/backend/src/server/activitypub.ts
+++ b/packages/backend/src/server/activitypub.ts
@@ -1,23 +1,23 @@
-import * as Router from '@koa/router';
-import * as json from 'koa-json-body';
+import Router from '@koa/router';
+import json from 'koa-json-body';
 import * as httpSignature from 'http-signature';
 
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderNote from '@/remote/activitypub/renderer/note';
-import renderKey from '@/remote/activitypub/renderer/key';
-import { renderPerson } from '@/remote/activitypub/renderer/person';
-import renderEmoji from '@/remote/activitypub/renderer/emoji';
-import Outbox, { packActivity } from './activitypub/outbox';
-import Followers from './activitypub/followers';
-import Following from './activitypub/following';
-import Featured from './activitypub/featured';
-import { inbox as processInbox } from '@/queue/index';
-import { isSelfHost } from '@/misc/convert-host';
-import { Notes, Users, Emojis, NoteReactions } from '@/models/index';
-import { ILocalUser, User } from '@/models/entities/user';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import renderKey from '@/remote/activitypub/renderer/key.js';
+import { renderPerson } from '@/remote/activitypub/renderer/person.js';
+import renderEmoji from '@/remote/activitypub/renderer/emoji.js';
+import Outbox, { packActivity } from './activitypub/outbox.js';
+import Followers from './activitypub/followers.js';
+import Following from './activitypub/following.js';
+import Featured from './activitypub/featured.js';
+import { inbox as processInbox } from '@/queue/index.js';
+import { isSelfHost } from '@/misc/convert-host.js';
+import { Notes, Users, Emojis, NoteReactions } from '@/models/index.js';
+import { ILocalUser, User } from '@/models/entities/user.js';
 import { In } from 'typeorm';
-import { renderLike } from '@/remote/activitypub/renderer/like';
-import { getUserKeypair } from '@/misc/keypair-store';
+import { renderLike } from '@/remote/activitypub/renderer/like.js';
+import { getUserKeypair } from '@/misc/keypair-store.js';
 
 // Init router
 const router = new Router();
diff --git a/packages/backend/src/server/activitypub/featured.ts b/packages/backend/src/server/activitypub/featured.ts
index ed5bfc4267..129881a718 100644
--- a/packages/backend/src/server/activitypub/featured.ts
+++ b/packages/backend/src/server/activitypub/featured.ts
@@ -1,10 +1,10 @@
-import * as Router from '@koa/router';
-import config from '@/config/index';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection';
-import { setResponseType } from '../activitypub';
-import renderNote from '@/remote/activitypub/renderer/note';
-import { Users, Notes, UserNotePinings } from '@/models/index';
+import Router from '@koa/router';
+import config from '@/config/index.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection.js';
+import { setResponseType } from '../activitypub.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import { Users, Notes, UserNotePinings } from '@/models/index.js';
 
 export default async (ctx: Router.RouterContext) => {
 	const userId = ctx.params.user;
diff --git a/packages/backend/src/server/activitypub/followers.ts b/packages/backend/src/server/activitypub/followers.ts
index 927fb5d18a..644ecaf8c8 100644
--- a/packages/backend/src/server/activitypub/followers.ts
+++ b/packages/backend/src/server/activitypub/followers.ts
@@ -1,14 +1,14 @@
-import * as Router from '@koa/router';
-import config from '@/config/index';
+import Router from '@koa/router';
+import config from '@/config/index.js';
 import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import * as url from '@/prelude/url';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection';
-import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page';
-import renderFollowUser from '@/remote/activitypub/renderer/follow-user';
-import { setResponseType } from '../activitypub';
-import { Users, Followings, UserProfiles } from '@/models/index';
+import { ID } from '@/misc/cafy-id.js';
+import * as url from '@/prelude/url.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection.js';
+import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page.js';
+import renderFollowUser from '@/remote/activitypub/renderer/follow-user.js';
+import { setResponseType } from '../activitypub.js';
+import { Users, Followings, UserProfiles } from '@/models/index.js';
 import { LessThan } from 'typeorm';
 
 export default async (ctx: Router.RouterContext) => {
diff --git a/packages/backend/src/server/activitypub/following.ts b/packages/backend/src/server/activitypub/following.ts
index a3237582ad..b1f3f9ac7f 100644
--- a/packages/backend/src/server/activitypub/following.ts
+++ b/packages/backend/src/server/activitypub/following.ts
@@ -1,16 +1,16 @@
-import * as Router from '@koa/router';
-import config from '@/config/index';
+import Router from '@koa/router';
+import config from '@/config/index.js';
 import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import * as url from '@/prelude/url';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection';
-import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page';
-import renderFollowUser from '@/remote/activitypub/renderer/follow-user';
-import { setResponseType } from '../activitypub';
-import { Users, Followings, UserProfiles } from '@/models/index';
+import { ID } from '@/misc/cafy-id.js';
+import * as url from '@/prelude/url.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection.js';
+import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page.js';
+import renderFollowUser from '@/remote/activitypub/renderer/follow-user.js';
+import { setResponseType } from '../activitypub.js';
+import { Users, Followings, UserProfiles } from '@/models/index.js';
 import { LessThan, FindConditions } from 'typeorm';
-import { Following } from '@/models/entities/following';
+import { Following } from '@/models/entities/following.js';
 
 export default async (ctx: Router.RouterContext) => {
 	const userId = ctx.params.user;
diff --git a/packages/backend/src/server/activitypub/outbox.ts b/packages/backend/src/server/activitypub/outbox.ts
index ba6b46a0cc..525ac81b97 100644
--- a/packages/backend/src/server/activitypub/outbox.ts
+++ b/packages/backend/src/server/activitypub/outbox.ts
@@ -1,20 +1,20 @@
-import * as Router from '@koa/router';
-import config from '@/config/index';
+import Router from '@koa/router';
+import config from '@/config/index.js';
 import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection';
-import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page';
-import { setResponseType } from '../activitypub';
-import renderNote from '@/remote/activitypub/renderer/note';
-import renderCreate from '@/remote/activitypub/renderer/create';
-import renderAnnounce from '@/remote/activitypub/renderer/announce';
-import { countIf } from '@/prelude/array';
-import * as url from '@/prelude/url';
-import { Users, Notes } from '@/models/index';
-import { makePaginationQuery } from '../api/common/make-pagination-query';
+import { ID } from '@/misc/cafy-id.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection.js';
+import renderOrderedCollectionPage from '@/remote/activitypub/renderer/ordered-collection-page.js';
+import { setResponseType } from '../activitypub.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import renderCreate from '@/remote/activitypub/renderer/create.js';
+import renderAnnounce from '@/remote/activitypub/renderer/announce.js';
+import { countIf } from '@/prelude/array.js';
+import * as url from '@/prelude/url.js';
+import { Users, Notes } from '@/models/index.js';
+import { makePaginationQuery } from '../api/common/make-pagination-query.js';
 import { Brackets } from 'typeorm';
-import { Note } from '@/models/entities/note';
+import { Note } from '@/models/entities/note.js';
 
 export default async (ctx: Router.RouterContext) => {
 	const userId = ctx.params.user;
diff --git a/packages/backend/src/server/api/2fa.ts b/packages/backend/src/server/api/2fa.ts
index 2a69e49c83..e1c226979a 100644
--- a/packages/backend/src/server/api/2fa.ts
+++ b/packages/backend/src/server/api/2fa.ts
@@ -1,5 +1,5 @@
-import * as crypto from 'crypto';
-import config from '@/config/index';
+import * as crypto from 'node:crypto';
+import config from '@/config/index.js';
 import * as jsrsasign from 'jsrsasign';
 
 const ECC_PRELUDE = Buffer.from([0x04]);
diff --git a/packages/backend/src/server/api/api-handler.ts b/packages/backend/src/server/api/api-handler.ts
index cd7b9615bc..f97c3dd397 100644
--- a/packages/backend/src/server/api/api-handler.ts
+++ b/packages/backend/src/server/api/api-handler.ts
@@ -1,9 +1,9 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 
-import { IEndpoint } from './endpoints';
-import authenticate, { AuthenticationError } from './authenticate';
-import call from './call';
-import { ApiError } from './error';
+import { IEndpoint } from './endpoints.js';
+import authenticate, { AuthenticationError } from './authenticate.js';
+import call from './call.js';
+import { ApiError } from './error.js';
 
 export default (endpoint: IEndpoint, ctx: Koa.Context) => new Promise<void>((res) => {
 	const body = ctx.request.body;
diff --git a/packages/backend/src/server/api/authenticate.ts b/packages/backend/src/server/api/authenticate.ts
index 9e2f3eb743..7fdf14666e 100644
--- a/packages/backend/src/server/api/authenticate.ts
+++ b/packages/backend/src/server/api/authenticate.ts
@@ -1,7 +1,7 @@
-import isNativeToken from './common/is-native-token';
-import { User } from '@/models/entities/user';
-import { Users, AccessTokens, Apps } from '@/models/index';
-import { AccessToken } from '@/models/entities/access-token';
+import isNativeToken from './common/is-native-token.js';
+import { User } from '@/models/entities/user.js';
+import { Users, AccessTokens, Apps } from '@/models/index.js';
+import { AccessToken } from '@/models/entities/access-token.js';
 
 export class AuthenticationError extends Error {
 	constructor(message: string) {
diff --git a/packages/backend/src/server/api/call.ts b/packages/backend/src/server/api/call.ts
index e767b15417..5c5ef66019 100644
--- a/packages/backend/src/server/api/call.ts
+++ b/packages/backend/src/server/api/call.ts
@@ -1,11 +1,11 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 import { performance } from 'perf_hooks';
-import { limiter } from './limiter';
-import { User } from '@/models/entities/user';
-import endpoints, { IEndpoint } from './endpoints';
-import { ApiError } from './error';
-import { apiLogger } from './logger';
-import { AccessToken } from '@/models/entities/access-token';
+import { limiter } from './limiter.js';
+import { User } from '@/models/entities/user.js';
+import endpoints, { IEndpoint } from './endpoints.js';
+import { ApiError } from './error.js';
+import { apiLogger } from './logger.js';
+import { AccessToken } from '@/models/entities/access-token.js';
 
 const accessDenied = {
 	message: 'Access denied.',
diff --git a/packages/backend/src/server/api/common/generate-block-query.ts b/packages/backend/src/server/api/common/generate-block-query.ts
index 4fd6184738..60db1e731b 100644
--- a/packages/backend/src/server/api/common/generate-block-query.ts
+++ b/packages/backend/src/server/api/common/generate-block-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { Blockings } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { Blockings } from '@/models/index.js';
 import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 // ここでいうBlockedは被Blockedの意
diff --git a/packages/backend/src/server/api/common/generate-channel-query.ts b/packages/backend/src/server/api/common/generate-channel-query.ts
index 80a0acf7f9..333bb73b86 100644
--- a/packages/backend/src/server/api/common/generate-channel-query.ts
+++ b/packages/backend/src/server/api/common/generate-channel-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { ChannelFollowings } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { ChannelFollowings } from '@/models/index.js';
 import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 export function generateChannelQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
diff --git a/packages/backend/src/server/api/common/generate-muted-instance-query.ts b/packages/backend/src/server/api/common/generate-muted-instance-query.ts
index dbc9fc98f1..72a6fec68f 100644
--- a/packages/backend/src/server/api/common/generate-muted-instance-query.ts
+++ b/packages/backend/src/server/api/common/generate-muted-instance-query.ts
@@ -1,6 +1,6 @@
-import { User } from '@/models/entities/user';
-import { id } from '@/models/id';
-import { UserProfiles } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { id } from '@/models/id.js';
+import { UserProfiles } from '@/models/index.js';
 import { SelectQueryBuilder, Brackets } from 'typeorm';
 
 function createMutesQuery(id: string) {
diff --git a/packages/backend/src/server/api/common/generate-muted-note-query.ts b/packages/backend/src/server/api/common/generate-muted-note-query.ts
index 0737842613..f544e334d3 100644
--- a/packages/backend/src/server/api/common/generate-muted-note-query.ts
+++ b/packages/backend/src/server/api/common/generate-muted-note-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { MutedNotes } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { MutedNotes } from '@/models/index.js';
 import { SelectQueryBuilder } from 'typeorm';
 
 export function generateMutedNoteQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
diff --git a/packages/backend/src/server/api/common/generate-muted-note-thread-query.ts b/packages/backend/src/server/api/common/generate-muted-note-thread-query.ts
index 7e2cbd498b..7263ea2e60 100644
--- a/packages/backend/src/server/api/common/generate-muted-note-thread-query.ts
+++ b/packages/backend/src/server/api/common/generate-muted-note-thread-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { NoteThreadMutings } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { NoteThreadMutings } from '@/models/index.js';
 import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 export function generateMutedNoteThreadQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }) {
diff --git a/packages/backend/src/server/api/common/generate-muted-user-query.ts b/packages/backend/src/server/api/common/generate-muted-user-query.ts
index 7e200b87ef..79cb3ff894 100644
--- a/packages/backend/src/server/api/common/generate-muted-user-query.ts
+++ b/packages/backend/src/server/api/common/generate-muted-user-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { Mutings } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { Mutings } from '@/models/index.js';
 import { SelectQueryBuilder, Brackets } from 'typeorm';
 
 export function generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: User['id'] }, exclude?: User) {
diff --git a/packages/backend/src/server/api/common/generate-native-user-token.ts b/packages/backend/src/server/api/common/generate-native-user-token.ts
index 1f791c57ce..5d8a4c5378 100644
--- a/packages/backend/src/server/api/common/generate-native-user-token.ts
+++ b/packages/backend/src/server/api/common/generate-native-user-token.ts
@@ -1,3 +1,3 @@
-import { secureRndstr } from '@/misc/secure-rndstr';
+import { secureRndstr } from '@/misc/secure-rndstr.js';
 
 export default () => secureRndstr(16, true);
diff --git a/packages/backend/src/server/api/common/generate-replies-query.ts b/packages/backend/src/server/api/common/generate-replies-query.ts
index fac425b761..301782eab9 100644
--- a/packages/backend/src/server/api/common/generate-replies-query.ts
+++ b/packages/backend/src/server/api/common/generate-replies-query.ts
@@ -1,4 +1,4 @@
-import { User } from '@/models/entities/user';
+import { User } from '@/models/entities/user.js';
 import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 export function generateRepliesQuery(q: SelectQueryBuilder<any>, me?: Pick<User, 'id' | 'showTimelineReplies'> | null) {
diff --git a/packages/backend/src/server/api/common/generate-visibility-query.ts b/packages/backend/src/server/api/common/generate-visibility-query.ts
index 813e8b6c09..715982934c 100644
--- a/packages/backend/src/server/api/common/generate-visibility-query.ts
+++ b/packages/backend/src/server/api/common/generate-visibility-query.ts
@@ -1,5 +1,5 @@
-import { User } from '@/models/entities/user';
-import { Followings } from '@/models/index';
+import { User } from '@/models/entities/user.js';
+import { Followings } from '@/models/index.js';
 import { Brackets, SelectQueryBuilder } from 'typeorm';
 
 export function generateVisibilityQuery(q: SelectQueryBuilder<any>, me?: { id: User['id'] } | null) {
diff --git a/packages/backend/src/server/api/common/getters.ts b/packages/backend/src/server/api/common/getters.ts
index 4b2ee8f1da..c5a47876d0 100644
--- a/packages/backend/src/server/api/common/getters.ts
+++ b/packages/backend/src/server/api/common/getters.ts
@@ -1,7 +1,7 @@
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { Notes, Users } from '@/models/index';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { Notes, Users } from '@/models/index.js';
 
 /**
  * Get note for API processing
diff --git a/packages/backend/src/server/api/common/inject-featured.ts b/packages/backend/src/server/api/common/inject-featured.ts
index 1dc13c83ef..b7dd8028b5 100644
--- a/packages/backend/src/server/api/common/inject-featured.ts
+++ b/packages/backend/src/server/api/common/inject-featured.ts
@@ -1,9 +1,9 @@
 import rndstr from 'rndstr';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { Notes, UserProfiles, NoteReactions } from '@/models/index';
-import { generateMutedUserQuery } from './generate-muted-user-query';
-import { generateBlockedUserQuery } from './generate-block-query';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { Notes, UserProfiles, NoteReactions } from '@/models/index.js';
+import { generateMutedUserQuery } from './generate-muted-user-query.js';
+import { generateBlockedUserQuery } from './generate-block-query.js';
 
 // TODO: リアクション、Renote、返信などをしたノートは除外する
 
diff --git a/packages/backend/src/server/api/common/inject-promo.ts b/packages/backend/src/server/api/common/inject-promo.ts
index 06a3841995..b467b7b70b 100644
--- a/packages/backend/src/server/api/common/inject-promo.ts
+++ b/packages/backend/src/server/api/common/inject-promo.ts
@@ -1,7 +1,7 @@
 import rndstr from 'rndstr';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { PromoReads, PromoNotes, Notes, Users } from '@/models/index';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { PromoReads, PromoNotes, Notes, Users } from '@/models/index.js';
 
 export async function injectPromo(timeline: Note[], user?: User | null) {
 	if (timeline.length < 5) return;
diff --git a/packages/backend/src/server/api/common/read-messaging-message.ts b/packages/backend/src/server/api/common/read-messaging-message.ts
index 928333e59c..b0ce54d370 100644
--- a/packages/backend/src/server/api/common/read-messaging-message.ts
+++ b/packages/backend/src/server/api/common/read-messaging-message.ts
@@ -1,17 +1,17 @@
-import { publishMainStream, publishGroupMessagingStream } from '@/services/stream';
-import { publishMessagingStream } from '@/services/stream';
-import { publishMessagingIndexStream } from '@/services/stream';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { MessagingMessages, UserGroupJoinings, Users } from '@/models/index';
+import { publishMainStream, publishGroupMessagingStream } from '@/services/stream.js';
+import { publishMessagingStream } from '@/services/stream.js';
+import { publishMessagingIndexStream } from '@/services/stream.js';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { MessagingMessages, UserGroupJoinings, Users } from '@/models/index.js';
 import { In } from 'typeorm';
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { UserGroup } from '@/models/entities/user-group';
-import { toArray } from '@/prelude/array';
-import { renderReadActivity } from '@/remote/activitypub/renderer/read';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { deliver } from '@/queue/index';
-import orderedCollection from '@/remote/activitypub/renderer/ordered-collection';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { toArray } from '@/prelude/array.js';
+import { renderReadActivity } from '@/remote/activitypub/renderer/read.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { deliver } from '@/queue/index.js';
+import orderedCollection from '@/remote/activitypub/renderer/ordered-collection.js';
 
 /**
  * Mark messages as read
diff --git a/packages/backend/src/server/api/common/read-notification.ts b/packages/backend/src/server/api/common/read-notification.ts
index 049a7feed6..1f575042a0 100644
--- a/packages/backend/src/server/api/common/read-notification.ts
+++ b/packages/backend/src/server/api/common/read-notification.ts
@@ -1,7 +1,7 @@
-import { publishMainStream } from '@/services/stream';
-import { User } from '@/models/entities/user';
-import { Notification } from '@/models/entities/notification';
-import { Notifications, Users } from '@/models/index';
+import { publishMainStream } from '@/services/stream.js';
+import { User } from '@/models/entities/user.js';
+import { Notification } from '@/models/entities/notification.js';
+import { Notifications, Users } from '@/models/index.js';
 import { In } from 'typeorm';
 
 export async function readNotification(
diff --git a/packages/backend/src/server/api/common/signin.ts b/packages/backend/src/server/api/common/signin.ts
index df986fc457..163f132a44 100644
--- a/packages/backend/src/server/api/common/signin.ts
+++ b/packages/backend/src/server/api/common/signin.ts
@@ -1,10 +1,10 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 
-import config from '@/config/index';
-import { ILocalUser } from '@/models/entities/user';
-import { Signins } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { publishMainStream } from '@/services/stream';
+import config from '@/config/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { Signins } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { publishMainStream } from '@/services/stream.js';
 
 export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
 	if (redirect) {
diff --git a/packages/backend/src/server/api/common/signup.ts b/packages/backend/src/server/api/common/signup.ts
index 786c94cf59..7689e8233f 100644
--- a/packages/backend/src/server/api/common/signup.ts
+++ b/packages/backend/src/server/api/common/signup.ts
@@ -1,15 +1,15 @@
-import * as bcrypt from 'bcryptjs';
-import { generateKeyPair } from 'crypto';
-import generateUserToken from './generate-native-user-token';
-import { User } from '@/models/entities/user';
-import { Users, UsedUsernames } from '@/models/index';
-import { UserProfile } from '@/models/entities/user-profile';
+import bcrypt from 'bcryptjs';
+import { generateKeyPair } from 'node:crypto';
+import generateUserToken from './generate-native-user-token.js';
+import { User } from '@/models/entities/user.js';
+import { Users, UsedUsernames } from '@/models/index.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
 import { getConnection } from 'typeorm';
-import { genId } from '@/misc/gen-id';
-import { toPunyNullable } from '@/misc/convert-host';
-import { UserKeypair } from '@/models/entities/user-keypair';
-import { usersChart } from '@/services/chart/index';
-import { UsedUsername } from '@/models/entities/used-username';
+import { genId } from '@/misc/gen-id.js';
+import { toPunyNullable } from '@/misc/convert-host.js';
+import { UserKeypair } from '@/models/entities/user-keypair.js';
+import { usersChart } from '@/services/chart/index.js';
+import { UsedUsername } from '@/models/entities/used-username.js';
 
 export async function signup(opts: {
 	username: User['username'];
diff --git a/packages/backend/src/server/api/define.ts b/packages/backend/src/server/api/define.ts
index 83fc1e8d4f..9094fcffc6 100644
--- a/packages/backend/src/server/api/define.ts
+++ b/packages/backend/src/server/api/define.ts
@@ -1,10 +1,10 @@
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 import Ajv from 'ajv';
-import { ILocalUser } from '@/models/entities/user';
-import { IEndpointMeta } from './endpoints';
-import { ApiError } from './error';
-import { Schema, SchemaType } from '@/misc/schema';
-import { AccessToken } from '@/models/entities/access-token';
+import { ILocalUser } from '@/models/entities/user.js';
+import { IEndpointMeta } from './endpoints.js';
+import { ApiError } from './error.js';
+import { Schema, SchemaType } from '@/misc/schema.js';
+import { AccessToken } from '@/models/entities/access-token.js';
 
 type SimpleUserInfo = {
 	id: ILocalUser['id'];
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index 32dbdeb315..6b4eff0780 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -1,11 +1,612 @@
-import { dirname } from 'path';
-import * as path from 'path';
-import * as glob from 'glob';
-import { Schema } from '@/misc/schema';
+import { Schema } from '@/misc/schema.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
-const _dirname = dirname(_filename);
+import * as ep___admin_abuseUserReports from './endpoints/admin/abuse-user-reports.js';
+import * as ep___admin_accounts_create from './endpoints/admin/accounts/create.js';
+import * as ep___admin_accounts_delete from './endpoints/admin/accounts/delete.js';
+import * as ep___admin_ad_create from './endpoints/admin/ad/create.js';
+import * as ep___admin_ad_delete from './endpoints/admin/ad/delete.js';
+import * as ep___admin_ad_list from './endpoints/admin/ad/list.js';
+import * as ep___admin_ad_update from './endpoints/admin/ad/update.js';
+import * as ep___admin_announcements_create from './endpoints/admin/announcements/create.js';
+import * as ep___admin_announcements_delete from './endpoints/admin/announcements/delete.js';
+import * as ep___admin_announcements_list from './endpoints/admin/announcements/list.js';
+import * as ep___admin_announcements_update from './endpoints/admin/announcements/update.js';
+import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js';
+import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js';
+import * as ep___admin_drive_cleanup from './endpoints/admin/drive/cleanup.js';
+import * as ep___admin_drive_files from './endpoints/admin/drive/files.js';
+import * as ep___admin_drive_showFile from './endpoints/admin/drive/show-file.js';
+import * as ep___admin_emoji_addAliasesBulk from './endpoints/admin/emoji/add-aliases-bulk.js';
+import * as ep___admin_emoji_add from './endpoints/admin/emoji/add.js';
+import * as ep___admin_emoji_copy from './endpoints/admin/emoji/copy.js';
+import * as ep___admin_emoji_deleteBulk from './endpoints/admin/emoji/delete-bulk.js';
+import * as ep___admin_emoji_delete from './endpoints/admin/emoji/delete.js';
+import * as ep___admin_emoji_importZip from './endpoints/admin/emoji/import-zip.js';
+import * as ep___admin_emoji_listRemote from './endpoints/admin/emoji/list-remote.js';
+import * as ep___admin_emoji_list from './endpoints/admin/emoji/list.js';
+import * as ep___admin_emoji_removeAliasesBulk from './endpoints/admin/emoji/remove-aliases-bulk.js';
+import * as ep___admin_emoji_setAliasesBulk from './endpoints/admin/emoji/set-aliases-bulk.js';
+import * as ep___admin_emoji_setCategoryBulk from './endpoints/admin/emoji/set-category-bulk.js';
+import * as ep___admin_emoji_update from './endpoints/admin/emoji/update.js';
+import * as ep___admin_federation_deleteAllFiles from './endpoints/admin/federation/delete-all-files.js';
+import * as ep___admin_federation_refreshRemoteInstanceMetadata from './endpoints/admin/federation/refresh-remote-instance-metadata.js';
+import * as ep___admin_federation_removeAllFollowing from './endpoints/admin/federation/remove-all-following.js';
+import * as ep___admin_federation_updateInstance from './endpoints/admin/federation/update-instance.js';
+import * as ep___admin_getIndexStats from './endpoints/admin/get-index-stats.js';
+import * as ep___admin_getTableStats from './endpoints/admin/get-table-stats.js';
+import * as ep___admin_invite from './endpoints/admin/invite.js';
+import * as ep___admin_moderators_add from './endpoints/admin/moderators/add.js';
+import * as ep___admin_moderators_remove from './endpoints/admin/moderators/remove.js';
+import * as ep___admin_promo_create from './endpoints/admin/promo/create.js';
+import * as ep___admin_queue_clear from './endpoints/admin/queue/clear.js';
+import * as ep___admin_queue_deliverDelayed from './endpoints/admin/queue/deliver-delayed.js';
+import * as ep___admin_queue_inboxDelayed from './endpoints/admin/queue/inbox-delayed.js';
+import * as ep___admin_queue_stats from './endpoints/admin/queue/stats.js';
+import * as ep___admin_relays_add from './endpoints/admin/relays/add.js';
+import * as ep___admin_relays_list from './endpoints/admin/relays/list.js';
+import * as ep___admin_relays_remove from './endpoints/admin/relays/remove.js';
+import * as ep___admin_resetPassword from './endpoints/admin/reset-password.js';
+import * as ep___admin_resolveAbuseUserReport from './endpoints/admin/resolve-abuse-user-report.js';
+import * as ep___admin_sendEmail from './endpoints/admin/send-email.js';
+import * as ep___admin_serverInfo from './endpoints/admin/server-info.js';
+import * as ep___admin_showModerationLogs from './endpoints/admin/show-moderation-logs.js';
+import * as ep___admin_showUser from './endpoints/admin/show-user.js';
+import * as ep___admin_showUsers from './endpoints/admin/show-users.js';
+import * as ep___admin_silenceUser from './endpoints/admin/silence-user.js';
+import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
+import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
+import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
+import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
+import * as ep___admin_vacuum from './endpoints/admin/vacuum.js';
+import * as ep___announcements from './endpoints/announcements.js';
+import * as ep___antennas_create from './endpoints/antennas/create.js';
+import * as ep___antennas_delete from './endpoints/antennas/delete.js';
+import * as ep___antennas_list from './endpoints/antennas/list.js';
+import * as ep___antennas_notes from './endpoints/antennas/notes.js';
+import * as ep___antennas_show from './endpoints/antennas/show.js';
+import * as ep___antennas_update from './endpoints/antennas/update.js';
+import * as ep___ap_get from './endpoints/ap/get.js';
+import * as ep___ap_show from './endpoints/ap/show.js';
+import * as ep___app_create from './endpoints/app/create.js';
+import * as ep___app_show from './endpoints/app/show.js';
+import * as ep___auth_accept from './endpoints/auth/accept.js';
+import * as ep___auth_session_generate from './endpoints/auth/session/generate.js';
+import * as ep___auth_session_show from './endpoints/auth/session/show.js';
+import * as ep___auth_session_userkey from './endpoints/auth/session/userkey.js';
+import * as ep___blocking_create from './endpoints/blocking/create.js';
+import * as ep___blocking_delete from './endpoints/blocking/delete.js';
+import * as ep___blocking_list from './endpoints/blocking/list.js';
+import * as ep___channels_create from './endpoints/channels/create.js';
+import * as ep___channels_featured from './endpoints/channels/featured.js';
+import * as ep___channels_follow from './endpoints/channels/follow.js';
+import * as ep___channels_followed from './endpoints/channels/followed.js';
+import * as ep___channels_owned from './endpoints/channels/owned.js';
+import * as ep___channels_show from './endpoints/channels/show.js';
+import * as ep___channels_timeline from './endpoints/channels/timeline.js';
+import * as ep___channels_unfollow from './endpoints/channels/unfollow.js';
+import * as ep___channels_update from './endpoints/channels/update.js';
+import * as ep___charts_activeUsers from './endpoints/charts/active-users.js';
+import * as ep___charts_apRequest from './endpoints/charts/ap-request.js';
+import * as ep___charts_drive from './endpoints/charts/drive.js';
+import * as ep___charts_federation from './endpoints/charts/federation.js';
+import * as ep___charts_hashtag from './endpoints/charts/hashtag.js';
+import * as ep___charts_instance from './endpoints/charts/instance.js';
+import * as ep___charts_notes from './endpoints/charts/notes.js';
+import * as ep___charts_user_drive from './endpoints/charts/user/drive.js';
+import * as ep___charts_user_following from './endpoints/charts/user/following.js';
+import * as ep___charts_user_notes from './endpoints/charts/user/notes.js';
+import * as ep___charts_user_reactions from './endpoints/charts/user/reactions.js';
+import * as ep___charts_users from './endpoints/charts/users.js';
+import * as ep___clips_addNote from './endpoints/clips/add-note.js';
+import * as ep___clips_create from './endpoints/clips/create.js';
+import * as ep___clips_delete from './endpoints/clips/delete.js';
+import * as ep___clips_list from './endpoints/clips/list.js';
+import * as ep___clips_notes from './endpoints/clips/notes.js';
+import * as ep___clips_show from './endpoints/clips/show.js';
+import * as ep___clips_update from './endpoints/clips/update.js';
+import * as ep___drive from './endpoints/drive.js';
+import * as ep___drive_files from './endpoints/drive/files.js';
+import * as ep___drive_files_attachedNotes from './endpoints/drive/files/attached-notes.js';
+import * as ep___drive_files_checkExistence from './endpoints/drive/files/check-existence.js';
+import * as ep___drive_files_create from './endpoints/drive/files/create.js';
+import * as ep___drive_files_delete from './endpoints/drive/files/delete.js';
+import * as ep___drive_files_findByHash from './endpoints/drive/files/find-by-hash.js';
+import * as ep___drive_files_find from './endpoints/drive/files/find.js';
+import * as ep___drive_files_show from './endpoints/drive/files/show.js';
+import * as ep___drive_files_update from './endpoints/drive/files/update.js';
+import * as ep___drive_files_uploadFromUrl from './endpoints/drive/files/upload-from-url.js';
+import * as ep___drive_folders from './endpoints/drive/folders.js';
+import * as ep___drive_folders_create from './endpoints/drive/folders/create.js';
+import * as ep___drive_folders_delete from './endpoints/drive/folders/delete.js';
+import * as ep___drive_folders_find from './endpoints/drive/folders/find.js';
+import * as ep___drive_folders_show from './endpoints/drive/folders/show.js';
+import * as ep___drive_folders_update from './endpoints/drive/folders/update.js';
+import * as ep___drive_stream from './endpoints/drive/stream.js';
+import * as ep___emailAddress_available from './endpoints/email-address/available.js';
+import * as ep___endpoint from './endpoints/endpoint.js';
+import * as ep___endpoints from './endpoints/endpoints.js';
+import * as ep___exportCustomEmojis from './endpoints/export-custom-emojis.js';
+import * as ep___federation_followers from './endpoints/federation/followers.js';
+import * as ep___federation_following from './endpoints/federation/following.js';
+import * as ep___federation_instances from './endpoints/federation/instances.js';
+import * as ep___federation_showInstance from './endpoints/federation/show-instance.js';
+import * as ep___federation_updateRemoteUser from './endpoints/federation/update-remote-user.js';
+import * as ep___federation_users from './endpoints/federation/users.js';
+import * as ep___following_create from './endpoints/following/create.js';
+import * as ep___following_delete from './endpoints/following/delete.js';
+import * as ep___following_invalidate from './endpoints/following/invalidate.js';
+import * as ep___following_requests_accept from './endpoints/following/requests/accept.js';
+import * as ep___following_requests_cancel from './endpoints/following/requests/cancel.js';
+import * as ep___following_requests_list from './endpoints/following/requests/list.js';
+import * as ep___following_requests_reject from './endpoints/following/requests/reject.js';
+import * as ep___gallery_featured from './endpoints/gallery/featured.js';
+import * as ep___gallery_popular from './endpoints/gallery/popular.js';
+import * as ep___gallery_posts from './endpoints/gallery/posts.js';
+import * as ep___gallery_posts_create from './endpoints/gallery/posts/create.js';
+import * as ep___gallery_posts_delete from './endpoints/gallery/posts/delete.js';
+import * as ep___gallery_posts_like from './endpoints/gallery/posts/like.js';
+import * as ep___gallery_posts_show from './endpoints/gallery/posts/show.js';
+import * as ep___gallery_posts_unlike from './endpoints/gallery/posts/unlike.js';
+import * as ep___gallery_posts_update from './endpoints/gallery/posts/update.js';
+import * as ep___getOnlineUsersCount from './endpoints/get-online-users-count.js';
+import * as ep___hashtags_list from './endpoints/hashtags/list.js';
+import * as ep___hashtags_search from './endpoints/hashtags/search.js';
+import * as ep___hashtags_show from './endpoints/hashtags/show.js';
+import * as ep___hashtags_trend from './endpoints/hashtags/trend.js';
+import * as ep___hashtags_users from './endpoints/hashtags/users.js';
+import * as ep___i from './endpoints/i.js';
+import * as ep___i_2fa_done from './endpoints/i/2fa/done.js';
+import * as ep___i_2fa_keyDone from './endpoints/i/2fa/key-done.js';
+import * as ep___i_2fa_passwordLess from './endpoints/i/2fa/password-less.js';
+import * as ep___i_2fa_registerKey from './endpoints/i/2fa/register-key.js';
+import * as ep___i_2fa_register from './endpoints/i/2fa/register.js';
+import * as ep___i_2fa_removeKey from './endpoints/i/2fa/remove-key.js';
+import * as ep___i_2fa_unregister from './endpoints/i/2fa/unregister.js';
+import * as ep___i_apps from './endpoints/i/apps.js';
+import * as ep___i_authorizedApps from './endpoints/i/authorized-apps.js';
+import * as ep___i_changePassword from './endpoints/i/change-password.js';
+import * as ep___i_deleteAccount from './endpoints/i/delete-account.js';
+import * as ep___i_exportBlocking from './endpoints/i/export-blocking.js';
+import * as ep___i_exportFollowing from './endpoints/i/export-following.js';
+import * as ep___i_exportMute from './endpoints/i/export-mute.js';
+import * as ep___i_exportNotes from './endpoints/i/export-notes.js';
+import * as ep___i_exportUserLists from './endpoints/i/export-user-lists.js';
+import * as ep___i_favorites from './endpoints/i/favorites.js';
+import * as ep___i_gallery_likes from './endpoints/i/gallery/likes.js';
+import * as ep___i_gallery_posts from './endpoints/i/gallery/posts.js';
+import * as ep___i_getWordMutedNotesCount from './endpoints/i/get-word-muted-notes-count.js';
+import * as ep___i_importBlocking from './endpoints/i/import-blocking.js';
+import * as ep___i_importFollowing from './endpoints/i/import-following.js';
+import * as ep___i_importMuting from './endpoints/i/import-muting.js';
+import * as ep___i_importUserLists from './endpoints/i/import-user-lists.js';
+import * as ep___i_notifications from './endpoints/i/notifications.js';
+import * as ep___i_pageLikes from './endpoints/i/page-likes.js';
+import * as ep___i_pages from './endpoints/i/pages.js';
+import * as ep___i_pin from './endpoints/i/pin.js';
+import * as ep___i_readAllMessagingMessages from './endpoints/i/read-all-messaging-messages.js';
+import * as ep___i_readAllUnreadNotes from './endpoints/i/read-all-unread-notes.js';
+import * as ep___i_readAnnouncement from './endpoints/i/read-announcement.js';
+import * as ep___i_regenerateToken from './endpoints/i/regenerate-token.js';
+import * as ep___i_registry_getAll from './endpoints/i/registry/get-all.js';
+import * as ep___i_registry_getDetail from './endpoints/i/registry/get-detail.js';
+import * as ep___i_registry_get from './endpoints/i/registry/get.js';
+import * as ep___i_registry_keysWithType from './endpoints/i/registry/keys-with-type.js';
+import * as ep___i_registry_keys from './endpoints/i/registry/keys.js';
+import * as ep___i_registry_remove from './endpoints/i/registry/remove.js';
+import * as ep___i_registry_scopes from './endpoints/i/registry/scopes.js';
+import * as ep___i_registry_set from './endpoints/i/registry/set.js';
+import * as ep___i_revokeToken from './endpoints/i/revoke-token.js';
+import * as ep___i_signinHistory from './endpoints/i/signin-history.js';
+import * as ep___i_unpin from './endpoints/i/unpin.js';
+import * as ep___i_updateEmail from './endpoints/i/update-email.js';
+import * as ep___i_update from './endpoints/i/update.js';
+import * as ep___i_userGroupInvites from './endpoints/i/user-group-invites.js';
+import * as ep___messaging_history from './endpoints/messaging/history.js';
+import * as ep___messaging_messages from './endpoints/messaging/messages.js';
+import * as ep___messaging_messages_create from './endpoints/messaging/messages/create.js';
+import * as ep___messaging_messages_delete from './endpoints/messaging/messages/delete.js';
+import * as ep___messaging_messages_read from './endpoints/messaging/messages/read.js';
+import * as ep___meta from './endpoints/meta.js';
+import * as ep___miauth_genToken from './endpoints/miauth/gen-token.js';
+import * as ep___mute_create from './endpoints/mute/create.js';
+import * as ep___mute_delete from './endpoints/mute/delete.js';
+import * as ep___mute_list from './endpoints/mute/list.js';
+import * as ep___my_apps from './endpoints/my/apps.js';
+import * as ep___notes from './endpoints/notes.js';
+import * as ep___notes_children from './endpoints/notes/children.js';
+import * as ep___notes_clips from './endpoints/notes/clips.js';
+import * as ep___notes_conversation from './endpoints/notes/conversation.js';
+import * as ep___notes_create from './endpoints/notes/create.js';
+import * as ep___notes_delete from './endpoints/notes/delete.js';
+import * as ep___notes_favorites_create from './endpoints/notes/favorites/create.js';
+import * as ep___notes_favorites_delete from './endpoints/notes/favorites/delete.js';
+import * as ep___notes_featured from './endpoints/notes/featured.js';
+import * as ep___notes_globalTimeline from './endpoints/notes/global-timeline.js';
+import * as ep___notes_hybridTimeline from './endpoints/notes/hybrid-timeline.js';
+import * as ep___notes_localTimeline from './endpoints/notes/local-timeline.js';
+import * as ep___notes_mentions from './endpoints/notes/mentions.js';
+import * as ep___notes_polls_recommendation from './endpoints/notes/polls/recommendation.js';
+import * as ep___notes_polls_vote from './endpoints/notes/polls/vote.js';
+import * as ep___notes_reactions from './endpoints/notes/reactions.js';
+import * as ep___notes_reactions_create from './endpoints/notes/reactions/create.js';
+import * as ep___notes_reactions_delete from './endpoints/notes/reactions/delete.js';
+import * as ep___notes_renotes from './endpoints/notes/renotes.js';
+import * as ep___notes_replies from './endpoints/notes/replies.js';
+import * as ep___notes_searchByTag from './endpoints/notes/search-by-tag.js';
+import * as ep___notes_search from './endpoints/notes/search.js';
+import * as ep___notes_show from './endpoints/notes/show.js';
+import * as ep___notes_state from './endpoints/notes/state.js';
+import * as ep___notes_threadMuting_create from './endpoints/notes/thread-muting/create.js';
+import * as ep___notes_threadMuting_delete from './endpoints/notes/thread-muting/delete.js';
+import * as ep___notes_timeline from './endpoints/notes/timeline.js';
+import * as ep___notes_translate from './endpoints/notes/translate.js';
+import * as ep___notes_unrenote from './endpoints/notes/unrenote.js';
+import * as ep___notes_userListTimeline from './endpoints/notes/user-list-timeline.js';
+import * as ep___notes_watching_create from './endpoints/notes/watching/create.js';
+import * as ep___notes_watching_delete from './endpoints/notes/watching/delete.js';
+import * as ep___notifications_create from './endpoints/notifications/create.js';
+import * as ep___notifications_markAllAsRead from './endpoints/notifications/mark-all-as-read.js';
+import * as ep___notifications_read from './endpoints/notifications/read.js';
+import * as ep___pagePush from './endpoints/page-push.js';
+import * as ep___pages_create from './endpoints/pages/create.js';
+import * as ep___pages_delete from './endpoints/pages/delete.js';
+import * as ep___pages_featured from './endpoints/pages/featured.js';
+import * as ep___pages_like from './endpoints/pages/like.js';
+import * as ep___pages_show from './endpoints/pages/show.js';
+import * as ep___pages_unlike from './endpoints/pages/unlike.js';
+import * as ep___pages_update from './endpoints/pages/update.js';
+import * as ep___ping from './endpoints/ping.js';
+import * as ep___pinnedUsers from './endpoints/pinned-users.js';
+import * as ep___promo_read from './endpoints/promo/read.js';
+import * as ep___requestResetPassword from './endpoints/request-reset-password.js';
+import * as ep___resetDb from './endpoints/reset-db.js';
+import * as ep___resetPassword from './endpoints/reset-password.js';
+import * as ep___serverInfo from './endpoints/server-info.js';
+import * as ep___stats from './endpoints/stats.js';
+import * as ep___sw_register from './endpoints/sw/register.js';
+import * as ep___sw_unregister from './endpoints/sw/unregister.js';
+import * as ep___test from './endpoints/test.js';
+import * as ep___username_available from './endpoints/username/available.js';
+import * as ep___users from './endpoints/users.js';
+import * as ep___users_clips from './endpoints/users/clips.js';
+import * as ep___users_followers from './endpoints/users/followers.js';
+import * as ep___users_following from './endpoints/users/following.js';
+import * as ep___users_gallery_posts from './endpoints/users/gallery/posts.js';
+import * as ep___users_getFrequentlyRepliedUsers from './endpoints/users/get-frequently-replied-users.js';
+import * as ep___users_groups_create from './endpoints/users/groups/create.js';
+import * as ep___users_groups_delete from './endpoints/users/groups/delete.js';
+import * as ep___users_groups_invitations_accept from './endpoints/users/groups/invitations/accept.js';
+import * as ep___users_groups_invitations_reject from './endpoints/users/groups/invitations/reject.js';
+import * as ep___users_groups_invite from './endpoints/users/groups/invite.js';
+import * as ep___users_groups_joined from './endpoints/users/groups/joined.js';
+import * as ep___users_groups_leave from './endpoints/users/groups/leave.js';
+import * as ep___users_groups_owned from './endpoints/users/groups/owned.js';
+import * as ep___users_groups_pull from './endpoints/users/groups/pull.js';
+import * as ep___users_groups_show from './endpoints/users/groups/show.js';
+import * as ep___users_groups_transfer from './endpoints/users/groups/transfer.js';
+import * as ep___users_groups_update from './endpoints/users/groups/update.js';
+import * as ep___users_lists_create from './endpoints/users/lists/create.js';
+import * as ep___users_lists_delete from './endpoints/users/lists/delete.js';
+import * as ep___users_lists_list from './endpoints/users/lists/list.js';
+import * as ep___users_lists_pull from './endpoints/users/lists/pull.js';
+import * as ep___users_lists_push from './endpoints/users/lists/push.js';
+import * as ep___users_lists_show from './endpoints/users/lists/show.js';
+import * as ep___users_lists_update from './endpoints/users/lists/update.js';
+import * as ep___users_notes from './endpoints/users/notes.js';
+import * as ep___users_pages from './endpoints/users/pages.js';
+import * as ep___users_reactions from './endpoints/users/reactions.js';
+import * as ep___users_recommendation from './endpoints/users/recommendation.js';
+import * as ep___users_relation from './endpoints/users/relation.js';
+import * as ep___users_reportAbuse from './endpoints/users/report-abuse.js';
+import * as ep___users_searchByUsernameAndHost from './endpoints/users/search-by-username-and-host.js';
+import * as ep___users_search from './endpoints/users/search.js';
+import * as ep___users_show from './endpoints/users/show.js';
+import * as ep___users_stats from './endpoints/users/stats.js';
+
+const eps = [
+	['admin/abuse-user-reports', ep___admin_abuseUserReports],
+	['admin/accounts/create', ep___admin_accounts_create],
+	['admin/accounts/delete', ep___admin_accounts_delete],
+	['admin/ad/create', ep___admin_ad_create],
+	['admin/ad/delete', ep___admin_ad_delete],
+	['admin/ad/list', ep___admin_ad_list],
+	['admin/ad/update', ep___admin_ad_update],
+	['admin/announcements/create', ep___admin_announcements_create],
+	['admin/announcements/delete', ep___admin_announcements_delete],
+	['admin/announcements/list', ep___admin_announcements_list],
+	['admin/announcements/update', ep___admin_announcements_update],
+	['admin/delete-all-files-of-a-user', ep___admin_deleteAllFilesOfAUser],
+	['admin/drive/clean-remote-files', ep___admin_drive_cleanRemoteFiles],
+	['admin/drive/cleanup', ep___admin_drive_cleanup],
+	['admin/drive/files', ep___admin_drive_files],
+	['admin/drive/show-file', ep___admin_drive_showFile],
+	['admin/emoji/add-aliases-bulk', ep___admin_emoji_addAliasesBulk],
+	['admin/emoji/add', ep___admin_emoji_add],
+	['admin/emoji/copy', ep___admin_emoji_copy],
+	['admin/emoji/delete-bulk', ep___admin_emoji_deleteBulk],
+	['admin/emoji/delete', ep___admin_emoji_delete],
+	['admin/emoji/import-zip', ep___admin_emoji_importZip],
+	['admin/emoji/list-remote', ep___admin_emoji_listRemote],
+	['admin/emoji/list', ep___admin_emoji_list],
+	['admin/emoji/remove-aliases-bulk', ep___admin_emoji_removeAliasesBulk],
+	['admin/emoji/set-aliases-bulk', ep___admin_emoji_setAliasesBulk],
+	['admin/emoji/set-category-bulk', ep___admin_emoji_setCategoryBulk],
+	['admin/emoji/update', ep___admin_emoji_update],
+	['admin/federation/delete-all-files', ep___admin_federation_deleteAllFiles],
+	['admin/federation/refresh-remote-instance-metadata', ep___admin_federation_refreshRemoteInstanceMetadata],
+	['admin/federation/remove-all-following', ep___admin_federation_removeAllFollowing],
+	['admin/federation/update-instance', ep___admin_federation_updateInstance],
+	['admin/get-index-stats', ep___admin_getIndexStats],
+	['admin/get-table-stats', ep___admin_getTableStats],
+	['admin/invite', ep___admin_invite],
+	['admin/moderators/add', ep___admin_moderators_add],
+	['admin/moderators/remove', ep___admin_moderators_remove],
+	['admin/promo/create', ep___admin_promo_create],
+	['admin/queue/clear', ep___admin_queue_clear],
+	['admin/queue/deliver-delayed', ep___admin_queue_deliverDelayed],
+	['admin/queue/inbox-delayed', ep___admin_queue_inboxDelayed],
+	['admin/queue/stats', ep___admin_queue_stats],
+	['admin/relays/add', ep___admin_relays_add],
+	['admin/relays/list', ep___admin_relays_list],
+	['admin/relays/remove', ep___admin_relays_remove],
+	['admin/reset-password', ep___admin_resetPassword],
+	['admin/resolve-abuse-user-report', ep___admin_resolveAbuseUserReport],
+	['admin/send-email', ep___admin_sendEmail],
+	['admin/server-info', ep___admin_serverInfo],
+	['admin/show-moderation-logs', ep___admin_showModerationLogs],
+	['admin/show-user', ep___admin_showUser],
+	['admin/show-users', ep___admin_showUsers],
+	['admin/silence-user', ep___admin_silenceUser],
+	['admin/suspend-user', ep___admin_suspendUser],
+	['admin/unsilence-user', ep___admin_unsilenceUser],
+	['admin/unsuspend-user', ep___admin_unsuspendUser],
+	['admin/update-meta', ep___admin_updateMeta],
+	['admin/vacuum', ep___admin_vacuum],
+	['announcements', ep___announcements],
+	['antennas/create', ep___antennas_create],
+	['antennas/delete', ep___antennas_delete],
+	['antennas/list', ep___antennas_list],
+	['antennas/notes', ep___antennas_notes],
+	['antennas/show', ep___antennas_show],
+	['antennas/update', ep___antennas_update],
+	['ap/get', ep___ap_get],
+	['ap/show', ep___ap_show],
+	['app/create', ep___app_create],
+	['app/show', ep___app_show],
+	['auth/accept', ep___auth_accept],
+	['auth/session/generate', ep___auth_session_generate],
+	['auth/session/show', ep___auth_session_show],
+	['auth/session/userkey', ep___auth_session_userkey],
+	['blocking/create', ep___blocking_create],
+	['blocking/delete', ep___blocking_delete],
+	['blocking/list', ep___blocking_list],
+	['channels/create', ep___channels_create],
+	['channels/featured', ep___channels_featured],
+	['channels/follow', ep___channels_follow],
+	['channels/followed', ep___channels_followed],
+	['channels/owned', ep___channels_owned],
+	['channels/show', ep___channels_show],
+	['channels/timeline', ep___channels_timeline],
+	['channels/unfollow', ep___channels_unfollow],
+	['channels/update', ep___channels_update],
+	['charts/active-users', ep___charts_activeUsers],
+	['charts/ap-request', ep___charts_apRequest],
+	['charts/drive', ep___charts_drive],
+	['charts/federation', ep___charts_federation],
+	['charts/hashtag', ep___charts_hashtag],
+	['charts/instance', ep___charts_instance],
+	['charts/notes', ep___charts_notes],
+	['charts/user/drive', ep___charts_user_drive],
+	['charts/user/following', ep___charts_user_following],
+	['charts/user/notes', ep___charts_user_notes],
+	['charts/user/reactions', ep___charts_user_reactions],
+	['charts/users', ep___charts_users],
+	['clips/add-note', ep___clips_addNote],
+	['clips/create', ep___clips_create],
+	['clips/delete', ep___clips_delete],
+	['clips/list', ep___clips_list],
+	['clips/notes', ep___clips_notes],
+	['clips/show', ep___clips_show],
+	['clips/update', ep___clips_update],
+	['drive', ep___drive],
+	['drive/files', ep___drive_files],
+	['drive/files/attached-notes', ep___drive_files_attachedNotes],
+	['drive/files/check-existence', ep___drive_files_checkExistence],
+	['drive/files/create', ep___drive_files_create],
+	['drive/files/delete', ep___drive_files_delete],
+	['drive/files/find-by-hash', ep___drive_files_findByHash],
+	['drive/files/find', ep___drive_files_find],
+	['drive/files/show', ep___drive_files_show],
+	['drive/files/update', ep___drive_files_update],
+	['drive/files/upload-from-url', ep___drive_files_uploadFromUrl],
+	['drive/folders', ep___drive_folders],
+	['drive/folders/create', ep___drive_folders_create],
+	['drive/folders/delete', ep___drive_folders_delete],
+	['drive/folders/find', ep___drive_folders_find],
+	['drive/folders/show', ep___drive_folders_show],
+	['drive/folders/update', ep___drive_folders_update],
+	['drive/stream', ep___drive_stream],
+	['email-address/available', ep___emailAddress_available],
+	['endpoint', ep___endpoint],
+	['endpoints', ep___endpoints],
+	['export-custom-emojis', ep___exportCustomEmojis],
+	['federation/followers', ep___federation_followers],
+	['federation/following', ep___federation_following],
+	['federation/instances', ep___federation_instances],
+	['federation/show-instance', ep___federation_showInstance],
+	['federation/update-remote-user', ep___federation_updateRemoteUser],
+	['federation/users', ep___federation_users],
+	['following/create', ep___following_create],
+	['following/delete', ep___following_delete],
+	['following/invalidate', ep___following_invalidate],
+	['following/requests/accept', ep___following_requests_accept],
+	['following/requests/cancel', ep___following_requests_cancel],
+	['following/requests/list', ep___following_requests_list],
+	['following/requests/reject', ep___following_requests_reject],
+	['gallery/featured', ep___gallery_featured],
+	['gallery/popular', ep___gallery_popular],
+	['gallery/posts', ep___gallery_posts],
+	['gallery/posts/create', ep___gallery_posts_create],
+	['gallery/posts/delete', ep___gallery_posts_delete],
+	['gallery/posts/like', ep___gallery_posts_like],
+	['gallery/posts/show', ep___gallery_posts_show],
+	['gallery/posts/unlike', ep___gallery_posts_unlike],
+	['gallery/posts/update', ep___gallery_posts_update],
+	['get-online-users-count', ep___getOnlineUsersCount],
+	['hashtags/list', ep___hashtags_list],
+	['hashtags/search', ep___hashtags_search],
+	['hashtags/show', ep___hashtags_show],
+	['hashtags/trend', ep___hashtags_trend],
+	['hashtags/users', ep___hashtags_users],
+	['i', ep___i],
+	['i/2fa/done', ep___i_2fa_done],
+	['i/2fa/key-done', ep___i_2fa_keyDone],
+	['i/2fa/password-less', ep___i_2fa_passwordLess],
+	['i/2fa/register-key', ep___i_2fa_registerKey],
+	['i/2fa/register', ep___i_2fa_register],
+	['i/2fa/remove-key', ep___i_2fa_removeKey],
+	['i/2fa/unregister', ep___i_2fa_unregister],
+	['i/apps', ep___i_apps],
+	['i/authorized-apps', ep___i_authorizedApps],
+	['i/change-password', ep___i_changePassword],
+	['i/delete-account', ep___i_deleteAccount],
+	['i/export-blocking', ep___i_exportBlocking],
+	['i/export-following', ep___i_exportFollowing],
+	['i/export-mute', ep___i_exportMute],
+	['i/export-notes', ep___i_exportNotes],
+	['i/export-user-lists', ep___i_exportUserLists],
+	['i/favorites', ep___i_favorites],
+	['i/gallery/likes', ep___i_gallery_likes],
+	['i/gallery/posts', ep___i_gallery_posts],
+	['i/get-word-muted-notes-count', ep___i_getWordMutedNotesCount],
+	['i/import-blocking', ep___i_importBlocking],
+	['i/import-following', ep___i_importFollowing],
+	['i/import-muting', ep___i_importMuting],
+	['i/import-user-lists', ep___i_importUserLists],
+	['i/notifications', ep___i_notifications],
+	['i/page-likes', ep___i_pageLikes],
+	['i/pages', ep___i_pages],
+	['i/pin', ep___i_pin],
+	['i/read-all-messaging-messages', ep___i_readAllMessagingMessages],
+	['i/read-all-unread-notes', ep___i_readAllUnreadNotes],
+	['i/read-announcement', ep___i_readAnnouncement],
+	['i/regenerate-token', ep___i_regenerateToken],
+	['i/registry/get-all', ep___i_registry_getAll],
+	['i/registry/get-detail', ep___i_registry_getDetail],
+	['i/registry/get', ep___i_registry_get],
+	['i/registry/keys-with-type', ep___i_registry_keysWithType],
+	['i/registry/keys', ep___i_registry_keys],
+	['i/registry/remove', ep___i_registry_remove],
+	['i/registry/scopes', ep___i_registry_scopes],
+	['i/registry/set', ep___i_registry_set],
+	['i/revoke-token', ep___i_revokeToken],
+	['i/signin-history', ep___i_signinHistory],
+	['i/unpin', ep___i_unpin],
+	['i/update-email', ep___i_updateEmail],
+	['i/update', ep___i_update],
+	['i/user-group-invites', ep___i_userGroupInvites],
+	['messaging/history', ep___messaging_history],
+	['messaging/messages', ep___messaging_messages],
+	['messaging/messages/create', ep___messaging_messages_create],
+	['messaging/messages/delete', ep___messaging_messages_delete],
+	['messaging/messages/read', ep___messaging_messages_read],
+	['meta', ep___meta],
+	['miauth/gen-token', ep___miauth_genToken],
+	['mute/create', ep___mute_create],
+	['mute/delete', ep___mute_delete],
+	['mute/list', ep___mute_list],
+	['my/apps', ep___my_apps],
+	['notes', ep___notes],
+	['notes/children', ep___notes_children],
+	['notes/clips', ep___notes_clips],
+	['notes/conversation', ep___notes_conversation],
+	['notes/create', ep___notes_create],
+	['notes/delete', ep___notes_delete],
+	['notes/favorites/create', ep___notes_favorites_create],
+	['notes/favorites/delete', ep___notes_favorites_delete],
+	['notes/featured', ep___notes_featured],
+	['notes/global-timeline', ep___notes_globalTimeline],
+	['notes/hybrid-timeline', ep___notes_hybridTimeline],
+	['notes/local-timeline', ep___notes_localTimeline],
+	['notes/mentions', ep___notes_mentions],
+	['notes/polls/recommendation', ep___notes_polls_recommendation],
+	['notes/polls/vote', ep___notes_polls_vote],
+	['notes/reactions', ep___notes_reactions],
+	['notes/reactions/create', ep___notes_reactions_create],
+	['notes/reactions/delete', ep___notes_reactions_delete],
+	['notes/renotes', ep___notes_renotes],
+	['notes/replies', ep___notes_replies],
+	['notes/search-by-tag', ep___notes_searchByTag],
+	['notes/search', ep___notes_search],
+	['notes/show', ep___notes_show],
+	['notes/state', ep___notes_state],
+	['notes/thread-muting/create', ep___notes_threadMuting_create],
+	['notes/thread-muting/delete', ep___notes_threadMuting_delete],
+	['notes/timeline', ep___notes_timeline],
+	['notes/translate', ep___notes_translate],
+	['notes/unrenote', ep___notes_unrenote],
+	['notes/user-list-timeline', ep___notes_userListTimeline],
+	['notes/watching/create', ep___notes_watching_create],
+	['notes/watching/delete', ep___notes_watching_delete],
+	['notifications/create', ep___notifications_create],
+	['notifications/mark-all-as-read', ep___notifications_markAllAsRead],
+	['notifications/read', ep___notifications_read],
+	['page-push', ep___pagePush],
+	['pages/create', ep___pages_create],
+	['pages/delete', ep___pages_delete],
+	['pages/featured', ep___pages_featured],
+	['pages/like', ep___pages_like],
+	['pages/show', ep___pages_show],
+	['pages/unlike', ep___pages_unlike],
+	['pages/update', ep___pages_update],
+	['ping', ep___ping],
+	['pinned-users', ep___pinnedUsers],
+	['promo/read', ep___promo_read],
+	['request-reset-password', ep___requestResetPassword],
+	['reset-db', ep___resetDb],
+	['reset-password', ep___resetPassword],
+	['server-info', ep___serverInfo],
+	['stats', ep___stats],
+	['sw/register', ep___sw_register],
+	['sw/unregister', ep___sw_unregister],
+	['test', ep___test],
+	['username/available', ep___username_available],
+	['users', ep___users],
+	['users/clips', ep___users_clips],
+	['users/followers', ep___users_followers],
+	['users/following', ep___users_following],
+	['users/gallery/posts', ep___users_gallery_posts],
+	['users/get-frequently-replied-users', ep___users_getFrequentlyRepliedUsers],
+	['users/groups/create', ep___users_groups_create],
+	['users/groups/delete', ep___users_groups_delete],
+	['users/groups/invitations/accept', ep___users_groups_invitations_accept],
+	['users/groups/invitations/reject', ep___users_groups_invitations_reject],
+	['users/groups/invite', ep___users_groups_invite],
+	['users/groups/joined', ep___users_groups_joined],
+	['users/groups/leave', ep___users_groups_leave],
+	['users/groups/owned', ep___users_groups_owned],
+	['users/groups/pull', ep___users_groups_pull],
+	['users/groups/show', ep___users_groups_show],
+	['users/groups/transfer', ep___users_groups_transfer],
+	['users/groups/update', ep___users_groups_update],
+	['users/lists/create', ep___users_lists_create],
+	['users/lists/delete', ep___users_lists_delete],
+	['users/lists/list', ep___users_lists_list],
+	['users/lists/pull', ep___users_lists_pull],
+	['users/lists/push', ep___users_lists_push],
+	['users/lists/show', ep___users_lists_show],
+	['users/lists/update', ep___users_lists_update],
+	['users/notes', ep___users_notes],
+	['users/pages', ep___users_pages],
+	['users/reactions', ep___users_reactions],
+	['users/recommendation', ep___users_recommendation],
+	['users/relation', ep___users_relation],
+	['users/report-abuse', ep___users_reportAbuse],
+	['users/search-by-username-and-host', ep___users_searchByUsernameAndHost],
+	['users/search', ep___users_search],
+	['users/show', ep___users_show],
+	['users/stats', ep___users_stats],
+];
 
 export interface IEndpointMeta {
 	readonly stability?: 'deprecated' | 'experimental' | 'stable';
@@ -96,15 +697,9 @@ export interface IEndpoint {
 	params: Schema;
 }
 
-const files = glob.sync('**/*.js', {
-	cwd: path.resolve(_dirname + '/endpoints/'),
-});
-
-const endpoints: IEndpoint[] = files.map(f => {
-	const ep = require(`./endpoints/${f}`);
-
+const endpoints: IEndpoint[] = eps.map(([name, ep]) => {
 	return {
-		name: f.replace('.js', ''),
+		name: name,
 		exec: ep.default,
 		meta: ep.meta || {},
 		params: ep.paramDef,
diff --git a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
index 6ab9c87e3c..333746f423 100644
--- a/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
+++ b/packages/backend/src/server/api/endpoints/admin/abuse-user-reports.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { AbuseUserReports } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { AbuseUserReports } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
index 421726d60f..2820c7993d 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Users } from '@/models/index';
-import { signup } from '../../../common/signup';
+import define from '../../../define.js';
+import { Users } from '@/models/index.js';
+import { signup } from '../../../common/signup.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
index cf48a906f0..01754ec8f3 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { Users } from '@/models/index';
-import { doPostSuspend } from '@/services/suspend-user';
-import { publishUserEvent } from '@/services/stream';
-import { createDeleteAccountJob } from '@/queue';
+import define from '../../../define.js';
+import { Users } from '@/models/index.js';
+import { doPostSuspend } from '@/services/suspend-user.js';
+import { publishUserEvent } from '@/services/stream.js';
+import { createDeleteAccountJob } from '@/queue/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/create.ts b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
index c1efaf6314..ab2c50b50f 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/create.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Ads } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { Ads } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
index 1b9607b5aa..3663d974c5 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Ads } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { Ads } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/list.ts b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
index 5b72f72937..74f154f272 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/list.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Ads } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { Ads } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/ad/update.ts b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
index 93902e79c1..89c421db66 100644
--- a/packages/backend/src/server/api/endpoints/admin/ad/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/ad/update.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Ads } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { Ads } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
index 884dd5e280..41570078d4 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/create.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Announcements } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { Announcements } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts b/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
index c09307193f..4871dc4e12 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Announcements } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { Announcements } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
index af48925ec1..0ba0a8ee08 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Announcements, AnnouncementReads } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { Announcements, AnnouncementReads } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
index fb4d5e95ba..138337ef5b 100644
--- a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Announcements } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { Announcements } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts b/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
index dde84ae45e..90e65ec4cd 100644
--- a/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/delete-all-files-of-a-user.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { deleteFile } from '@/services/drive/delete-file';
-import { DriveFiles } from '@/models/index';
+import define from '../../define.js';
+import { deleteFile } from '@/services/drive/delete-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts b/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
index c42b5caac2..bab149532e 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/clean-remote-files.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { createCleanRemoteFilesJob } from '@/queue/index';
+import define from '../../../define.js';
+import { createCleanRemoteFilesJob } from '@/queue/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts b/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
index a7ce154cf2..3e7d43fb0b 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/cleanup.ts
@@ -1,7 +1,7 @@
 import { IsNull } from 'typeorm';
-import define from '../../../define';
-import { deleteFile } from '@/services/drive/delete-file';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { deleteFile } from '@/services/drive/delete-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/files.ts b/packages/backend/src/server/api/endpoints/admin/drive/files.ts
index 0b5544ce28..646d85a1e0 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/files.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { DriveFiles } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { DriveFiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
index efd4a8e4aa..e821160095 100644
--- a/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
+++ b/packages/backend/src/server/api/endpoints/admin/drive/show-file.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts
index 4ddea09b1c..77a4adea61 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/add-aliases-bulk.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection, In } from 'typeorm';
-import { ApiError } from '../../../error';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
index 2ca3aade99..c5787d59dc 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts
@@ -1,11 +1,11 @@
-import define from '../../../define';
-import { Emojis, DriveFiles } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { Emojis, DriveFiles } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 import { getConnection } from 'typeorm';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { ApiError } from '../../../error';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { ApiError } from '../../../error.js';
 import rndstr from 'rndstr';
-import { publishBroadcastStream } from '@/services/stream';
+import { publishBroadcastStream } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
index f2dc11f664..a0eaa61258 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
@@ -1,11 +1,11 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 import { getConnection } from 'typeorm';
-import { ApiError } from '../../../error';
-import { DriveFile } from '@/models/entities/drive-file';
-import { uploadFromUrl } from '@/services/drive/upload-from-url';
-import { publishBroadcastStream } from '@/services/stream';
+import { ApiError } from '../../../error.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
+import { publishBroadcastStream } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts
index d35ef660e4..38a2d65cf6 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/delete-bulk.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection, In } from 'typeorm';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { ApiError } from '../../../error';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts b/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts
index 2dabd60a0f..a0cffb47f8 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/delete.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection } from 'typeorm';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { ApiError } from '../../../error';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts b/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts
index 98d8d4fef9..3f03dc2da4 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/import-zip.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { createImportCustomEmojisJob } from '@/queue/index';
+import define from '../../../define.js';
+import { createImportCustomEmojisJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
index e519f64ff0..f19c3ddbd8 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
index 8e26da3d64..f488a71a00 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/list.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
-import { Emoji } from '@/models/entities/emoji';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
+import { Emoji } from '@/models/entities/emoji.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts
index e619053e58..dbad93d336 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/remove-aliases-bulk.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection, In } from 'typeorm';
-import { ApiError } from '../../../error';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts
index dff90193e7..470b9bef08 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/set-aliases-bulk.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection, In } from 'typeorm';
-import { ApiError } from '../../../error';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts b/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts
index 462e7a742c..40e4c0199e 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/set-category-bulk.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection, In } from 'typeorm';
-import { ApiError } from '../../../error';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
index 870d568311..c6d07e16fa 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Emojis } from '@/models/index';
+import define from '../../../define.js';
+import { Emojis } from '@/models/index.js';
 import { getConnection } from 'typeorm';
-import { ApiError } from '../../../error';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts b/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
index 71c1c41cf6..d4251f2feb 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/delete-all-files.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { deleteFile } from '@/services/drive/delete-file';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { deleteFile } from '@/services/drive/delete-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts b/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
index df73453f78..86978cc309 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/refresh-remote-instance-metadata.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { Instances } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
-import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata';
+import define from '../../../define.js';
+import { Instances } from '@/models/index.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { fetchInstanceMetadata } from '@/services/fetch-instance-metadata.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
index 0ae58de534..ccd07489cb 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import deleteFollowing from '@/services/following/delete';
-import { Followings, Users } from '@/models/index';
+import define from '../../../define.js';
+import deleteFollowing from '@/services/following/delete.js';
+import { Followings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
index 9a3c35d055..1981082428 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { Instances } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
+import define from '../../../define.js';
+import { Instances } from '@/models/index.js';
+import { toPuny } from '@/misc/convert-host.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts b/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
index 17ce1bfce9..37878c4143 100644
--- a/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/get-index-stats.ts
@@ -1,4 +1,4 @@
-import define from '../../define';
+import define from '../../define.js';
 import { getConnection } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
index e980ca96ef..7cf2d5ffd4 100644
--- a/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/get-table-stats.ts
@@ -1,4 +1,4 @@
-import define from '../../define';
+import define from '../../define.js';
 import { getConnection } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/admin/invite.ts b/packages/backend/src/server/api/endpoints/admin/invite.ts
index 45392f85c7..7e950cf87b 100644
--- a/packages/backend/src/server/api/endpoints/admin/invite.ts
+++ b/packages/backend/src/server/api/endpoints/admin/invite.ts
@@ -1,7 +1,7 @@
 import rndstr from 'rndstr';
-import define from '../../define';
-import { RegistrationTickets } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../define.js';
+import { RegistrationTickets } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/moderators/add.ts b/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
index 3bf66f3c86..4206e3a3c2 100644
--- a/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/moderators/add.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { Users } from '@/models/index';
+import define from '../../../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts b/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
index e2e96de3c1..143119bfe4 100644
--- a/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
+++ b/packages/backend/src/server/api/endpoints/admin/moderators/remove.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { Users } from '@/models/index';
+import define from '../../../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/promo/create.ts b/packages/backend/src/server/api/endpoints/admin/promo/create.ts
index 4f714c579c..2eec5bf0db 100644
--- a/packages/backend/src/server/api/endpoints/admin/promo/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/promo/create.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getNote } from '../../../common/getters';
-import { PromoNotes } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getNote } from '../../../common/getters.js';
+import { PromoNotes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/clear.ts b/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
index fd1dba8e50..8f015c280a 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/clear.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { destroy } from '@/queue/index';
-import { insertModerationLog } from '@/services/insert-moderation-log';
+import define from '../../../define.js';
+import { destroy } from '@/queue/index.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
index 080a7da04f..70f7d77de4 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/deliver-delayed.ts
@@ -1,6 +1,6 @@
-import { deliverQueue } from '@/queue/queues';
-import { URL } from 'url';
-import define from '../../../define';
+import { deliverQueue } from '@/queue/queues.js';
+import { URL } from 'node:url';
+import define from '../../../define.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
index c452b620ec..2235ce8f97 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/inbox-delayed.ts
@@ -1,6 +1,6 @@
-import { URL } from 'url';
-import define from '../../../define';
-import { inboxQueue } from '@/queue/queues';
+import { URL } from 'node:url';
+import define from '../../../define.js';
+import { inboxQueue } from '@/queue/queues.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/queue/stats.ts b/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
index 6b883aebee..988b5a5e35 100644
--- a/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
+++ b/packages/backend/src/server/api/endpoints/admin/queue/stats.ts
@@ -1,5 +1,5 @@
-import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '@/queue/queues';
-import define from '../../../define';
+import { deliverQueue, inboxQueue, dbQueue, objectStorageQueue } from '@/queue/queues.js';
+import define from '../../../define.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/add.ts b/packages/backend/src/server/api/endpoints/admin/relays/add.ts
index e8eb249f93..348e9baca1 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/add.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/add.ts
@@ -1,7 +1,7 @@
-import { URL } from 'url';
-import define from '../../../define';
-import { addRelay } from '@/services/relay';
-import { ApiError } from '../../../error';
+import { URL } from 'node:url';
+import define from '../../../define.js';
+import { addRelay } from '@/services/relay.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/list.ts b/packages/backend/src/server/api/endpoints/admin/relays/list.ts
index da2c32ce4f..89ec651e61 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/list.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/list.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { listRelay } from '@/services/relay';
+import define from '../../../define.js';
+import { listRelay } from '@/services/relay.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
index 26a16284db..b59cf72c58 100644
--- a/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
+++ b/packages/backend/src/server/api/endpoints/admin/relays/remove.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { removeRelay } from '@/services/relay';
+import define from '../../../define.js';
+import { removeRelay } from '@/services/relay.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/reset-password.ts b/packages/backend/src/server/api/endpoints/admin/reset-password.ts
index 5036d76d1f..1fd5c8d5a5 100644
--- a/packages/backend/src/server/api/endpoints/admin/reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/admin/reset-password.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import * as bcrypt from 'bcryptjs';
+import define from '../../define.js';
+import bcrypt from 'bcryptjs';
 import rndstr from 'rndstr';
-import { Users, UserProfiles } from '@/models/index';
+import { Users, UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts b/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
index ec8b56083c..a9e5658413 100644
--- a/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
+++ b/packages/backend/src/server/api/endpoints/admin/resolve-abuse-user-report.ts
@@ -1,9 +1,9 @@
-import define from '../../define';
-import { AbuseUserReports, Users } from '@/models/index';
-import { getInstanceActor } from '@/services/instance-actor';
-import { deliver } from '@/queue/index';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { renderFlag } from '@/remote/activitypub/renderer/flag';
+import define from '../../define.js';
+import { AbuseUserReports, Users } from '@/models/index.js';
+import { getInstanceActor } from '@/services/instance-actor.js';
+import { deliver } from '@/queue/index.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { renderFlag } from '@/remote/activitypub/renderer/flag.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/send-email.ts b/packages/backend/src/server/api/endpoints/admin/send-email.ts
index 819ff8fd03..bbdd66e4c9 100644
--- a/packages/backend/src/server/api/endpoints/admin/send-email.ts
+++ b/packages/backend/src/server/api/endpoints/admin/send-email.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { sendEmail } from '@/services/send-email';
+import define from '../../define.js';
+import { sendEmail } from '@/services/send-email.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/server-info.ts b/packages/backend/src/server/api/endpoints/admin/server-info.ts
index ece9bff53e..8bf1c4341c 100644
--- a/packages/backend/src/server/api/endpoints/admin/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/admin/server-info.ts
@@ -1,8 +1,8 @@
-import * as os from 'os';
-import * as si from 'systeminformation';
+import * as os from 'node:os';
+import si from 'systeminformation';
 import { getConnection } from 'typeorm';
-import define from '../../define';
-import { redisClient } from '../../../../db/redis';
+import define from '../../define.js';
+import { redisClient } from '../../../../db/redis.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
index 1688a1fc53..3545536aa2 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ModerationLogs } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { ModerationLogs } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/show-user.ts b/packages/backend/src/server/api/endpoints/admin/show-user.ts
index 46b6609869..a435dcc288 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Users } from '@/models/index';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/show-users.ts b/packages/backend/src/server/api/endpoints/admin/show-users.ts
index bc4b319e17..1ec86fef2e 100644
--- a/packages/backend/src/server/api/endpoints/admin/show-users.ts
+++ b/packages/backend/src/server/api/endpoints/admin/show-users.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Users } from '@/models/index';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/silence-user.ts b/packages/backend/src/server/api/endpoints/admin/silence-user.ts
index 54ef60f7fe..4a74c3fb00 100644
--- a/packages/backend/src/server/api/endpoints/admin/silence-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/silence-user.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Users } from '@/models/index';
-import { insertModerationLog } from '@/services/insert-moderation-log';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
index c2f3d72438..adaa7b86ce 100644
--- a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
@@ -1,10 +1,10 @@
-import define from '../../define';
-import deleteFollowing from '@/services/following/delete';
-import { Users, Followings, Notifications } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { doPostSuspend } from '@/services/suspend-user';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import deleteFollowing from '@/services/following/delete.js';
+import { Users, Followings, Notifications } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { doPostSuspend } from '@/services/suspend-user.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
index ddda5f48ab..4e6366aa18 100644
--- a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Users } from '@/models/index';
-import { insertModerationLog } from '@/services/insert-moderation-log';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
index 25a8f1a00a..3b9e0a94e0 100644
--- a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { Users } from '@/models/index';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { doPostUnsuspend } from '@/services/unsuspend-user';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { doPostUnsuspend } from '@/services/unsuspend-user.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
index 509e120e79..123c89ed78 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
+import define from '../../define.js';
 import { getConnection } from 'typeorm';
-import { Meta } from '@/models/entities/meta';
-import { insertModerationLog } from '@/services/insert-moderation-log';
-import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits';
+import { Meta } from '@/models/entities/meta.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/admin/vacuum.ts b/packages/backend/src/server/api/endpoints/admin/vacuum.ts
index 8ce352bffd..4c04e019da 100644
--- a/packages/backend/src/server/api/endpoints/admin/vacuum.ts
+++ b/packages/backend/src/server/api/endpoints/admin/vacuum.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
+import define from '../../define.js';
 import { getConnection } from 'typeorm';
-import { insertModerationLog } from '@/services/insert-moderation-log';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
 
 export const meta = {
 	tags: ['admin'],
diff --git a/packages/backend/src/server/api/endpoints/announcements.ts b/packages/backend/src/server/api/endpoints/announcements.ts
index 78a924fe5e..bba66e98cf 100644
--- a/packages/backend/src/server/api/endpoints/announcements.ts
+++ b/packages/backend/src/server/api/endpoints/announcements.ts
@@ -1,6 +1,6 @@
-import define from '../define';
-import { Announcements, AnnouncementReads } from '@/models/index';
-import { makePaginationQuery } from '../common/make-pagination-query';
+import define from '../define.js';
+import { Announcements, AnnouncementReads } from '@/models/index.js';
+import { makePaginationQuery } from '../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['meta'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/create.ts b/packages/backend/src/server/api/endpoints/antennas/create.ts
index 272ebddd4b..92cbba817e 100644
--- a/packages/backend/src/server/api/endpoints/antennas/create.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/create.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { genId } from '@/misc/gen-id';
-import { Antennas, UserLists, UserGroupJoinings } from '@/models/index';
-import { ApiError } from '../../error';
-import { publishInternalEvent } from '@/services/stream';
+import define from '../../define.js';
+import { genId } from '@/misc/gen-id.js';
+import { Antennas, UserLists, UserGroupJoinings } from '@/models/index.js';
+import { ApiError } from '../../error.js';
+import { publishInternalEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['antennas'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/delete.ts b/packages/backend/src/server/api/endpoints/antennas/delete.ts
index 247d4af16c..4e6b8b3d2e 100644
--- a/packages/backend/src/server/api/endpoints/antennas/delete.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/delete.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Antennas } from '@/models/index';
-import { publishInternalEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Antennas } from '@/models/index.js';
+import { publishInternalEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['antennas'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/list.ts b/packages/backend/src/server/api/endpoints/antennas/list.ts
index 59d75d80f5..accca5de76 100644
--- a/packages/backend/src/server/api/endpoints/antennas/list.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/list.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Antennas } from '@/models/index';
+import define from '../../define.js';
+import { Antennas } from '@/models/index.js';
 
 export const meta = {
 	tags: ['antennas', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/notes.ts b/packages/backend/src/server/api/endpoints/antennas/notes.ts
index 74f0d8d88f..7b1b20668e 100644
--- a/packages/backend/src/server/api/endpoints/antennas/notes.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/notes.ts
@@ -1,11 +1,11 @@
-import define from '../../define';
-import readNote from '@/services/note/read';
-import { Antennas, Notes, AntennaNotes } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { ApiError } from '../../error';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import readNote from '@/services/note/read.js';
+import { Antennas, Notes, AntennaNotes } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { ApiError } from '../../error.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['antennas', 'account', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/show.ts b/packages/backend/src/server/api/endpoints/antennas/show.ts
index 8428844c15..36c4da81b7 100644
--- a/packages/backend/src/server/api/endpoints/antennas/show.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/show.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Antennas } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Antennas } from '@/models/index.js';
 
 export const meta = {
 	tags: ['antennas', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/antennas/update.ts b/packages/backend/src/server/api/endpoints/antennas/update.ts
index 0b8e864b4d..a99964555b 100644
--- a/packages/backend/src/server/api/endpoints/antennas/update.ts
+++ b/packages/backend/src/server/api/endpoints/antennas/update.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Antennas, UserLists, UserGroupJoinings } from '@/models/index';
-import { publishInternalEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Antennas, UserLists, UserGroupJoinings } from '@/models/index.js';
+import { publishInternalEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['antennas'],
diff --git a/packages/backend/src/server/api/endpoints/ap/get.ts b/packages/backend/src/server/api/endpoints/ap/get.ts
index a60ff00ecd..0cbe7ebc67 100644
--- a/packages/backend/src/server/api/endpoints/ap/get.ts
+++ b/packages/backend/src/server/api/endpoints/ap/get.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import Resolver from '@/remote/activitypub/resolver';
-import { ApiError } from '../../error';
+import define from '../../define.js';
+import Resolver from '@/remote/activitypub/resolver.js';
+import { ApiError } from '../../error.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/ap/show.ts b/packages/backend/src/server/api/endpoints/ap/show.ts
index 8f71e84a15..7595c38e8a 100644
--- a/packages/backend/src/server/api/endpoints/ap/show.ts
+++ b/packages/backend/src/server/api/endpoints/ap/show.ts
@@ -1,17 +1,17 @@
-import define from '../../define';
-import config from '@/config/index';
-import { createPerson } from '@/remote/activitypub/models/person';
-import { createNote } from '@/remote/activitypub/models/note';
-import Resolver from '@/remote/activitypub/resolver';
-import { ApiError } from '../../error';
-import { extractDbHost } from '@/misc/convert-host';
-import { Users, Notes } from '@/models/index';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { isActor, isPost, getApId } from '@/remote/activitypub/type';
+import define from '../../define.js';
+import config from '@/config/index.js';
+import { createPerson } from '@/remote/activitypub/models/person.js';
+import { createNote } from '@/remote/activitypub/models/note.js';
+import Resolver from '@/remote/activitypub/resolver.js';
+import { ApiError } from '../../error.js';
+import { extractDbHost } from '@/misc/convert-host.js';
+import { Users, Notes } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { isActor, isPost, getApId } from '@/remote/activitypub/type.js';
 import ms from 'ms';
-import { SchemaType } from '@/misc/schema';
+import { SchemaType } from '@/misc/schema.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/app/create.ts b/packages/backend/src/server/api/endpoints/app/create.ts
index 6e8d2b2abd..e0cf8632fb 100644
--- a/packages/backend/src/server/api/endpoints/app/create.ts
+++ b/packages/backend/src/server/api/endpoints/app/create.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { Apps } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { unique } from '@/prelude/array';
-import { secureRndstr } from '@/misc/secure-rndstr';
+import define from '../../define.js';
+import { Apps } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { unique } from '@/prelude/array.js';
+import { secureRndstr } from '@/misc/secure-rndstr.js';
 
 export const meta = {
 	tags: ['app'],
diff --git a/packages/backend/src/server/api/endpoints/app/show.ts b/packages/backend/src/server/api/endpoints/app/show.ts
index 6d75294e84..54e714e193 100644
--- a/packages/backend/src/server/api/endpoints/app/show.ts
+++ b/packages/backend/src/server/api/endpoints/app/show.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Apps } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Apps } from '@/models/index.js';
 
 export const meta = {
 	tags: ['app'],
diff --git a/packages/backend/src/server/api/endpoints/auth/accept.ts b/packages/backend/src/server/api/endpoints/auth/accept.ts
index 775c26818b..0760eef52b 100644
--- a/packages/backend/src/server/api/endpoints/auth/accept.ts
+++ b/packages/backend/src/server/api/endpoints/auth/accept.ts
@@ -1,9 +1,9 @@
-import * as crypto from 'crypto';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { AuthSessions, AccessTokens, Apps } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { secureRndstr } from '@/misc/secure-rndstr';
+import * as crypto from 'node:crypto';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { AuthSessions, AccessTokens, Apps } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { secureRndstr } from '@/misc/secure-rndstr.js';
 
 export const meta = {
 	tags: ['auth'],
diff --git a/packages/backend/src/server/api/endpoints/auth/session/generate.ts b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
index ba0356431f..bd571327d2 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/generate.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
@@ -1,9 +1,9 @@
 import { v4 as uuid } from 'uuid';
-import config from '@/config/index';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { Apps, AuthSessions } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import config from '@/config/index.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { Apps, AuthSessions } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['auth'],
diff --git a/packages/backend/src/server/api/endpoints/auth/session/show.ts b/packages/backend/src/server/api/endpoints/auth/session/show.ts
index 701cc9237d..d40c9363c6 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/show.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/show.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { AuthSessions } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { AuthSessions } from '@/models/index.js';
 
 export const meta = {
 	tags: ['auth'],
diff --git a/packages/backend/src/server/api/endpoints/auth/session/userkey.ts b/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
index fa04610ce0..b699c6fa25 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { Apps, AuthSessions, AccessTokens, Users } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { Apps, AuthSessions, AccessTokens, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['auth'],
diff --git a/packages/backend/src/server/api/endpoints/blocking/create.ts b/packages/backend/src/server/api/endpoints/blocking/create.ts
index cf09ca00ba..c5e73c0131 100644
--- a/packages/backend/src/server/api/endpoints/blocking/create.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/create.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import create from '@/services/blocking/create';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Blockings, NoteWatchings, Users } from '@/models/index';
+import create from '@/services/blocking/create.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Blockings, NoteWatchings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/blocking/delete.ts b/packages/backend/src/server/api/endpoints/blocking/delete.ts
index 6e9fead113..a45547290c 100644
--- a/packages/backend/src/server/api/endpoints/blocking/delete.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/delete.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import deleteBlocking from '@/services/blocking/delete';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Blockings, Users } from '@/models/index';
+import deleteBlocking from '@/services/blocking/delete.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Blockings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/blocking/list.ts b/packages/backend/src/server/api/endpoints/blocking/list.ts
index bbae0fe661..29095ebe21 100644
--- a/packages/backend/src/server/api/endpoints/blocking/list.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/list.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Blockings } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Blockings } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/channels/create.ts b/packages/backend/src/server/api/endpoints/channels/create.ts
index 0491f7638f..16456b9c01 100644
--- a/packages/backend/src/server/api/endpoints/channels/create.ts
+++ b/packages/backend/src/server/api/endpoints/channels/create.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Channels, DriveFiles } from '@/models/index';
-import { Channel } from '@/models/entities/channel';
-import { genId } from '@/misc/gen-id';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Channels, DriveFiles } from '@/models/index.js';
+import { Channel } from '@/models/entities/channel.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/featured.ts b/packages/backend/src/server/api/endpoints/channels/featured.ts
index c1e4ba2dec..73980c0fad 100644
--- a/packages/backend/src/server/api/endpoints/channels/featured.ts
+++ b/packages/backend/src/server/api/endpoints/channels/featured.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Channels } from '@/models/index';
+import define from '../../define.js';
+import { Channels } from '@/models/index.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/follow.ts b/packages/backend/src/server/api/endpoints/channels/follow.ts
index c831db4b8c..4372c283cb 100644
--- a/packages/backend/src/server/api/endpoints/channels/follow.ts
+++ b/packages/backend/src/server/api/endpoints/channels/follow.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Channels, ChannelFollowings } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Channels, ChannelFollowings } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/followed.ts b/packages/backend/src/server/api/endpoints/channels/followed.ts
index 79b12514ff..e4aa4d1614 100644
--- a/packages/backend/src/server/api/endpoints/channels/followed.ts
+++ b/packages/backend/src/server/api/endpoints/channels/followed.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Channels, ChannelFollowings } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Channels, ChannelFollowings } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['channels', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/channels/owned.ts b/packages/backend/src/server/api/endpoints/channels/owned.ts
index c4c250fab1..ed7e41cac2 100644
--- a/packages/backend/src/server/api/endpoints/channels/owned.ts
+++ b/packages/backend/src/server/api/endpoints/channels/owned.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Channels } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Channels } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['channels', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/channels/show.ts b/packages/backend/src/server/api/endpoints/channels/show.ts
index 48d9fe29c1..ea4e013073 100644
--- a/packages/backend/src/server/api/endpoints/channels/show.ts
+++ b/packages/backend/src/server/api/endpoints/channels/show.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Channels } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Channels } from '@/models/index.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/timeline.ts b/packages/backend/src/server/api/endpoints/channels/timeline.ts
index 6f35fd966c..b57468d047 100644
--- a/packages/backend/src/server/api/endpoints/channels/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/channels/timeline.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Notes, Channels } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { activeUsersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Notes, Channels } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['notes', 'channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/unfollow.ts b/packages/backend/src/server/api/endpoints/channels/unfollow.ts
index e6524bf555..32beb24d6f 100644
--- a/packages/backend/src/server/api/endpoints/channels/unfollow.ts
+++ b/packages/backend/src/server/api/endpoints/channels/unfollow.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Channels, ChannelFollowings } from '@/models/index';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Channels, ChannelFollowings } from '@/models/index.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/channels/update.ts b/packages/backend/src/server/api/endpoints/channels/update.ts
index 3ee36d97ec..2f2b4aeeb2 100644
--- a/packages/backend/src/server/api/endpoints/channels/update.ts
+++ b/packages/backend/src/server/api/endpoints/channels/update.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Channels, DriveFiles } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Channels, DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['channels'],
diff --git a/packages/backend/src/server/api/endpoints/charts/active-users.ts b/packages/backend/src/server/api/endpoints/charts/active-users.ts
index dcb155b937..97f7885dbe 100644
--- a/packages/backend/src/server/api/endpoints/charts/active-users.ts
+++ b/packages/backend/src/server/api/endpoints/charts/active-users.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { activeUsersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { activeUsersChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/charts/ap-request.ts b/packages/backend/src/server/api/endpoints/charts/ap-request.ts
index cb8046236a..4477bfc987 100644
--- a/packages/backend/src/server/api/endpoints/charts/ap-request.ts
+++ b/packages/backend/src/server/api/endpoints/charts/ap-request.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { apRequestChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { apRequestChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts'],
diff --git a/packages/backend/src/server/api/endpoints/charts/drive.ts b/packages/backend/src/server/api/endpoints/charts/drive.ts
index 35ec62e671..fd6033392f 100644
--- a/packages/backend/src/server/api/endpoints/charts/drive.ts
+++ b/packages/backend/src/server/api/endpoints/charts/drive.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { driveChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { driveChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'drive'],
diff --git a/packages/backend/src/server/api/endpoints/charts/federation.ts b/packages/backend/src/server/api/endpoints/charts/federation.ts
index 07492cf6c2..f842f574ec 100644
--- a/packages/backend/src/server/api/endpoints/charts/federation.ts
+++ b/packages/backend/src/server/api/endpoints/charts/federation.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { federationChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { federationChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts'],
diff --git a/packages/backend/src/server/api/endpoints/charts/hashtag.ts b/packages/backend/src/server/api/endpoints/charts/hashtag.ts
index 537bb45bf1..01407defdd 100644
--- a/packages/backend/src/server/api/endpoints/charts/hashtag.ts
+++ b/packages/backend/src/server/api/endpoints/charts/hashtag.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { hashtagChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { hashtagChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'hashtags'],
diff --git a/packages/backend/src/server/api/endpoints/charts/instance.ts b/packages/backend/src/server/api/endpoints/charts/instance.ts
index cd5c044ad9..2d12951c6c 100644
--- a/packages/backend/src/server/api/endpoints/charts/instance.ts
+++ b/packages/backend/src/server/api/endpoints/charts/instance.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { instanceChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { instanceChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts'],
diff --git a/packages/backend/src/server/api/endpoints/charts/notes.ts b/packages/backend/src/server/api/endpoints/charts/notes.ts
index b30f0894c2..b6089f67ef 100644
--- a/packages/backend/src/server/api/endpoints/charts/notes.ts
+++ b/packages/backend/src/server/api/endpoints/charts/notes.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { notesChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { notesChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/charts/user/drive.ts b/packages/backend/src/server/api/endpoints/charts/user/drive.ts
index cc1aac5fea..e5db7131a8 100644
--- a/packages/backend/src/server/api/endpoints/charts/user/drive.ts
+++ b/packages/backend/src/server/api/endpoints/charts/user/drive.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { perUserDriveChart } from '@/services/chart/index';
+import define from '../../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { perUserDriveChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'drive', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/charts/user/following.ts b/packages/backend/src/server/api/endpoints/charts/user/following.ts
index 1b68bdca1c..9b72de745d 100644
--- a/packages/backend/src/server/api/endpoints/charts/user/following.ts
+++ b/packages/backend/src/server/api/endpoints/charts/user/following.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { perUserFollowingChart } from '@/services/chart/index';
+import define from '../../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { perUserFollowingChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'users', 'following'],
diff --git a/packages/backend/src/server/api/endpoints/charts/user/notes.ts b/packages/backend/src/server/api/endpoints/charts/user/notes.ts
index 55e6368187..7cc6cbf316 100644
--- a/packages/backend/src/server/api/endpoints/charts/user/notes.ts
+++ b/packages/backend/src/server/api/endpoints/charts/user/notes.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { perUserNotesChart } from '@/services/chart/index';
+import define from '../../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { perUserNotesChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'users', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/charts/user/reactions.ts b/packages/backend/src/server/api/endpoints/charts/user/reactions.ts
index f72424d2cf..5c58a7f152 100644
--- a/packages/backend/src/server/api/endpoints/charts/user/reactions.ts
+++ b/packages/backend/src/server/api/endpoints/charts/user/reactions.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { perUserReactionsChart } from '@/services/chart/index';
+import define from '../../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { perUserReactionsChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'users', 'reactions'],
diff --git a/packages/backend/src/server/api/endpoints/charts/users.ts b/packages/backend/src/server/api/endpoints/charts/users.ts
index 2dfdfefd78..49c762b2e4 100644
--- a/packages/backend/src/server/api/endpoints/charts/users.ts
+++ b/packages/backend/src/server/api/endpoints/charts/users.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getJsonSchema } from '@/services/chart/core';
-import { usersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { getJsonSchema } from '@/services/chart/core.js';
+import { usersChart } from '@/services/chart/index.js';
 
 export const meta = {
 	tags: ['charts', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/clips/add-note.ts b/packages/backend/src/server/api/endpoints/clips/add-note.ts
index 7700382bd3..c630302b98 100644
--- a/packages/backend/src/server/api/endpoints/clips/add-note.ts
+++ b/packages/backend/src/server/api/endpoints/clips/add-note.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ClipNotes, Clips } from '@/models/index';
-import { ApiError } from '../../error';
-import { genId } from '@/misc/gen-id';
-import { getNote } from '../../common/getters';
+import define from '../../define.js';
+import { ClipNotes, Clips } from '@/models/index.js';
+import { ApiError } from '../../error.js';
+import { genId } from '@/misc/gen-id.js';
+import { getNote } from '../../common/getters.js';
 
 export const meta = {
 	tags: ['account', 'notes', 'clips'],
diff --git a/packages/backend/src/server/api/endpoints/clips/create.ts b/packages/backend/src/server/api/endpoints/clips/create.ts
index 86164e69af..531847d15c 100644
--- a/packages/backend/src/server/api/endpoints/clips/create.ts
+++ b/packages/backend/src/server/api/endpoints/clips/create.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { genId } from '@/misc/gen-id';
-import { Clips } from '@/models/index';
+import define from '../../define.js';
+import { genId } from '@/misc/gen-id.js';
+import { Clips } from '@/models/index.js';
 
 export const meta = {
 	tags: ['clips'],
diff --git a/packages/backend/src/server/api/endpoints/clips/delete.ts b/packages/backend/src/server/api/endpoints/clips/delete.ts
index 7f712450ae..675db1d57f 100644
--- a/packages/backend/src/server/api/endpoints/clips/delete.ts
+++ b/packages/backend/src/server/api/endpoints/clips/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Clips } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Clips } from '@/models/index.js';
 
 export const meta = {
 	tags: ['clips'],
diff --git a/packages/backend/src/server/api/endpoints/clips/list.ts b/packages/backend/src/server/api/endpoints/clips/list.ts
index b8ee72af7c..1c955d64fc 100644
--- a/packages/backend/src/server/api/endpoints/clips/list.ts
+++ b/packages/backend/src/server/api/endpoints/clips/list.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Clips } from '@/models/index';
+import define from '../../define.js';
+import { Clips } from '@/models/index.js';
 
 export const meta = {
 	tags: ['clips', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/clips/notes.ts b/packages/backend/src/server/api/endpoints/clips/notes.ts
index 698b9d428d..0f0eac4c4b 100644
--- a/packages/backend/src/server/api/endpoints/clips/notes.ts
+++ b/packages/backend/src/server/api/endpoints/clips/notes.ts
@@ -1,10 +1,10 @@
-import define from '../../define';
-import { ClipNotes, Clips, Notes } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { ApiError } from '../../error';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { ClipNotes, Clips, Notes } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { ApiError } from '../../error.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['account', 'notes', 'clips'],
diff --git a/packages/backend/src/server/api/endpoints/clips/show.ts b/packages/backend/src/server/api/endpoints/clips/show.ts
index e1add3a0a6..0a3b25c94e 100644
--- a/packages/backend/src/server/api/endpoints/clips/show.ts
+++ b/packages/backend/src/server/api/endpoints/clips/show.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Clips } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Clips } from '@/models/index.js';
 
 export const meta = {
 	tags: ['clips', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/clips/update.ts b/packages/backend/src/server/api/endpoints/clips/update.ts
index 97134ac79a..0ac5ccd047 100644
--- a/packages/backend/src/server/api/endpoints/clips/update.ts
+++ b/packages/backend/src/server/api/endpoints/clips/update.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Clips } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Clips } from '@/models/index.js';
 
 export const meta = {
 	tags: ['clips'],
diff --git a/packages/backend/src/server/api/endpoints/drive.ts b/packages/backend/src/server/api/endpoints/drive.ts
index 5ff383f0f4..c599d96ca4 100644
--- a/packages/backend/src/server/api/endpoints/drive.ts
+++ b/packages/backend/src/server/api/endpoints/drive.ts
@@ -1,6 +1,6 @@
-import define from '../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { DriveFiles } from '@/models/index';
+import define from '../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files.ts b/packages/backend/src/server/api/endpoints/drive/files.ts
index 998d964bc3..40e6c16c9c 100644
--- a/packages/backend/src/server/api/endpoints/drive/files.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { DriveFiles } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { DriveFiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts b/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts
index 440dc856fd..3c68beee17 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/attached-notes.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFiles, Notes } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFiles, Notes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/check-existence.ts b/packages/backend/src/server/api/endpoints/drive/files/check-existence.ts
index 853723016e..7e5cb2498e 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/check-existence.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/check-existence.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/create.ts b/packages/backend/src/server/api/endpoints/drive/files/create.ts
index 89c6c99f36..b6a2cf7200 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/create.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/create.ts
@@ -1,10 +1,10 @@
 import ms from 'ms';
-import { addFile } from '@/services/drive/add-file';
-import define from '../../../define';
-import { apiLogger } from '../../../logger';
-import { ApiError } from '../../../error';
-import { DriveFiles } from '@/models/index';
-import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits';
+import { addFile } from '@/services/drive/add-file.js';
+import define from '../../../define.js';
+import { apiLogger } from '../../../logger.js';
+import { ApiError } from '../../../error.js';
+import { DriveFiles } from '@/models/index.js';
+import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/delete.ts b/packages/backend/src/server/api/endpoints/drive/files/delete.ts
index 8ae7e7effe..5f565a63fb 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/delete.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/delete.ts
@@ -1,8 +1,8 @@
-import { deleteFile } from '@/services/drive/delete-file';
-import { publishDriveStream } from '@/services/stream';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFiles } from '@/models/index';
+import { deleteFile } from '@/services/drive/delete-file.js';
+import { publishDriveStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/find-by-hash.ts b/packages/backend/src/server/api/endpoints/drive/files/find-by-hash.ts
index feb738be0d..e45ec633d3 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/find-by-hash.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/find-by-hash.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/find.ts b/packages/backend/src/server/api/endpoints/drive/files/find.ts
index 5419ba9196..974fc9fbad 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/find.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/find.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/drive/files/show.ts b/packages/backend/src/server/api/endpoints/drive/files/show.ts
index 932e692c4c..181365c7e6 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/show.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/show.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/update.ts b/packages/backend/src/server/api/endpoints/drive/files/update.ts
index 3972e56084..ab8e4aeeb2 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/update.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/update.ts
@@ -1,8 +1,8 @@
-import { publishDriveStream } from '@/services/stream';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFiles, DriveFolders } from '@/models/index';
-import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits';
+import { publishDriveStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFiles, DriveFolders } from '@/models/index.js';
+import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts b/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
index 5c688e883a..3bfecac802 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/upload-from-url.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import { uploadFromUrl } from '@/services/drive/upload-from-url';
-import define from '../../../define';
-import { DriveFiles } from '@/models/index';
-import { publishMainStream } from '@/services/stream';
-import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits';
+import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
+import define from '../../../define.js';
+import { DriveFiles } from '@/models/index.js';
+import { publishMainStream } from '@/services/stream.js';
+import { DB_MAX_IMAGE_COMMENT_LENGTH } from '@/misc/hard-limits.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders.ts b/packages/backend/src/server/api/endpoints/drive/folders.ts
index 4d8bc32dd7..d4d530ba9e 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { DriveFolders } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { DriveFolders } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/create.ts b/packages/backend/src/server/api/endpoints/drive/folders/create.ts
index 994c537f9f..4ae10f0621 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/create.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/create.ts
@@ -1,8 +1,8 @@
-import { publishDriveStream } from '@/services/stream';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFolders } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import { publishDriveStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFolders } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/delete.ts b/packages/backend/src/server/api/endpoints/drive/folders/delete.ts
index 58b9919595..4994615cc6 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/delete.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/delete.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { publishDriveStream } from '@/services/stream';
-import { ApiError } from '../../../error';
-import { DriveFolders, DriveFiles } from '@/models/index';
+import define from '../../../define.js';
+import { publishDriveStream } from '@/services/stream.js';
+import { ApiError } from '../../../error.js';
+import { DriveFolders, DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/find.ts b/packages/backend/src/server/api/endpoints/drive/folders/find.ts
index 333502f706..9bf0e3d61b 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/find.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/find.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { DriveFolders } from '@/models/index';
+import define from '../../../define.js';
+import { DriveFolders } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/show.ts b/packages/backend/src/server/api/endpoints/drive/folders/show.ts
index 4bbd2dcf11..f09816d57a 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/show.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/show.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFolders } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFolders } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/folders/update.ts b/packages/backend/src/server/api/endpoints/drive/folders/update.ts
index a4393d99b0..c020b243ef 100644
--- a/packages/backend/src/server/api/endpoints/drive/folders/update.ts
+++ b/packages/backend/src/server/api/endpoints/drive/folders/update.ts
@@ -1,7 +1,7 @@
-import { publishDriveStream } from '@/services/stream';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { DriveFolders } from '@/models/index';
+import { publishDriveStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { DriveFolders } from '@/models/index.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/drive/stream.ts b/packages/backend/src/server/api/endpoints/drive/stream.ts
index 9d5cb02c70..99e8d024fb 100644
--- a/packages/backend/src/server/api/endpoints/drive/stream.ts
+++ b/packages/backend/src/server/api/endpoints/drive/stream.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { DriveFiles } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { DriveFiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['drive'],
diff --git a/packages/backend/src/server/api/endpoints/email-address/available.ts b/packages/backend/src/server/api/endpoints/email-address/available.ts
index 8fee4ce509..07064ce9fa 100644
--- a/packages/backend/src/server/api/endpoints/email-address/available.ts
+++ b/packages/backend/src/server/api/endpoints/email-address/available.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { validateEmailForAccount } from '@/services/validate-email-for-account';
+import define from '../../define.js';
+import { validateEmailForAccount } from '@/services/validate-email-for-account.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/endpoint.ts b/packages/backend/src/server/api/endpoints/endpoint.ts
index 7c528114f2..9db140183c 100644
--- a/packages/backend/src/server/api/endpoints/endpoint.ts
+++ b/packages/backend/src/server/api/endpoints/endpoint.ts
@@ -1,5 +1,5 @@
-import define from '../define';
-import endpoints from '../endpoints';
+import define from '../define.js';
+import endpoints from '../endpoints.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/endpoints.ts b/packages/backend/src/server/api/endpoints/endpoints.ts
index ef6efc6fb3..b20da96eb3 100644
--- a/packages/backend/src/server/api/endpoints/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints/endpoints.ts
@@ -1,5 +1,5 @@
-import define from '../define';
-import endpoints from '../endpoints';
+import define from '../define.js';
+import endpoints from '../endpoints.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/export-custom-emojis.ts b/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
index 3bffbc82bd..bc8d2e2ac0 100644
--- a/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
+++ b/packages/backend/src/server/api/endpoints/export-custom-emojis.ts
@@ -1,5 +1,5 @@
-import define from '../define';
-import { createExportCustomEmojisJob } from '@/queue/index';
+import define from '../define.js';
+import { createExportCustomEmojisJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/federation/followers.ts b/packages/backend/src/server/api/endpoints/federation/followers.ts
index b716552322..7b1197d1e5 100644
--- a/packages/backend/src/server/api/endpoints/federation/followers.ts
+++ b/packages/backend/src/server/api/endpoints/federation/followers.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Followings } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Followings } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/federation/following.ts b/packages/backend/src/server/api/endpoints/federation/following.ts
index 373c432be5..ed1f142d88 100644
--- a/packages/backend/src/server/api/endpoints/federation/following.ts
+++ b/packages/backend/src/server/api/endpoints/federation/following.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Followings } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Followings } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/federation/instances.ts b/packages/backend/src/server/api/endpoints/federation/instances.ts
index fb25199c73..70fef051ba 100644
--- a/packages/backend/src/server/api/endpoints/federation/instances.ts
+++ b/packages/backend/src/server/api/endpoints/federation/instances.ts
@@ -1,7 +1,7 @@
-import config from '@/config/index';
-import define from '../../define';
-import { Instances } from '@/models/index';
-import { fetchMeta } from '@/misc/fetch-meta';
+import config from '@/config/index.js';
+import define from '../../define.js';
+import { Instances } from '@/models/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/federation/show-instance.ts b/packages/backend/src/server/api/endpoints/federation/show-instance.ts
index 590f8a7e86..5bfe43fc9c 100644
--- a/packages/backend/src/server/api/endpoints/federation/show-instance.ts
+++ b/packages/backend/src/server/api/endpoints/federation/show-instance.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Instances } from '@/models/index';
-import { toPuny } from '@/misc/convert-host';
+import define from '../../define.js';
+import { Instances } from '@/models/index.js';
+import { toPuny } from '@/misc/convert-host.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/federation/update-remote-user.ts b/packages/backend/src/server/api/endpoints/federation/update-remote-user.ts
index 59661ea7c0..409cc7695e 100644
--- a/packages/backend/src/server/api/endpoints/federation/update-remote-user.ts
+++ b/packages/backend/src/server/api/endpoints/federation/update-remote-user.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { getRemoteUser } from '../../common/getters';
-import { updatePerson } from '@/remote/activitypub/models/person';
+import define from '../../define.js';
+import { getRemoteUser } from '../../common/getters.js';
+import { updatePerson } from '@/remote/activitypub/models/person.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/federation/users.ts b/packages/backend/src/server/api/endpoints/federation/users.ts
index f35471f062..65ad9f88d3 100644
--- a/packages/backend/src/server/api/endpoints/federation/users.ts
+++ b/packages/backend/src/server/api/endpoints/federation/users.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Users } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['federation'],
diff --git a/packages/backend/src/server/api/endpoints/following/create.ts b/packages/backend/src/server/api/endpoints/following/create.ts
index a18c44a1d8..8758a64a39 100644
--- a/packages/backend/src/server/api/endpoints/following/create.ts
+++ b/packages/backend/src/server/api/endpoints/following/create.ts
@@ -1,10 +1,10 @@
 import ms from 'ms';
-import create from '@/services/following/create';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Followings, Users } from '@/models/index';
-import { IdentifiableError } from '@/misc/identifiable-error';
+import create from '@/services/following/create.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Followings, Users } from '@/models/index.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
 
 export const meta = {
 	tags: ['following', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/following/delete.ts b/packages/backend/src/server/api/endpoints/following/delete.ts
index ec32c2c888..47efc59b81 100644
--- a/packages/backend/src/server/api/endpoints/following/delete.ts
+++ b/packages/backend/src/server/api/endpoints/following/delete.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import deleteFollowing from '@/services/following/delete';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Followings, Users } from '@/models/index';
+import deleteFollowing from '@/services/following/delete.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Followings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['following', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/following/invalidate.ts b/packages/backend/src/server/api/endpoints/following/invalidate.ts
index 137d366fce..24d8256ca6 100644
--- a/packages/backend/src/server/api/endpoints/following/invalidate.ts
+++ b/packages/backend/src/server/api/endpoints/following/invalidate.ts
@@ -1,9 +1,9 @@
-import * as ms from 'ms';
-import deleteFollowing from '@/services/following/delete';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Followings, Users } from '@/models/index';
+import ms from 'ms';
+import deleteFollowing from '@/services/following/delete.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Followings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['following', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/following/requests/accept.ts b/packages/backend/src/server/api/endpoints/following/requests/accept.ts
index adbbb3404a..e5df55375e 100644
--- a/packages/backend/src/server/api/endpoints/following/requests/accept.ts
+++ b/packages/backend/src/server/api/endpoints/following/requests/accept.ts
@@ -1,7 +1,7 @@
-import acceptFollowRequest from '@/services/following/requests/accept';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
+import acceptFollowRequest from '@/services/following/requests/accept.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
 
 export const meta = {
 	tags: ['following', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/following/requests/cancel.ts b/packages/backend/src/server/api/endpoints/following/requests/cancel.ts
index 5e949af9de..80d37fb075 100644
--- a/packages/backend/src/server/api/endpoints/following/requests/cancel.ts
+++ b/packages/backend/src/server/api/endpoints/following/requests/cancel.ts
@@ -1,9 +1,9 @@
-import cancelFollowRequest from '@/services/following/requests/cancel';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { Users } from '@/models/index';
-import { IdentifiableError } from '@/misc/identifiable-error';
+import cancelFollowRequest from '@/services/following/requests/cancel.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { Users } from '@/models/index.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
 
 export const meta = {
 	tags: ['following', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/following/requests/list.ts b/packages/backend/src/server/api/endpoints/following/requests/list.ts
index 563223fcae..3b60b89b3c 100644
--- a/packages/backend/src/server/api/endpoints/following/requests/list.ts
+++ b/packages/backend/src/server/api/endpoints/following/requests/list.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { FollowRequests } from '@/models/index';
+import define from '../../../define.js';
+import { FollowRequests } from '@/models/index.js';
 
 export const meta = {
 	tags: ['following', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/following/requests/reject.ts b/packages/backend/src/server/api/endpoints/following/requests/reject.ts
index f1502eba13..cebe604284 100644
--- a/packages/backend/src/server/api/endpoints/following/requests/reject.ts
+++ b/packages/backend/src/server/api/endpoints/following/requests/reject.ts
@@ -1,7 +1,7 @@
-import { rejectFollowRequest } from '@/services/following/reject';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
+import { rejectFollowRequest } from '@/services/following/reject.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
 
 export const meta = {
 	tags: ['following', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/featured.ts b/packages/backend/src/server/api/endpoints/gallery/featured.ts
index ad994c386a..e6acd36911 100644
--- a/packages/backend/src/server/api/endpoints/gallery/featured.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/featured.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { GalleryPosts } from '@/models/index';
+import define from '../../define.js';
+import { GalleryPosts } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/popular.ts b/packages/backend/src/server/api/endpoints/gallery/popular.ts
index 9e5019ddef..c4c8982fcc 100644
--- a/packages/backend/src/server/api/endpoints/gallery/popular.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/popular.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { GalleryPosts } from '@/models/index';
+import define from '../../define.js';
+import { GalleryPosts } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts.ts b/packages/backend/src/server/api/endpoints/gallery/posts.ts
index 40c9efaf51..428ba9cc71 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { GalleryPosts } from '@/models/index';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { GalleryPosts } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
index c963dc86d1..eb6c0f3eb1 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/create.ts
@@ -1,10 +1,10 @@
 import ms from 'ms';
-import define from '../../../define';
-import { DriveFiles, GalleryPosts } from '@/models/index';
-import { genId } from '../../../../../misc/gen-id';
-import { GalleryPost } from '@/models/entities/gallery-post';
-import { ApiError } from '../../../error';
-import { DriveFile } from '@/models/entities/drive-file';
+import define from '../../../define.js';
+import { DriveFiles, GalleryPosts } from '@/models/index.js';
+import { genId } from '../../../../../misc/gen-id.js';
+import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { ApiError } from '../../../error.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts b/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
index 7fafc9288a..f8bf785ee6 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { GalleryPosts } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { GalleryPosts } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
index ca6c06cf9e..d154bfc3c6 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/like.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { GalleryPosts, GalleryLikes } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { GalleryPosts, GalleryLikes } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/show.ts b/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
index 0f8f3a6068..5b4594070c 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/show.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { GalleryPosts } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { GalleryPosts } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts b/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
index 30ccaf167e..b00008a864 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/unlike.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { GalleryPosts, GalleryLikes } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { GalleryPosts, GalleryLikes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
index 2b2e26aa5d..123794d08c 100644
--- a/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
+++ b/packages/backend/src/server/api/endpoints/gallery/posts/update.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import define from '../../../define';
-import { DriveFiles, GalleryPosts } from '@/models/index';
-import { GalleryPost } from '@/models/entities/gallery-post';
-import { ApiError } from '../../../error';
-import { DriveFile } from '@/models/entities/drive-file';
+import define from '../../../define.js';
+import { DriveFiles, GalleryPosts } from '@/models/index.js';
+import { GalleryPost } from '@/models/entities/gallery-post.js';
+import { ApiError } from '../../../error.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
 
 export const meta = {
 	tags: ['gallery'],
diff --git a/packages/backend/src/server/api/endpoints/get-online-users-count.ts b/packages/backend/src/server/api/endpoints/get-online-users-count.ts
index 374d819ce7..80a2334cfa 100644
--- a/packages/backend/src/server/api/endpoints/get-online-users-count.ts
+++ b/packages/backend/src/server/api/endpoints/get-online-users-count.ts
@@ -1,7 +1,7 @@
-import { USER_ONLINE_THRESHOLD } from '@/const';
-import { Users } from '@/models/index';
+import { USER_ONLINE_THRESHOLD } from '@/const.js';
+import { Users } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import define from '../define';
+import define from '../define.js';
 
 export const meta = {
 	tags: ['meta'],
diff --git a/packages/backend/src/server/api/endpoints/hashtags/list.ts b/packages/backend/src/server/api/endpoints/hashtags/list.ts
index 3bd5305bd4..50e36386cf 100644
--- a/packages/backend/src/server/api/endpoints/hashtags/list.ts
+++ b/packages/backend/src/server/api/endpoints/hashtags/list.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Hashtags } from '@/models/index';
+import define from '../../define.js';
+import { Hashtags } from '@/models/index.js';
 
 export const meta = {
 	tags: ['hashtags'],
diff --git a/packages/backend/src/server/api/endpoints/hashtags/search.ts b/packages/backend/src/server/api/endpoints/hashtags/search.ts
index 2af6b6d77c..c289844775 100644
--- a/packages/backend/src/server/api/endpoints/hashtags/search.ts
+++ b/packages/backend/src/server/api/endpoints/hashtags/search.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Hashtags } from '@/models/index';
+import define from '../../define.js';
+import { Hashtags } from '@/models/index.js';
 
 export const meta = {
 	tags: ['hashtags'],
diff --git a/packages/backend/src/server/api/endpoints/hashtags/show.ts b/packages/backend/src/server/api/endpoints/hashtags/show.ts
index 0770882141..6e6afa4f13 100644
--- a/packages/backend/src/server/api/endpoints/hashtags/show.ts
+++ b/packages/backend/src/server/api/endpoints/hashtags/show.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Hashtags } from '@/models/index';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Hashtags } from '@/models/index.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
 
 export const meta = {
 	tags: ['hashtags'],
diff --git a/packages/backend/src/server/api/endpoints/hashtags/trend.ts b/packages/backend/src/server/api/endpoints/hashtags/trend.ts
index 6da5b90b28..9cdbc8941c 100644
--- a/packages/backend/src/server/api/endpoints/hashtags/trend.ts
+++ b/packages/backend/src/server/api/endpoints/hashtags/trend.ts
@@ -1,10 +1,10 @@
 import { Brackets } from 'typeorm';
-import define from '../../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Notes } from '@/models/index';
-import { Note } from '@/models/entities/note';
-import { safeForSql } from '@/misc/safe-for-sql';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
+import define from '../../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Notes } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
+import { safeForSql } from '@/misc/safe-for-sql.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
 
 /*
 トレンドに載るためには「『直近a分間のユニーク投稿数が今からa分前~今からb分前の間のユニーク投稿数のn倍以上』のハッシュタグの上位5位以内に入る」ことが必要
diff --git a/packages/backend/src/server/api/endpoints/hashtags/users.ts b/packages/backend/src/server/api/endpoints/hashtags/users.ts
index ff06d925dd..a5df21a7e3 100644
--- a/packages/backend/src/server/api/endpoints/hashtags/users.ts
+++ b/packages/backend/src/server/api/endpoints/hashtags/users.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Users } from '@/models/index';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/i.ts b/packages/backend/src/server/api/endpoints/i.ts
index f9c58c2479..5b1ad2b098 100644
--- a/packages/backend/src/server/api/endpoints/i.ts
+++ b/packages/backend/src/server/api/endpoints/i.ts
@@ -1,5 +1,5 @@
-import define from '../define';
-import { Users } from '@/models/index';
+import define from '../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/done.ts b/packages/backend/src/server/api/endpoints/i/2fa/done.ts
index 1646b7bd89..70478430db 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/done.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/done.ts
@@ -1,6 +1,6 @@
 import * as speakeasy from 'speakeasy';
-import define from '../../../define';
-import { UserProfiles } from '@/models/index';
+import define from '../../../define.js';
+import { UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
index 52a0afcbfd..f33237c8bf 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
@@ -1,16 +1,16 @@
-import * as bcrypt from 'bcryptjs';
-import { promisify } from 'util';
+import bcrypt from 'bcryptjs';
+import { promisify } from 'node:util';
 import * as cbor from 'cbor';
-import define from '../../../define';
+import define from '../../../define.js';
 import {
 	UserProfiles,
 	UserSecurityKeys,
 	AttestationChallenges,
 	Users,
-} from '@/models/index';
-import config from '@/config/index';
-import { procedures, hash } from '../../../2fa';
-import { publishMainStream } from '@/services/stream';
+} from '@/models/index.js';
+import config from '@/config/index.js';
+import { procedures, hash } from '../../../2fa.js';
+import { publishMainStream } from '@/services/stream.js';
 
 const cborDecodeFirst = promisify(cbor.decodeFirst) as any;
 const rpIdHashReal = hash(Buffer.from(config.hostname, 'utf-8'));
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts b/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
index d9d2ec66c1..4bfa24f97f 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/password-less.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { UserProfiles } from '@/models/index';
+import define from '../../../define.js';
+import { UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
index 86fc4fdffb..0c4c99271e 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/register-key.ts
@@ -1,10 +1,10 @@
-import * as bcrypt from 'bcryptjs';
-import define from '../../../define';
-import { UserProfiles, AttestationChallenges } from '@/models/index';
-import { promisify } from 'util';
-import * as crypto from 'crypto';
-import { genId } from '@/misc/gen-id';
-import { hash } from '../../../2fa';
+import bcrypt from 'bcryptjs';
+import define from '../../../define.js';
+import { UserProfiles, AttestationChallenges } from '@/models/index.js';
+import { promisify } from 'node:util';
+import * as crypto from 'node:crypto';
+import { genId } from '@/misc/gen-id.js';
+import { hash } from '../../../2fa.js';
 
 const randomBytes = promisify(crypto.randomBytes);
 
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/register.ts b/packages/backend/src/server/api/endpoints/i/2fa/register.ts
index e550698abb..7951e393b8 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/register.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/register.ts
@@ -1,9 +1,9 @@
-import * as bcrypt from 'bcryptjs';
+import bcrypt from 'bcryptjs';
 import * as speakeasy from 'speakeasy';
 import * as QRCode from 'qrcode';
-import config from '@/config/index';
-import define from '../../../define';
-import { UserProfiles } from '@/models/index';
+import config from '@/config/index.js';
+import define from '../../../define.js';
+import { UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts b/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
index 0469912340..2b69b1f8c3 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/remove-key.ts
@@ -1,7 +1,7 @@
-import * as bcrypt from 'bcryptjs';
-import define from '../../../define';
-import { UserProfiles, UserSecurityKeys, Users } from '@/models/index';
-import { publishMainStream } from '@/services/stream';
+import bcrypt from 'bcryptjs';
+import define from '../../../define.js';
+import { UserProfiles, UserSecurityKeys, Users } from '@/models/index.js';
+import { publishMainStream } from '@/services/stream.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts b/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
index c1ca445825..c5633f68b1 100644
--- a/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
+++ b/packages/backend/src/server/api/endpoints/i/2fa/unregister.ts
@@ -1,6 +1,6 @@
-import * as bcrypt from 'bcryptjs';
-import define from '../../../define';
-import { UserProfiles } from '@/models/index';
+import bcrypt from 'bcryptjs';
+import define from '../../../define.js';
+import { UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/apps.ts b/packages/backend/src/server/api/endpoints/i/apps.ts
index 0fe3db2d9f..eca9558847 100644
--- a/packages/backend/src/server/api/endpoints/i/apps.ts
+++ b/packages/backend/src/server/api/endpoints/i/apps.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { AccessTokens } from '@/models/index';
+import define from '../../define.js';
+import { AccessTokens } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/authorized-apps.ts b/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
index e2f5ceb7e1..3301808e75 100644
--- a/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
+++ b/packages/backend/src/server/api/endpoints/i/authorized-apps.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { AccessTokens, Apps } from '@/models/index';
+import define from '../../define.js';
+import { AccessTokens, Apps } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/change-password.ts b/packages/backend/src/server/api/endpoints/i/change-password.ts
index e68d18b86d..16509d2dcf 100644
--- a/packages/backend/src/server/api/endpoints/i/change-password.ts
+++ b/packages/backend/src/server/api/endpoints/i/change-password.ts
@@ -1,6 +1,6 @@
-import * as bcrypt from 'bcryptjs';
-import define from '../../define';
-import { UserProfiles } from '@/models/index';
+import bcrypt from 'bcryptjs';
+import define from '../../define.js';
+import { UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/delete-account.ts b/packages/backend/src/server/api/endpoints/i/delete-account.ts
index 188d2257aa..8cb6b6a631 100644
--- a/packages/backend/src/server/api/endpoints/i/delete-account.ts
+++ b/packages/backend/src/server/api/endpoints/i/delete-account.ts
@@ -1,9 +1,9 @@
-import * as bcrypt from 'bcryptjs';
-import define from '../../define';
-import { UserProfiles, Users } from '@/models/index';
-import { doPostSuspend } from '@/services/suspend-user';
-import { publishUserEvent } from '@/services/stream';
-import { createDeleteAccountJob } from '@/queue';
+import bcrypt from 'bcryptjs';
+import define from '../../define.js';
+import { UserProfiles, Users } from '@/models/index.js';
+import { doPostSuspend } from '@/services/suspend-user.js';
+import { publishUserEvent } from '@/services/stream.js';
+import { createDeleteAccountJob } from '@/queue/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/export-blocking.ts b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
index 808b546bdb..aed4c2e0a3 100644
--- a/packages/backend/src/server/api/endpoints/i/export-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-blocking.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createExportBlockingJob } from '@/queue/index';
+import define from '../../define.js';
+import { createExportBlockingJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/export-following.ts b/packages/backend/src/server/api/endpoints/i/export-following.ts
index 10f8ee9ab2..058d77b3c2 100644
--- a/packages/backend/src/server/api/endpoints/i/export-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-following.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createExportFollowingJob } from '@/queue/index';
+import define from '../../define.js';
+import { createExportFollowingJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/export-mute.ts b/packages/backend/src/server/api/endpoints/i/export-mute.ts
index ab39508534..c0216fac0c 100644
--- a/packages/backend/src/server/api/endpoints/i/export-mute.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-mute.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createExportMuteJob } from '@/queue/index';
+import define from '../../define.js';
+import { createExportMuteJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/export-notes.ts b/packages/backend/src/server/api/endpoints/i/export-notes.ts
index 770444d68b..4b85a45554 100644
--- a/packages/backend/src/server/api/endpoints/i/export-notes.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-notes.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createExportNotesJob } from '@/queue/index';
+import define from '../../define.js';
+import { createExportNotesJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
index c0d9d924bd..fa5c1f5e5a 100644
--- a/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/export-user-lists.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createExportUserListsJob } from '@/queue/index';
+import define from '../../define.js';
+import { createExportUserListsJob } from '@/queue/index.js';
 import ms from 'ms';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/favorites.ts b/packages/backend/src/server/api/endpoints/i/favorites.ts
index d6c12582d0..3c420e4d0f 100644
--- a/packages/backend/src/server/api/endpoints/i/favorites.ts
+++ b/packages/backend/src/server/api/endpoints/i/favorites.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { NoteFavorites } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { NoteFavorites } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'notes', 'favorites'],
diff --git a/packages/backend/src/server/api/endpoints/i/gallery/likes.ts b/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
index 173a502622..a38383f30e 100644
--- a/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
+++ b/packages/backend/src/server/api/endpoints/i/gallery/likes.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { GalleryLikes } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { GalleryLikes } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'gallery'],
diff --git a/packages/backend/src/server/api/endpoints/i/gallery/posts.ts b/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
index 31e9636f84..b4edb5f73d 100644
--- a/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
+++ b/packages/backend/src/server/api/endpoints/i/gallery/posts.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { GalleryPosts } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { GalleryPosts } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'gallery'],
diff --git a/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts b/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
index c760dd0e23..bc3e0aff47 100644
--- a/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
+++ b/packages/backend/src/server/api/endpoints/i/get-word-muted-notes-count.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { MutedNotes } from '@/models/index';
+import define from '../../define.js';
+import { MutedNotes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/i/import-blocking.ts b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
index e9cf6e562e..c70704f9a8 100644
--- a/packages/backend/src/server/api/endpoints/i/import-blocking.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-blocking.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { createImportBlockingJob } from '@/queue/index';
+import define from '../../define.js';
+import { createImportBlockingJob } from '@/queue/index.js';
 import ms from 'ms';
-import { ApiError } from '../../error';
-import { DriveFiles } from '@/models/index';
+import { ApiError } from '../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-following.ts b/packages/backend/src/server/api/endpoints/i/import-following.ts
index d9c831daf8..7e9175cbf8 100644
--- a/packages/backend/src/server/api/endpoints/i/import-following.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-following.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { createImportFollowingJob } from '@/queue/index';
+import define from '../../define.js';
+import { createImportFollowingJob } from '@/queue/index.js';
 import ms from 'ms';
-import { ApiError } from '../../error';
-import { DriveFiles } from '@/models/index';
+import { ApiError } from '../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-muting.ts b/packages/backend/src/server/api/endpoints/i/import-muting.ts
index ac61a6c852..abbf07212e 100644
--- a/packages/backend/src/server/api/endpoints/i/import-muting.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-muting.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { createImportMutingJob } from '@/queue/index';
+import define from '../../define.js';
+import { createImportMutingJob } from '@/queue/index.js';
 import ms from 'ms';
-import { ApiError } from '../../error';
-import { DriveFiles } from '@/models/index';
+import { ApiError } from '../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
index 68f2b377a9..be162817f1 100644
--- a/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
+++ b/packages/backend/src/server/api/endpoints/i/import-user-lists.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { createImportUserListsJob } from '@/queue/index';
+import define from '../../define.js';
+import { createImportUserListsJob } from '@/queue/index.js';
 import ms from 'ms';
-import { ApiError } from '../../error';
-import { DriveFiles } from '@/models/index';
+import { ApiError } from '../../error.js';
+import { DriveFiles } from '@/models/index.js';
 
 export const meta = {
 	secure: true,
diff --git a/packages/backend/src/server/api/endpoints/i/notifications.ts b/packages/backend/src/server/api/endpoints/i/notifications.ts
index cecaa8ac44..c6291211e4 100644
--- a/packages/backend/src/server/api/endpoints/i/notifications.ts
+++ b/packages/backend/src/server/api/endpoints/i/notifications.ts
@@ -1,10 +1,10 @@
-import { readNotification } from '../../common/read-notification';
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateMutedInstanceNotificationQuery } from '../../common/generate-muted-instance-query';
-import { Notifications, Followings, Mutings, Users } from '@/models/index';
-import { notificationTypes } from '@/types';
-import read from '@/services/note/read';
+import { readNotification } from '../../common/read-notification.js';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateMutedInstanceNotificationQuery } from '../../common/generate-muted-instance-query.js';
+import { Notifications, Followings, Mutings, Users } from '@/models/index.js';
+import { notificationTypes } from '@/types.js';
+import read from '@/services/note/read.js';
 import { Brackets } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/i/page-likes.ts b/packages/backend/src/server/api/endpoints/i/page-likes.ts
index d3b68acdc5..71e326e2f0 100644
--- a/packages/backend/src/server/api/endpoints/i/page-likes.ts
+++ b/packages/backend/src/server/api/endpoints/i/page-likes.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { PageLikes } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { PageLikes } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'pages'],
diff --git a/packages/backend/src/server/api/endpoints/i/pages.ts b/packages/backend/src/server/api/endpoints/i/pages.ts
index 09cff4a0fb..f28aed3fd4 100644
--- a/packages/backend/src/server/api/endpoints/i/pages.ts
+++ b/packages/backend/src/server/api/endpoints/i/pages.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Pages } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Pages } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'pages'],
diff --git a/packages/backend/src/server/api/endpoints/i/pin.ts b/packages/backend/src/server/api/endpoints/i/pin.ts
index a4dd64564a..67b7026be1 100644
--- a/packages/backend/src/server/api/endpoints/i/pin.ts
+++ b/packages/backend/src/server/api/endpoints/i/pin.ts
@@ -1,7 +1,7 @@
-import { addPinned } from '@/services/i/pin';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Users } from '@/models/index';
+import { addPinned } from '@/services/i/pin.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts b/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
index e6eb8d7ef0..2e291a34a0 100644
--- a/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-all-messaging-messages.ts
@@ -1,6 +1,6 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../define';
-import { MessagingMessages, UserGroupJoinings } from '@/models/index';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../define.js';
+import { MessagingMessages, UserGroupJoinings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account', 'messaging'],
diff --git a/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts b/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
index 12038999ae..49f3deb331 100644
--- a/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-all-unread-notes.ts
@@ -1,6 +1,6 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../define';
-import { NoteUnreads } from '@/models/index';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../define.js';
+import { NoteUnreads } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/i/read-announcement.ts b/packages/backend/src/server/api/endpoints/i/read-announcement.ts
index 2d8c723e4e..647fa77fa4 100644
--- a/packages/backend/src/server/api/endpoints/i/read-announcement.ts
+++ b/packages/backend/src/server/api/endpoints/i/read-announcement.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { genId } from '@/misc/gen-id';
-import { AnnouncementReads, Announcements, Users } from '@/models/index';
-import { publishMainStream } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { genId } from '@/misc/gen-id.js';
+import { AnnouncementReads, Announcements, Users } from '@/models/index.js';
+import { publishMainStream } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
index 1462b902c4..771c98b212 100644
--- a/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
+++ b/packages/backend/src/server/api/endpoints/i/regenerate-token.ts
@@ -1,8 +1,8 @@
-import * as bcrypt from 'bcryptjs';
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import generateUserToken from '../../common/generate-native-user-token';
-import define from '../../define';
-import { Users, UserProfiles } from '@/models/index';
+import bcrypt from 'bcryptjs';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import generateUserToken from '../../common/generate-native-user-token.js';
+import define from '../../define.js';
+import { Users, UserProfiles } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get-all.ts b/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
index c371da87d8..d0b16dbc48 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get-all.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts b/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
index bd243946b0..cc5d5a8c6f 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get-detail.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/get.ts b/packages/backend/src/server/api/endpoints/i/registry/get.ts
index 2bc6975bb3..a79319744c 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/get.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/get.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts b/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
index 78bb9dd348..ac209c06a6 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/keys-with-type.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/keys.ts b/packages/backend/src/server/api/endpoints/i/registry/keys.ts
index 5f627125d5..5ea1a9d344 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/keys.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/keys.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/remove.ts b/packages/backend/src/server/api/endpoints/i/registry/remove.ts
index 6a005d10d4..92473654c6 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/remove.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/remove.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/scopes.ts b/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
index 09de7125c9..de4b313e25 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/scopes.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/registry/set.ts b/packages/backend/src/server/api/endpoints/i/registry/set.ts
index 28d9555b1c..d380b428a3 100644
--- a/packages/backend/src/server/api/endpoints/i/registry/set.ts
+++ b/packages/backend/src/server/api/endpoints/i/registry/set.ts
@@ -1,7 +1,7 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../../define';
-import { RegistryItems } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { RegistryItems } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/revoke-token.ts b/packages/backend/src/server/api/endpoints/i/revoke-token.ts
index b889e795be..b957fd0796 100644
--- a/packages/backend/src/server/api/endpoints/i/revoke-token.ts
+++ b/packages/backend/src/server/api/endpoints/i/revoke-token.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { AccessTokens } from '@/models/index';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import { AccessTokens } from '@/models/index.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/signin-history.ts b/packages/backend/src/server/api/endpoints/i/signin-history.ts
index f7a98a2332..ca37411662 100644
--- a/packages/backend/src/server/api/endpoints/i/signin-history.ts
+++ b/packages/backend/src/server/api/endpoints/i/signin-history.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Signins } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Signins } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/unpin.ts b/packages/backend/src/server/api/endpoints/i/unpin.ts
index 5ab1e95c59..9912689da5 100644
--- a/packages/backend/src/server/api/endpoints/i/unpin.ts
+++ b/packages/backend/src/server/api/endpoints/i/unpin.ts
@@ -1,7 +1,7 @@
-import { removePinned } from '@/services/i/pin';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Users } from '@/models/index';
+import { removePinned } from '@/services/i/pin.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/i/update-email.ts b/packages/backend/src/server/api/endpoints/i/update-email.ts
index 21a2081836..389ff1b81d 100644
--- a/packages/backend/src/server/api/endpoints/i/update-email.ts
+++ b/packages/backend/src/server/api/endpoints/i/update-email.ts
@@ -1,13 +1,13 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../define';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../define.js';
 import rndstr from 'rndstr';
-import config from '@/config/index';
+import config from '@/config/index.js';
 import ms from 'ms';
-import * as bcrypt from 'bcryptjs';
-import { Users, UserProfiles } from '@/models/index';
-import { sendEmail } from '@/services/send-email';
-import { ApiError } from '../../error';
-import { validateEmailForAccount } from '@/services/validate-email-for-account';
+import bcrypt from 'bcryptjs';
+import { Users, UserProfiles } from '@/models/index.js';
+import { sendEmail } from '@/services/send-email.js';
+import { ApiError } from '../../error.js';
+import { validateEmailForAccount } from '@/services/validate-email-for-account.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index 2ea6714068..d8dff4f49f 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -1,19 +1,19 @@
-const RE2 = require('re2');
+import RE2 from 're2';
 import * as mfm from 'mfm-js';
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import acceptAllFollowRequests from '@/services/following/requests/accept-all';
-import { publishToFollowers } from '@/services/i/update';
-import define from '../../define';
-import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm';
-import { extractHashtags } from '@/misc/extract-hashtags';
-import { updateUsertags } from '@/services/update-hashtag';
-import { ApiError } from '../../error';
-import { Users, DriveFiles, UserProfiles, Pages } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { UserProfile } from '@/models/entities/user-profile';
-import { notificationTypes } from '@/types';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
-import { langmap } from '@/misc/langmap';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import acceptAllFollowRequests from '@/services/following/requests/accept-all.js';
+import { publishToFollowers } from '@/services/i/update.js';
+import define from '../../define.js';
+import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm.js';
+import { extractHashtags } from '@/misc/extract-hashtags.js';
+import { updateUsertags } from '@/services/update-hashtag.js';
+import { ApiError } from '../../error.js';
+import { Users, DriveFiles, UserProfiles, Pages } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
+import { notificationTypes } from '@/types.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
+import { langmap } from '@/misc/langmap.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/i/user-group-invites.ts b/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
index a026d8d669..1d7e4a16b3 100644
--- a/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
+++ b/packages/backend/src/server/api/endpoints/i/user-group-invites.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { UserGroupInvitations } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { UserGroupInvitations } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['account', 'groups'],
diff --git a/packages/backend/src/server/api/endpoints/messaging/history.ts b/packages/backend/src/server/api/endpoints/messaging/history.ts
index cb27f37fbb..14de4e1028 100644
--- a/packages/backend/src/server/api/endpoints/messaging/history.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/history.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { MessagingMessages, Mutings, UserGroupJoinings } from '@/models/index';
+import define from '../../define.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { MessagingMessages, Mutings, UserGroupJoinings } from '@/models/index.js';
 import { Brackets } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/messaging/messages.ts b/packages/backend/src/server/api/endpoints/messaging/messages.ts
index a21f8d8fc1..49ace21600 100644
--- a/packages/backend/src/server/api/endpoints/messaging/messages.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/messages.ts
@@ -1,10 +1,10 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { MessagingMessages, UserGroups, UserGroupJoinings, Users } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { MessagingMessages, UserGroups, UserGroupJoinings, Users } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 import { Brackets } from 'typeorm';
-import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivity } from '../../common/read-messaging-message';
+import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivity } from '../../common/read-messaging-message.js';
 
 export const meta = {
 	tags: ['messaging'],
diff --git a/packages/backend/src/server/api/endpoints/messaging/messages/create.ts b/packages/backend/src/server/api/endpoints/messaging/messages/create.ts
index c2f9e71b5c..a9b926c4fb 100644
--- a/packages/backend/src/server/api/endpoints/messaging/messages/create.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/messages/create.ts
@@ -1,10 +1,10 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { MessagingMessages, DriveFiles, UserGroups, UserGroupJoinings, Blockings } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { UserGroup } from '@/models/entities/user-group';
-import { createMessage } from '@/services/messages/create';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { MessagingMessages, DriveFiles, UserGroups, UserGroupJoinings, Blockings } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { createMessage } from '@/services/messages/create.js';
 
 export const meta = {
 	tags: ['messaging'],
diff --git a/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts b/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
index 8f5d6da665..a0945af510 100644
--- a/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/messages/delete.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
+import define from '../../../define.js';
 import ms from 'ms';
-import { ApiError } from '../../../error';
-import { MessagingMessages } from '@/models/index';
-import { deleteMessage } from '@/services/messages/delete';
+import { ApiError } from '../../../error.js';
+import { MessagingMessages } from '@/models/index.js';
+import { deleteMessage } from '@/services/messages/delete.js';
 
 export const meta = {
 	tags: ['messaging'],
diff --git a/packages/backend/src/server/api/endpoints/messaging/messages/read.ts b/packages/backend/src/server/api/endpoints/messaging/messages/read.ts
index 2a18d9c379..8d38e509ac 100644
--- a/packages/backend/src/server/api/endpoints/messaging/messages/read.ts
+++ b/packages/backend/src/server/api/endpoints/messaging/messages/read.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { MessagingMessages } from '@/models/index';
-import { readUserMessagingMessage, readGroupMessagingMessage } from '../../../common/read-messaging-message';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { MessagingMessages } from '@/models/index.js';
+import { readUserMessagingMessage, readGroupMessagingMessage } from '../../../common/read-messaging-message.js';
 
 export const meta = {
 	tags: ['messaging'],
diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts
index afc6d2805f..df959cbb72 100644
--- a/packages/backend/src/server/api/endpoints/meta.ts
+++ b/packages/backend/src/server/api/endpoints/meta.ts
@@ -1,10 +1,10 @@
-import config from '@/config/index';
-import define from '../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Ads, Emojis, Users } from '@/models/index';
-import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits';
+import config from '@/config/index.js';
+import define from '../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Ads, Emojis, Users } from '@/models/index.js';
+import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits.js';
 import { MoreThan } from 'typeorm';
-import { MAX_NOTE_TEXT_LENGTH } from '@/const';
+import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 
 export const meta = {
 	tags: ['meta'],
diff --git a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
index 56fc459d7e..73ecdaeb03 100644
--- a/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
+++ b/packages/backend/src/server/api/endpoints/miauth/gen-token.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { AccessTokens } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { secureRndstr } from '@/misc/secure-rndstr';
+import define from '../../define.js';
+import { AccessTokens } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { secureRndstr } from '@/misc/secure-rndstr.js';
 
 export const meta = {
 	tags: ['auth'],
diff --git a/packages/backend/src/server/api/endpoints/mute/create.ts b/packages/backend/src/server/api/endpoints/mute/create.ts
index b8439cd3f6..0178aab143 100644
--- a/packages/backend/src/server/api/endpoints/mute/create.ts
+++ b/packages/backend/src/server/api/endpoints/mute/create.ts
@@ -1,10 +1,10 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { genId } from '@/misc/gen-id';
-import { Mutings, NoteWatchings } from '@/models/index';
-import { Muting } from '@/models/entities/muting';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { genId } from '@/misc/gen-id.js';
+import { Mutings, NoteWatchings } from '@/models/index.js';
+import { Muting } from '@/models/entities/muting.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/mute/delete.ts b/packages/backend/src/server/api/endpoints/mute/delete.ts
index ff66aa26cf..a8cf2a6667 100644
--- a/packages/backend/src/server/api/endpoints/mute/delete.ts
+++ b/packages/backend/src/server/api/endpoints/mute/delete.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { Mutings } from '@/models/index';
-import { publishUserEvent } from '@/services/stream';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { Mutings } from '@/models/index.js';
+import { publishUserEvent } from '@/services/stream.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/mute/list.ts b/packages/backend/src/server/api/endpoints/mute/list.ts
index a728affe05..31283cf4c1 100644
--- a/packages/backend/src/server/api/endpoints/mute/list.ts
+++ b/packages/backend/src/server/api/endpoints/mute/list.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Mutings } from '@/models/index';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Mutings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/my/apps.ts b/packages/backend/src/server/api/endpoints/my/apps.ts
index 5d08f34dac..85b75c15df 100644
--- a/packages/backend/src/server/api/endpoints/my/apps.ts
+++ b/packages/backend/src/server/api/endpoints/my/apps.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Apps } from '@/models/index';
+import define from '../../define.js';
+import { Apps } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account', 'app'],
diff --git a/packages/backend/src/server/api/endpoints/notes.ts b/packages/backend/src/server/api/endpoints/notes.ts
index 28c49b0e63..07862a7bfb 100644
--- a/packages/backend/src/server/api/endpoints/notes.ts
+++ b/packages/backend/src/server/api/endpoints/notes.ts
@@ -1,6 +1,6 @@
-import define from '../define';
-import { makePaginationQuery } from '../common/make-pagination-query';
-import { Notes } from '@/models/index';
+import define from '../define.js';
+import { makePaginationQuery } from '../common/make-pagination-query.js';
+import { Notes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/children.ts b/packages/backend/src/server/api/endpoints/notes/children.ts
index 43471b8ed5..38f2c12d2d 100644
--- a/packages/backend/src/server/api/endpoints/notes/children.ts
+++ b/packages/backend/src/server/api/endpoints/notes/children.ts
@@ -1,11 +1,11 @@
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
 import { Brackets } from 'typeorm';
-import { Notes } from '@/models/index';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
-import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query';
+import { Notes } from '@/models/index.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
+import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/clips.ts b/packages/backend/src/server/api/endpoints/notes/clips.ts
index 2209894a96..9a863b7148 100644
--- a/packages/backend/src/server/api/endpoints/notes/clips.ts
+++ b/packages/backend/src/server/api/endpoints/notes/clips.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ClipNotes, Clips } from '@/models/index';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
+import define from '../../define.js';
+import { ClipNotes, Clips } from '@/models/index.js';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
 import { In } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/notes/conversation.ts b/packages/backend/src/server/api/endpoints/notes/conversation.ts
index c785496f2e..2552c0f99d 100644
--- a/packages/backend/src/server/api/endpoints/notes/conversation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/conversation.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getNote } from '../../common/getters';
-import { Note } from '@/models/entities/note';
-import { Notes } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getNote } from '../../common/getters.js';
+import { Note } from '@/models/entities/note.js';
+import { Notes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index 6bf696b9d1..e4a9b28891 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -1,14 +1,14 @@
 import ms from 'ms';
-import create from '@/services/note/create';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { User } from '@/models/entities/user';
-import { Users, DriveFiles, Notes, Channels, Blockings } from '@/models/index';
-import { DriveFile } from '@/models/entities/drive-file';
-import { Note } from '@/models/entities/note';
-import { noteVisibilities } from '../../../../types';
-import { Channel } from '@/models/entities/channel';
-import { MAX_NOTE_TEXT_LENGTH } from '@/const';
+import create from '@/services/note/create.js';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { User } from '@/models/entities/user.js';
+import { Users, DriveFiles, Notes, Channels, Blockings } from '@/models/index.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { Note } from '@/models/entities/note.js';
+import { noteVisibilities } from '../../../../types.js';
+import { Channel } from '@/models/entities/channel.js';
+import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/delete.ts b/packages/backend/src/server/api/endpoints/notes/delete.ts
index 6084c93240..22ff2275ca 100644
--- a/packages/backend/src/server/api/endpoints/notes/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/delete.ts
@@ -1,9 +1,9 @@
-import deleteNote from '@/services/note/delete';
-import define from '../../define';
+import deleteNote from '@/services/note/delete.js';
+import define from '../../define.js';
 import ms from 'ms';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
-import { Users } from '@/models/index';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
index eaf2b1ac0f..bcc2c44c02 100644
--- a/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/favorites/create.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getNote } from '../../../common/getters';
-import { NoteFavorites } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getNote } from '../../../common/getters.js';
+import { NoteFavorites } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['notes', 'favorites'],
diff --git a/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts b/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
index 1a64fc430e..d41fab22d3 100644
--- a/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/favorites/delete.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getNote } from '../../../common/getters';
-import { NoteFavorites } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getNote } from '../../../common/getters.js';
+import { NoteFavorites } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes', 'favorites'],
diff --git a/packages/backend/src/server/api/endpoints/notes/featured.ts b/packages/backend/src/server/api/endpoints/notes/featured.ts
index 11738cbe26..913a499314 100644
--- a/packages/backend/src/server/api/endpoints/notes/featured.ts
+++ b/packages/backend/src/server/api/endpoints/notes/featured.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { Notes } from '@/models/index';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { Notes } from '@/models/index.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
index 54cf51c135..a5cd5de63e 100644
--- a/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/global-timeline.ts
@@ -1,14 +1,14 @@
-import define from '../../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { ApiError } from '../../error';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Notes } from '@/models/index';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query';
-import { activeUsersChart } from '@/services/chart/index';
-import { generateRepliesQuery } from '../../common/generate-replies-query';
-import { generateMutedNoteQuery } from '../../common/generate-muted-note-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { ApiError } from '../../error.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Notes } from '@/models/index.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
+import { generateRepliesQuery } from '../../common/generate-replies-query.js';
+import { generateMutedNoteQuery } from '../../common/generate-muted-note-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
index f75cbeb008..96e9b5d0e7 100644
--- a/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/hybrid-timeline.ts
@@ -1,17 +1,17 @@
-import define from '../../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { ApiError } from '../../error';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Followings, Notes } from '@/models/index';
+import define from '../../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { ApiError } from '../../error.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Followings, Notes } from '@/models/index.js';
 import { Brackets } from 'typeorm';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query';
-import { activeUsersChart } from '@/services/chart/index';
-import { generateRepliesQuery } from '../../common/generate-replies-query';
-import { generateMutedNoteQuery } from '../../common/generate-muted-note-query';
-import { generateChannelQuery } from '../../common/generate-channel-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
+import { generateRepliesQuery } from '../../common/generate-replies-query.js';
+import { generateMutedNoteQuery } from '../../common/generate-muted-note-query.js';
+import { generateChannelQuery } from '../../common/generate-channel-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
index 9793919487..5f21f0e238 100644
--- a/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/local-timeline.ts
@@ -1,16 +1,16 @@
-import define from '../../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { ApiError } from '../../error';
-import { Notes } from '@/models/index';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { activeUsersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { ApiError } from '../../error.js';
+import { Notes } from '@/models/index.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
 import { Brackets } from 'typeorm';
-import { generateRepliesQuery } from '../../common/generate-replies-query';
-import { generateMutedNoteQuery } from '../../common/generate-muted-note-query';
-import { generateChannelQuery } from '../../common/generate-channel-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import { generateRepliesQuery } from '../../common/generate-replies-query.js';
+import { generateMutedNoteQuery } from '../../common/generate-muted-note-query.js';
+import { generateChannelQuery } from '../../common/generate-channel-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/mentions.ts b/packages/backend/src/server/api/endpoints/notes/mentions.ts
index 41f2ad5244..269eaa9324 100644
--- a/packages/backend/src/server/api/endpoints/notes/mentions.ts
+++ b/packages/backend/src/server/api/endpoints/notes/mentions.ts
@@ -1,12 +1,12 @@
-import define from '../../define';
-import read from '@/services/note/read';
-import { Notes, Followings } from '@/models/index';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import read from '@/services/note/read.js';
+import { Notes, Followings } from '@/models/index.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 import { Brackets } from 'typeorm';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
-import { generateMutedNoteThreadQuery } from '../../common/generate-muted-note-thread-query';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
+import { generateMutedNoteThreadQuery } from '../../common/generate-muted-note-thread-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
index 0f2d4699de..bdd1aeecd4 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/recommendation.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { Polls, Mutings, Notes, PollVotes } from '@/models/index';
+import define from '../../../define.js';
+import { Polls, Mutings, Notes, PollVotes } from '@/models/index.js';
 import { Brackets, In } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
index d889ba6f1f..ef52d03664 100644
--- a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
+++ b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts
@@ -1,16 +1,16 @@
-import { publishNoteStream } from '@/services/stream';
-import { createNotification } from '@/services/create-notification';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getNote } from '../../../common/getters';
-import { deliver } from '@/queue/index';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderVote from '@/remote/activitypub/renderer/vote';
-import { deliverQuestionUpdate } from '@/services/note/polls/update';
-import { PollVotes, NoteWatchings, Users, Polls, Blockings } from '@/models/index';
+import { publishNoteStream } from '@/services/stream.js';
+import { createNotification } from '@/services/create-notification.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getNote } from '../../../common/getters.js';
+import { deliver } from '@/queue/index.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderVote from '@/remote/activitypub/renderer/vote.js';
+import { deliverQuestionUpdate } from '@/services/note/polls/update.js';
+import { PollVotes, NoteWatchings, Users, Polls, Blockings } from '@/models/index.js';
 import { Not } from 'typeorm';
-import { IRemoteUser } from '@/models/entities/user';
-import { genId } from '@/misc/gen-id';
+import { IRemoteUser } from '@/models/entities/user.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions.ts b/packages/backend/src/server/api/endpoints/notes/reactions.ts
index 746344df3b..629cf014bb 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions.ts
@@ -1,9 +1,9 @@
-import define from '../../define';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
-import { NoteReactions } from '@/models/index';
+import define from '../../define.js';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
+import { NoteReactions } from '@/models/index.js';
 import { DeepPartial } from 'typeorm';
-import { NoteReaction } from '@/models/entities/note-reaction';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
 
 export const meta = {
 	tags: ['notes', 'reactions'],
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions/create.ts b/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
index 9edbabc469..07e52a9266 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions/create.ts
@@ -1,7 +1,7 @@
-import createReaction from '@/services/note/reaction/create';
-import define from '../../../define';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
+import createReaction from '@/services/note/reaction/create.js';
+import define from '../../../define.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['reactions', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts b/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
index d5e2e138a8..639ecae264 100644
--- a/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/reactions/delete.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
+import define from '../../../define.js';
 import ms from 'ms';
-import deleteReaction from '@/services/note/reaction/delete';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
+import deleteReaction from '@/services/note/reaction/delete.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['reactions', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/renotes.ts b/packages/backend/src/server/api/endpoints/notes/renotes.ts
index a964a0c766..52440f8a61 100644
--- a/packages/backend/src/server/api/endpoints/notes/renotes.ts
+++ b/packages/backend/src/server/api/endpoints/notes/renotes.ts
@@ -1,11 +1,11 @@
-import define from '../../define';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Notes } from '@/models/index';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Notes } from '@/models/index.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/replies.ts b/packages/backend/src/server/api/endpoints/notes/replies.ts
index 78559abd5a..10b33ea8c9 100644
--- a/packages/backend/src/server/api/endpoints/notes/replies.ts
+++ b/packages/backend/src/server/api/endpoints/notes/replies.ts
@@ -1,9 +1,9 @@
-import define from '../../define';
-import { Notes } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { Notes } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
index ff55f862aa..94fb344c08 100644
--- a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
+++ b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
@@ -1,12 +1,12 @@
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Notes } from '@/models/index';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Notes } from '@/models/index.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
 import { Brackets } from 'typeorm';
-import { safeForSql } from '@/misc/safe-for-sql';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import { safeForSql } from '@/misc/safe-for-sql.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes', 'hashtags'],
diff --git a/packages/backend/src/server/api/endpoints/notes/search.ts b/packages/backend/src/server/api/endpoints/notes/search.ts
index 7034645956..1295542efd 100644
--- a/packages/backend/src/server/api/endpoints/notes/search.ts
+++ b/packages/backend/src/server/api/endpoints/notes/search.ts
@@ -1,12 +1,12 @@
-import es from '../../../../db/elasticsearch';
-import define from '../../define';
-import { Notes } from '@/models/index';
+import es from '../../../../db/elasticsearch.js';
+import define from '../../define.js';
+import { Notes } from '@/models/index.js';
 import { In } from 'typeorm';
-import config from '@/config/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import config from '@/config/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/show.ts b/packages/backend/src/server/api/endpoints/notes/show.ts
index a300f1aefa..d6692923c3 100644
--- a/packages/backend/src/server/api/endpoints/notes/show.ts
+++ b/packages/backend/src/server/api/endpoints/notes/show.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
-import { Notes } from '@/models/index';
+import define from '../../define.js';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
+import { Notes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/state.ts b/packages/backend/src/server/api/endpoints/notes/state.ts
index 2e7f1f75c3..6fdb8e88fb 100644
--- a/packages/backend/src/server/api/endpoints/notes/state.ts
+++ b/packages/backend/src/server/api/endpoints/notes/state.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { NoteFavorites, Notes, NoteThreadMutings, NoteWatchings } from '@/models/index';
+import define from '../../define.js';
+import { NoteFavorites, Notes, NoteThreadMutings, NoteWatchings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts b/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
index 7b3c88785b..e48a2cf576 100644
--- a/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/thread-muting/create.ts
@@ -1,9 +1,9 @@
-import define from '../../../define';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
-import { Notes, NoteThreadMutings } from '@/models';
-import { genId } from '@/misc/gen-id';
-import readNote from '@/services/note/read';
+import define from '../../../define.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
+import { Notes, NoteThreadMutings } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import readNote from '@/services/note/read.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts b/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
index 66d631640a..4fb3137a5e 100644
--- a/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/thread-muting/delete.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
-import { NoteThreadMutings } from '@/models';
+import define from '../../../define.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
+import { NoteThreadMutings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/timeline.ts b/packages/backend/src/server/api/endpoints/notes/timeline.ts
index 14d0d71704..416e507e9b 100644
--- a/packages/backend/src/server/api/endpoints/notes/timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/timeline.ts
@@ -1,15 +1,15 @@
-import define from '../../define';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Notes, Followings } from '@/models/index';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
-import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query';
-import { activeUsersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { Notes, Followings } from '@/models/index.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
+import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
 import { Brackets } from 'typeorm';
-import { generateRepliesQuery } from '../../common/generate-replies-query';
-import { generateMutedNoteQuery } from '../../common/generate-muted-note-query';
-import { generateChannelQuery } from '../../common/generate-channel-query';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
+import { generateRepliesQuery } from '../../common/generate-replies-query.js';
+import { generateMutedNoteQuery } from '../../common/generate-muted-note-query.js';
+import { generateChannelQuery } from '../../common/generate-channel-query.js';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/translate.ts b/packages/backend/src/server/api/endpoints/notes/translate.ts
index a1d8fae10b..068df6940b 100644
--- a/packages/backend/src/server/api/endpoints/notes/translate.ts
+++ b/packages/backend/src/server/api/endpoints/notes/translate.ts
@@ -1,12 +1,12 @@
-import define from '../../define';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
+import define from '../../define.js';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
 import fetch from 'node-fetch';
-import config from '@/config/index';
-import { getAgentByUrl } from '@/misc/fetch';
-import { URLSearchParams } from 'url';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Notes } from '@/models';
+import config from '@/config/index.js';
+import { getAgentByUrl } from '@/misc/fetch.js';
+import { URLSearchParams } from 'node:url';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Notes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/unrenote.ts b/packages/backend/src/server/api/endpoints/notes/unrenote.ts
index 5b39239279..a9aadba338 100644
--- a/packages/backend/src/server/api/endpoints/notes/unrenote.ts
+++ b/packages/backend/src/server/api/endpoints/notes/unrenote.ts
@@ -1,9 +1,9 @@
-import deleteNote from '@/services/note/delete';
-import define from '../../define';
+import deleteNote from '@/services/note/delete.js';
+import define from '../../define.js';
 import ms from 'ms';
-import { getNote } from '../../common/getters';
-import { ApiError } from '../../error';
-import { Notes, Users } from '@/models/index';
+import { getNote } from '../../common/getters.js';
+import { ApiError } from '../../error.js';
+import { Notes, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
index 68a15f05fb..990c09f07c 100644
--- a/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -1,9 +1,9 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { UserLists, UserListJoinings, Notes } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { activeUsersChart } from '@/services/chart/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { UserLists, UserListJoinings, Notes } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { activeUsersChart } from '@/services/chart/index.js';
 import { Brackets } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/notes/watching/create.ts b/packages/backend/src/server/api/endpoints/notes/watching/create.ts
index ed35638329..8fdf84624e 100644
--- a/packages/backend/src/server/api/endpoints/notes/watching/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/watching/create.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import watch from '@/services/note/watch';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import watch from '@/services/note/watch.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notes/watching/delete.ts b/packages/backend/src/server/api/endpoints/notes/watching/delete.ts
index 1918b887ef..d58f09797c 100644
--- a/packages/backend/src/server/api/endpoints/notes/watching/delete.ts
+++ b/packages/backend/src/server/api/endpoints/notes/watching/delete.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import unwatch from '@/services/note/unwatch';
-import { getNote } from '../../../common/getters';
-import { ApiError } from '../../../error';
+import define from '../../../define.js';
+import unwatch from '@/services/note/unwatch.js';
+import { getNote } from '../../../common/getters.js';
+import { ApiError } from '../../../error.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/notifications/create.ts b/packages/backend/src/server/api/endpoints/notifications/create.ts
index 590f1c540f..b339c8723d 100644
--- a/packages/backend/src/server/api/endpoints/notifications/create.ts
+++ b/packages/backend/src/server/api/endpoints/notifications/create.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { createNotification } from '@/services/create-notification';
+import define from '../../define.js';
+import { createNotification } from '@/services/create-notification.js';
 
 export const meta = {
 	tags: ['notifications'],
diff --git a/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts b/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
index 5ad6605e7f..abefe07be6 100644
--- a/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
+++ b/packages/backend/src/server/api/endpoints/notifications/mark-all-as-read.ts
@@ -1,6 +1,6 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../define';
-import { Notifications } from '@/models/index';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../define.js';
+import { Notifications } from '@/models/index.js';
 
 export const meta = {
 	tags: ['notifications', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/notifications/read.ts b/packages/backend/src/server/api/endpoints/notifications/read.ts
index 93ac75f649..34f4c155fa 100644
--- a/packages/backend/src/server/api/endpoints/notifications/read.ts
+++ b/packages/backend/src/server/api/endpoints/notifications/read.ts
@@ -1,8 +1,8 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../../define';
-import { Notifications } from '@/models/index';
-import { readNotification } from '../../common/read-notification';
-import { ApiError } from '../../error';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../../define.js';
+import { Notifications } from '@/models/index.js';
+import { readNotification } from '../../common/read-notification.js';
+import { ApiError } from '../../error.js';
 
 export const meta = {
 	tags: ['notifications', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/page-push.ts b/packages/backend/src/server/api/endpoints/page-push.ts
index 690cd0884d..acaa118470 100644
--- a/packages/backend/src/server/api/endpoints/page-push.ts
+++ b/packages/backend/src/server/api/endpoints/page-push.ts
@@ -1,7 +1,7 @@
-import define from '../define';
-import { publishMainStream } from '@/services/stream';
-import { Users, Pages } from '@/models/index';
-import { ApiError } from '../error';
+import define from '../define.js';
+import { publishMainStream } from '@/services/stream.js';
+import { Users, Pages } from '@/models/index.js';
+import { ApiError } from '../error.js';
 
 export const meta = {
 	requireCredential: true,
diff --git a/packages/backend/src/server/api/endpoints/pages/create.ts b/packages/backend/src/server/api/endpoints/pages/create.ts
index c6d50e5cdf..7cac530606 100644
--- a/packages/backend/src/server/api/endpoints/pages/create.ts
+++ b/packages/backend/src/server/api/endpoints/pages/create.ts
@@ -1,9 +1,9 @@
 import ms from 'ms';
-import define from '../../define';
-import { Pages, DriveFiles } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { Page } from '@/models/entities/page';
-import { ApiError } from '../../error';
+import define from '../../define.js';
+import { Pages, DriveFiles } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { Page } from '@/models/entities/page.js';
+import { ApiError } from '../../error.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/delete.ts b/packages/backend/src/server/api/endpoints/pages/delete.ts
index 2933e04174..ddf691f53c 100644
--- a/packages/backend/src/server/api/endpoints/pages/delete.ts
+++ b/packages/backend/src/server/api/endpoints/pages/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Pages } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Pages } from '@/models/index.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/featured.ts b/packages/backend/src/server/api/endpoints/pages/featured.ts
index dbd8737b08..eeb6d509ca 100644
--- a/packages/backend/src/server/api/endpoints/pages/featured.ts
+++ b/packages/backend/src/server/api/endpoints/pages/featured.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Pages } from '@/models/index';
+import define from '../../define.js';
+import { Pages } from '@/models/index.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/like.ts b/packages/backend/src/server/api/endpoints/pages/like.ts
index 0eb110732f..cab78e576c 100644
--- a/packages/backend/src/server/api/endpoints/pages/like.ts
+++ b/packages/backend/src/server/api/endpoints/pages/like.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Pages, PageLikes } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Pages, PageLikes } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/show.ts b/packages/backend/src/server/api/endpoints/pages/show.ts
index e330460f23..4e3facae5b 100644
--- a/packages/backend/src/server/api/endpoints/pages/show.ts
+++ b/packages/backend/src/server/api/endpoints/pages/show.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Pages, Users } from '@/models/index';
-import { Page } from '@/models/entities/page';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Pages, Users } from '@/models/index.js';
+import { Page } from '@/models/entities/page.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/unlike.ts b/packages/backend/src/server/api/endpoints/pages/unlike.ts
index f8efe8969a..31cd1a3359 100644
--- a/packages/backend/src/server/api/endpoints/pages/unlike.ts
+++ b/packages/backend/src/server/api/endpoints/pages/unlike.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Pages, PageLikes } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Pages, PageLikes } from '@/models/index.js';
 
 export const meta = {
 	tags: ['pages'],
diff --git a/packages/backend/src/server/api/endpoints/pages/update.ts b/packages/backend/src/server/api/endpoints/pages/update.ts
index 8c81ea7463..24c8f467e6 100644
--- a/packages/backend/src/server/api/endpoints/pages/update.ts
+++ b/packages/backend/src/server/api/endpoints/pages/update.ts
@@ -1,7 +1,7 @@
 import ms from 'ms';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Pages, DriveFiles } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Pages, DriveFiles } from '@/models/index.js';
 import { Not } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/ping.ts b/packages/backend/src/server/api/endpoints/ping.ts
index 4f68965598..2891a0860a 100644
--- a/packages/backend/src/server/api/endpoints/ping.ts
+++ b/packages/backend/src/server/api/endpoints/ping.ts
@@ -1,4 +1,4 @@
-import define from '../define';
+import define from '../define.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/pinned-users.ts b/packages/backend/src/server/api/endpoints/pinned-users.ts
index 61c67949cf..1d26ab266e 100644
--- a/packages/backend/src/server/api/endpoints/pinned-users.ts
+++ b/packages/backend/src/server/api/endpoints/pinned-users.ts
@@ -1,8 +1,8 @@
-import define from '../define';
-import { Users } from '@/models/index';
-import { fetchMeta } from '@/misc/fetch-meta';
-import * as Acct from 'misskey-js/built/acct';
-import { User } from '@/models/entities/user';
+import define from '../define.js';
+import { Users } from '@/models/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import * as Acct from '@/misc/acct.js';
+import { User } from '@/models/entities/user.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/promo/read.ts b/packages/backend/src/server/api/endpoints/promo/read.ts
index b811159834..ea34ca3aad 100644
--- a/packages/backend/src/server/api/endpoints/promo/read.ts
+++ b/packages/backend/src/server/api/endpoints/promo/read.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getNote } from '../../common/getters';
-import { PromoReads } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getNote } from '../../common/getters.js';
+import { PromoReads } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export const meta = {
 	tags: ['notes'],
diff --git a/packages/backend/src/server/api/endpoints/request-reset-password.ts b/packages/backend/src/server/api/endpoints/request-reset-password.ts
index af190583c0..18cd98b164 100644
--- a/packages/backend/src/server/api/endpoints/request-reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/request-reset-password.ts
@@ -1,12 +1,12 @@
-import { publishMainStream } from '@/services/stream';
-import define from '../define';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../define.js';
 import rndstr from 'rndstr';
-import config from '@/config/index';
+import config from '@/config/index.js';
 import ms from 'ms';
-import { Users, UserProfiles, PasswordResetRequests } from '@/models/index';
-import { sendEmail } from '@/services/send-email';
-import { ApiError } from '../error';
-import { genId } from '@/misc/gen-id';
+import { Users, UserProfiles, PasswordResetRequests } from '@/models/index.js';
+import { sendEmail } from '@/services/send-email.js';
+import { ApiError } from '../error.js';
+import { genId } from '@/misc/gen-id.js';
 import { IsNull } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/reset-db.ts b/packages/backend/src/server/api/endpoints/reset-db.ts
index 5a72c306ba..dbe64e9a13 100644
--- a/packages/backend/src/server/api/endpoints/reset-db.ts
+++ b/packages/backend/src/server/api/endpoints/reset-db.ts
@@ -1,6 +1,6 @@
-import define from '../define';
-import { ApiError } from '../error';
-import { resetDb } from '@/db/postgre';
+import define from '../define.js';
+import { ApiError } from '../error.js';
+import { resetDb } from '@/db/postgre.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/reset-password.ts b/packages/backend/src/server/api/endpoints/reset-password.ts
index 880ff682fb..3abf232af0 100644
--- a/packages/backend/src/server/api/endpoints/reset-password.ts
+++ b/packages/backend/src/server/api/endpoints/reset-password.ts
@@ -1,8 +1,8 @@
-import * as bcrypt from 'bcryptjs';
-import { publishMainStream } from '@/services/stream';
-import define from '../define';
-import { Users, UserProfiles, PasswordResetRequests } from '@/models/index';
-import { ApiError } from '../error';
+import bcrypt from 'bcryptjs';
+import { publishMainStream } from '@/services/stream.js';
+import define from '../define.js';
+import { Users, UserProfiles, PasswordResetRequests } from '@/models/index.js';
+import { ApiError } from '../error.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/server-info.ts b/packages/backend/src/server/api/endpoints/server-info.ts
index 97245575e8..99f3730e97 100644
--- a/packages/backend/src/server/api/endpoints/server-info.ts
+++ b/packages/backend/src/server/api/endpoints/server-info.ts
@@ -1,6 +1,6 @@
-import * as os from 'os';
-import * as si from 'systeminformation';
-import define from '../define';
+import * as os from 'node:os';
+import si from 'systeminformation';
+import define from '../define.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/stats.ts b/packages/backend/src/server/api/endpoints/stats.ts
index 7863d439ca..92fea4de6a 100644
--- a/packages/backend/src/server/api/endpoints/stats.ts
+++ b/packages/backend/src/server/api/endpoints/stats.ts
@@ -1,6 +1,6 @@
-import define from '../define';
-import { Instances, NoteReactions, Notes, Users } from '@/models/index';
-import { } from '@/services/chart/index';
+import define from '../define.js';
+import { Instances, NoteReactions, Notes, Users } from '@/models/index.js';
+import { } from '@/services/chart/index.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/sw/register.ts b/packages/backend/src/server/api/endpoints/sw/register.ts
index 9971bfb7d0..6c7714e19b 100644
--- a/packages/backend/src/server/api/endpoints/sw/register.ts
+++ b/packages/backend/src/server/api/endpoints/sw/register.ts
@@ -1,7 +1,7 @@
-import define from '../../define';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { genId } from '@/misc/gen-id';
-import { SwSubscriptions } from '@/models/index';
+import define from '../../define.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { genId } from '@/misc/gen-id.js';
+import { SwSubscriptions } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/sw/unregister.ts b/packages/backend/src/server/api/endpoints/sw/unregister.ts
index fc5fb0ce92..9748f2a222 100644
--- a/packages/backend/src/server/api/endpoints/sw/unregister.ts
+++ b/packages/backend/src/server/api/endpoints/sw/unregister.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { SwSubscriptions } from '../../../../models';
+import define from '../../define.js';
+import { SwSubscriptions } from '@/models/index.js';
 
 export const meta = {
 	tags: ['account'],
diff --git a/packages/backend/src/server/api/endpoints/test.ts b/packages/backend/src/server/api/endpoints/test.ts
index ee04009308..256da1a66f 100644
--- a/packages/backend/src/server/api/endpoints/test.ts
+++ b/packages/backend/src/server/api/endpoints/test.ts
@@ -1,4 +1,4 @@
-import define from '../define';
+import define from '../define.js';
 
 export const meta = {
 	requireCredential: false,
diff --git a/packages/backend/src/server/api/endpoints/username/available.ts b/packages/backend/src/server/api/endpoints/username/available.ts
index 4564784a9b..5a1c4128ab 100644
--- a/packages/backend/src/server/api/endpoints/username/available.ts
+++ b/packages/backend/src/server/api/endpoints/username/available.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Users, UsedUsernames } from '@/models/index';
+import define from '../../define.js';
+import { Users, UsedUsernames } from '@/models/index.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users.ts b/packages/backend/src/server/api/endpoints/users.ts
index 2406fcd2fc..10527d15cc 100644
--- a/packages/backend/src/server/api/endpoints/users.ts
+++ b/packages/backend/src/server/api/endpoints/users.ts
@@ -1,7 +1,7 @@
-import define from '../define';
-import { Users } from '@/models/index';
-import { generateMutedUserQueryForUsers } from '../common/generate-muted-user-query';
-import { generateBlockQueryForUsers } from '../common/generate-block-query';
+import define from '../define.js';
+import { Users } from '@/models/index.js';
+import { generateMutedUserQueryForUsers } from '../common/generate-muted-user-query.js';
+import { generateBlockQueryForUsers } from '../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/clips.ts b/packages/backend/src/server/api/endpoints/users/clips.ts
index 7abb94e2cf..424c594749 100644
--- a/packages/backend/src/server/api/endpoints/users/clips.ts
+++ b/packages/backend/src/server/api/endpoints/users/clips.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Clips } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Clips } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['users', 'clips'],
diff --git a/packages/backend/src/server/api/endpoints/users/followers.ts b/packages/backend/src/server/api/endpoints/users/followers.ts
index 75f13a2929..1e104b6bcc 100644
--- a/packages/backend/src/server/api/endpoints/users/followers.ts
+++ b/packages/backend/src/server/api/endpoints/users/followers.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Users, Followings, UserProfiles } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { toPunyNullable } from '@/misc/convert-host';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Users, Followings, UserProfiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { toPunyNullable } from '@/misc/convert-host.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/following.ts b/packages/backend/src/server/api/endpoints/users/following.ts
index b1af55169c..b0a1036c76 100644
--- a/packages/backend/src/server/api/endpoints/users/following.ts
+++ b/packages/backend/src/server/api/endpoints/users/following.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { Users, Followings, UserProfiles } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { toPunyNullable } from '@/misc/convert-host';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { Users, Followings, UserProfiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { toPunyNullable } from '@/misc/convert-host.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/gallery/posts.ts b/packages/backend/src/server/api/endpoints/users/gallery/posts.ts
index 7accc0b627..d7c435256c 100644
--- a/packages/backend/src/server/api/endpoints/users/gallery/posts.ts
+++ b/packages/backend/src/server/api/endpoints/users/gallery/posts.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { GalleryPosts } from '@/models/index';
-import { makePaginationQuery } from '../../../common/make-pagination-query';
+import define from '../../../define.js';
+import { GalleryPosts } from '@/models/index.js';
+import { makePaginationQuery } from '../../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['users', 'gallery'],
diff --git a/packages/backend/src/server/api/endpoints/users/get-frequently-replied-users.ts b/packages/backend/src/server/api/endpoints/users/get-frequently-replied-users.ts
index 5173982840..73cadc0df7 100644
--- a/packages/backend/src/server/api/endpoints/users/get-frequently-replied-users.ts
+++ b/packages/backend/src/server/api/endpoints/users/get-frequently-replied-users.ts
@@ -1,9 +1,9 @@
-import define from '../../define';
-import { maximum } from '@/prelude/array';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
+import define from '../../define.js';
+import { maximum } from '@/prelude/array.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
 import { Not, In, IsNull } from 'typeorm';
-import { Notes, Users } from '@/models/index';
+import { Notes, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/create.ts b/packages/backend/src/server/api/endpoints/users/groups/create.ts
index 358d3828a0..9f6d8464d8 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/create.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/create.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { UserGroup } from '@/models/entities/user-group';
-import { UserGroupJoining } from '@/models/entities/user-group-joining';
+import define from '../../../define.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { UserGroupJoining } from '@/models/entities/user-group-joining.js';
 
 export const meta = {
 	tags: ['groups'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/delete.ts b/packages/backend/src/server/api/endpoints/users/groups/delete.ts
index ca8d864dcd..f4898a3c7c 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/delete.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserGroups } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserGroups } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/invitations/accept.ts b/packages/backend/src/server/api/endpoints/users/groups/invitations/accept.ts
index 31d3461280..efbdf968f6 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/invitations/accept.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/invitations/accept.ts
@@ -1,8 +1,8 @@
-import define from '../../../../define';
-import { ApiError } from '../../../../error';
-import { UserGroupJoinings, UserGroupInvitations } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { UserGroupJoining } from '@/models/entities/user-group-joining';
+import define from '../../../../define.js';
+import { ApiError } from '../../../../error.js';
+import { UserGroupJoinings, UserGroupInvitations } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { UserGroupJoining } from '@/models/entities/user-group-joining.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/invitations/reject.ts b/packages/backend/src/server/api/endpoints/users/groups/invitations/reject.ts
index 29b7612a8a..fe5d431eab 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/invitations/reject.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/invitations/reject.ts
@@ -1,6 +1,6 @@
-import define from '../../../../define';
-import { ApiError } from '../../../../error';
-import { UserGroupInvitations } from '@/models/index';
+import define from '../../../../define.js';
+import { ApiError } from '../../../../error.js';
+import { UserGroupInvitations } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/invite.ts b/packages/backend/src/server/api/endpoints/users/groups/invite.ts
index 31eef02b2f..10bfb7eca1 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/invite.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/invite.ts
@@ -1,10 +1,10 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { UserGroups, UserGroupJoinings, UserGroupInvitations } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { UserGroupInvitation } from '@/models/entities/user-group-invitation';
-import { createNotification } from '@/services/create-notification';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { UserGroups, UserGroupJoinings, UserGroupInvitations } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { UserGroupInvitation } from '@/models/entities/user-group-invitation.js';
+import { createNotification } from '@/services/create-notification.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/joined.ts b/packages/backend/src/server/api/endpoints/users/groups/joined.ts
index 465585376e..e52de78595 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/joined.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/joined.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
+import define from '../../../define.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
 import { Not, In } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/users/groups/leave.ts b/packages/backend/src/server/api/endpoints/users/groups/leave.ts
index 56b5330c83..c1a8c2c024 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/leave.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/leave.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/owned.ts b/packages/backend/src/server/api/endpoints/users/groups/owned.ts
index a3724a0547..11aad0f73c 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/owned.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/owned.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { UserGroups } from '@/models/index';
+import define from '../../../define.js';
+import { UserGroups } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/pull.ts b/packages/backend/src/server/api/endpoints/users/groups/pull.ts
index dd93faa62e..55ec9f915b 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/pull.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/pull.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/show.ts b/packages/backend/src/server/api/endpoints/users/groups/show.ts
index 799ec3202e..28ca1162c8 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/show.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/show.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/transfer.ts b/packages/backend/src/server/api/endpoints/users/groups/transfer.ts
index bb3b7f11c2..f48e1ddbf0 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/transfer.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/transfer.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { UserGroups, UserGroupJoinings } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { UserGroups, UserGroupJoinings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/groups/update.ts b/packages/backend/src/server/api/endpoints/users/groups/update.ts
index 6c8851889a..b3e17dfd9e 100644
--- a/packages/backend/src/server/api/endpoints/users/groups/update.ts
+++ b/packages/backend/src/server/api/endpoints/users/groups/update.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserGroups } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserGroups } from '@/models/index.js';
 
 export const meta = {
 	tags: ['groups'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/create.ts b/packages/backend/src/server/api/endpoints/users/lists/create.ts
index c0c37f96f1..1a0599f9e7 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/create.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/create.ts
@@ -1,7 +1,7 @@
-import define from '../../../define';
-import { UserLists } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { UserList } from '@/models/entities/user-list';
+import define from '../../../define.js';
+import { UserLists } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { UserList } from '@/models/entities/user-list.js';
 
 export const meta = {
 	tags: ['lists'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/delete.ts b/packages/backend/src/server/api/endpoints/users/lists/delete.ts
index 0f7fdbc908..aeefb98c83 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/delete.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/delete.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserLists } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserLists } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/list.ts b/packages/backend/src/server/api/endpoints/users/lists/list.ts
index 5245c57849..a8663ada8a 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/list.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/list.ts
@@ -1,5 +1,5 @@
-import define from '../../../define';
-import { UserLists } from '@/models/index';
+import define from '../../../define.js';
+import { UserLists } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/pull.ts b/packages/backend/src/server/api/endpoints/users/lists/pull.ts
index 45b0b41564..2c4c61d51e 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/pull.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/pull.ts
@@ -1,8 +1,8 @@
-import { publishUserListStream } from '@/services/stream';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { UserLists, UserListJoinings, Users } from '@/models/index';
+import { publishUserListStream } from '@/services/stream.js';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { UserLists, UserListJoinings, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/push.ts b/packages/backend/src/server/api/endpoints/users/lists/push.ts
index 252f7e6e19..034a9d2db6 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/push.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/push.ts
@@ -1,8 +1,8 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { pushUserToUserList } from '@/services/user-list/push';
-import { UserLists, UserListJoinings, Blockings } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { getUser } from '../../../common/getters.js';
+import { pushUserToUserList } from '@/services/user-list/push.js';
+import { UserLists, UserListJoinings, Blockings } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists', 'users'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/show.ts b/packages/backend/src/server/api/endpoints/users/lists/show.ts
index 91a2bf55a4..fadb94c90e 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/show.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/show.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserLists } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserLists } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists', 'account'],
diff --git a/packages/backend/src/server/api/endpoints/users/lists/update.ts b/packages/backend/src/server/api/endpoints/users/lists/update.ts
index 3e3f6ec9fe..5ec99031e1 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/update.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/update.ts
@@ -1,6 +1,6 @@
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { UserLists } from '@/models/index';
+import define from '../../../define.js';
+import { ApiError } from '../../../error.js';
+import { UserLists } from '@/models/index.js';
 
 export const meta = {
 	tags: ['lists'],
diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index 4c27fb8ee4..1f61773c44 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -1,13 +1,13 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { Notes } from '@/models/index';
-import { generateMutedUserQuery } from '../../common/generate-muted-user-query';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { Notes } from '@/models/index.js';
+import { generateMutedUserQuery } from '../../common/generate-muted-user-query.js';
 import { Brackets } from 'typeorm';
-import { generateBlockedUserQuery } from '../../common/generate-block-query';
-import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query';
+import { generateBlockedUserQuery } from '../../common/generate-block-query.js';
+import { generateMutedInstanceQuery } from '../../common/generate-muted-instance-query.js';
 
 export const meta = {
 	tags: ['users', 'notes'],
diff --git a/packages/backend/src/server/api/endpoints/users/pages.ts b/packages/backend/src/server/api/endpoints/users/pages.ts
index f7b39b75fd..b8b3e8192e 100644
--- a/packages/backend/src/server/api/endpoints/users/pages.ts
+++ b/packages/backend/src/server/api/endpoints/users/pages.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { Pages } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
+import define from '../../define.js';
+import { Pages } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
 
 export const meta = {
 	tags: ['users', 'pages'],
diff --git a/packages/backend/src/server/api/endpoints/users/reactions.ts b/packages/backend/src/server/api/endpoints/users/reactions.ts
index c9b5a95639..7b55a16711 100644
--- a/packages/backend/src/server/api/endpoints/users/reactions.ts
+++ b/packages/backend/src/server/api/endpoints/users/reactions.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { NoteReactions, UserProfiles } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { generateVisibilityQuery } from '../../common/generate-visibility-query';
-import { ApiError } from '../../error';
+import define from '../../define.js';
+import { NoteReactions, UserProfiles } from '@/models/index.js';
+import { makePaginationQuery } from '../../common/make-pagination-query.js';
+import { generateVisibilityQuery } from '../../common/generate-visibility-query.js';
+import { ApiError } from '../../error.js';
 
 export const meta = {
 	tags: ['users', 'reactions'],
diff --git a/packages/backend/src/server/api/endpoints/users/recommendation.ts b/packages/backend/src/server/api/endpoints/users/recommendation.ts
index 78c2f3e1a4..a8f18de522 100644
--- a/packages/backend/src/server/api/endpoints/users/recommendation.ts
+++ b/packages/backend/src/server/api/endpoints/users/recommendation.ts
@@ -1,8 +1,8 @@
 import ms from 'ms';
-import define from '../../define';
-import { Users, Followings } from '@/models/index';
-import { generateMutedUserQueryForUsers } from '../../common/generate-muted-user-query';
-import { generateBlockedUserQuery, generateBlockQueryForUsers } from '../../common/generate-block-query';
+import define from '../../define.js';
+import { Users, Followings } from '@/models/index.js';
+import { generateMutedUserQueryForUsers } from '../../common/generate-muted-user-query.js';
+import { generateBlockedUserQuery, generateBlockQueryForUsers } from '../../common/generate-block-query.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/relation.ts b/packages/backend/src/server/api/endpoints/users/relation.ts
index 140126cab5..c6262122d4 100644
--- a/packages/backend/src/server/api/endpoints/users/relation.ts
+++ b/packages/backend/src/server/api/endpoints/users/relation.ts
@@ -1,5 +1,5 @@
-import define from '../../define';
-import { Users } from '@/models/index';
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/report-abuse.ts b/packages/backend/src/server/api/endpoints/users/report-abuse.ts
index 717724a4cf..e091b8e1b1 100644
--- a/packages/backend/src/server/api/endpoints/users/report-abuse.ts
+++ b/packages/backend/src/server/api/endpoints/users/report-abuse.ts
@@ -1,12 +1,12 @@
 import * as sanitizeHtml from 'sanitize-html';
-import define from '../../define';
-import { publishAdminStream } from '@/services/stream';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { AbuseUserReports, Users } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { sendEmail } from '@/services/send-email';
-import { fetchMeta } from '@/misc/fetch-meta';
+import define from '../../define.js';
+import { publishAdminStream } from '@/services/stream.js';
+import { ApiError } from '../../error.js';
+import { getUser } from '../../common/getters.js';
+import { AbuseUserReports, Users } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { sendEmail } from '@/services/send-email.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/search-by-username-and-host.ts b/packages/backend/src/server/api/endpoints/users/search-by-username-and-host.ts
index 15a93bc4f8..9d5a273fae 100644
--- a/packages/backend/src/server/api/endpoints/users/search-by-username-and-host.ts
+++ b/packages/backend/src/server/api/endpoints/users/search-by-username-and-host.ts
@@ -1,8 +1,8 @@
-import define from '../../define';
-import { Followings, Users } from '@/models/index';
+import define from '../../define.js';
+import { Followings, Users } from '@/models/index.js';
 import { Brackets } from 'typeorm';
-import { USER_ACTIVE_THRESHOLD } from '@/const';
-import { User } from '@/models/entities/user';
+import { USER_ACTIVE_THRESHOLD } from '@/const.js';
+import { User } from '@/models/entities/user.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/search.ts b/packages/backend/src/server/api/endpoints/users/search.ts
index 9d772f0968..a72a58a843 100644
--- a/packages/backend/src/server/api/endpoints/users/search.ts
+++ b/packages/backend/src/server/api/endpoints/users/search.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { UserProfiles, Users } from '@/models/index';
-import { User } from '@/models/entities/user';
+import define from '../../define.js';
+import { UserProfiles, Users } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
 import { Brackets } from 'typeorm';
 
 export const meta = {
diff --git a/packages/backend/src/server/api/endpoints/users/show.ts b/packages/backend/src/server/api/endpoints/users/show.ts
index cb42cc80a0..263c102a7a 100644
--- a/packages/backend/src/server/api/endpoints/users/show.ts
+++ b/packages/backend/src/server/api/endpoints/users/show.ts
@@ -1,10 +1,10 @@
-import { resolveUser } from '@/remote/resolve-user';
-import define from '../../define';
-import { apiLogger } from '../../logger';
-import { ApiError } from '../../error';
-import { Users } from '@/models/index';
+import { resolveUser } from '@/remote/resolve-user.js';
+import define from '../../define.js';
+import { apiLogger } from '../../logger.js';
+import { ApiError } from '../../error.js';
+import { Users } from '@/models/index.js';
 import { In } from 'typeorm';
-import { User } from '@/models/entities/user';
+import { User } from '@/models/entities/user.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/endpoints/users/stats.ts b/packages/backend/src/server/api/endpoints/users/stats.ts
index 2f4ca10fc1..180a9386d3 100644
--- a/packages/backend/src/server/api/endpoints/users/stats.ts
+++ b/packages/backend/src/server/api/endpoints/users/stats.ts
@@ -1,6 +1,6 @@
-import define from '../../define';
-import { ApiError } from '../../error';
-import { DriveFiles, Followings, NoteFavorites, NoteReactions, Notes, PageLikes, PollVotes, Users } from '@/models/index';
+import define from '../../define.js';
+import { ApiError } from '../../error.js';
+import { DriveFiles, Followings, NoteFavorites, NoteReactions, Notes, PageLikes, PollVotes, Users } from '@/models/index.js';
 
 export const meta = {
 	tags: ['users'],
diff --git a/packages/backend/src/server/api/index.ts b/packages/backend/src/server/api/index.ts
index 8f8a9d999e..ba2a71951c 100644
--- a/packages/backend/src/server/api/index.ts
+++ b/packages/backend/src/server/api/index.ts
@@ -2,22 +2,22 @@
  * API Server
  */
 
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
-import * as multer from '@koa/multer';
-import * as bodyParser from 'koa-bodyparser';
-import * as cors from '@koa/cors';
+import Koa from 'koa';
+import Router from '@koa/router';
+import multer from '@koa/multer';
+import bodyParser from 'koa-bodyparser';
+import cors from '@koa/cors';
 
-import endpoints from './endpoints';
-import handler from './api-handler';
-import signup from './private/signup';
-import signin from './private/signin';
-import signupPending from './private/signup-pending';
-import discord from './service/discord';
-import github from './service/github';
-import twitter from './service/twitter';
-import { Instances, AccessTokens, Users } from '@/models/index';
-import config from '@/config';
+import endpoints from './endpoints.js';
+import handler from './api-handler.js';
+import signup from './private/signup.js';
+import signin from './private/signin.js';
+import signupPending from './private/signup-pending.js';
+import discord from './service/discord.js';
+import github from './service/github.js';
+import twitter from './service/twitter.js';
+import { Instances, AccessTokens, Users } from '@/models/index.js';
+import config from '@/config/index.js';
 
 // Init app
 const app = new Koa();
diff --git a/packages/backend/src/server/api/limiter.ts b/packages/backend/src/server/api/limiter.ts
index 4721f6263a..2e4a190000 100644
--- a/packages/backend/src/server/api/limiter.ts
+++ b/packages/backend/src/server/api/limiter.ts
@@ -1,9 +1,9 @@
 import * as Limiter from 'ratelimiter';
-import { redisClient } from '../../db/redis';
-import { IEndpoint } from './endpoints';
-import * as Acct from 'misskey-js/built/acct';
-import { User } from '@/models/entities/user';
-import Logger from '@/services/logger';
+import { redisClient } from '../../db/redis.js';
+import { IEndpoint } from './endpoints.js';
+import * as Acct from '@/misc/acct.js';
+import { User } from '@/models/entities/user.js';
+import Logger from '@/services/logger.js';
 
 const logger = new Logger('limiter');
 
diff --git a/packages/backend/src/server/api/logger.ts b/packages/backend/src/server/api/logger.ts
index 750defe547..ec22d6c3e2 100644
--- a/packages/backend/src/server/api/logger.ts
+++ b/packages/backend/src/server/api/logger.ts
@@ -1,3 +1,3 @@
-import Logger from '@/services/logger';
+import Logger from '@/services/logger.js';
 
 export const apiLogger = new Logger('api');
diff --git a/packages/backend/src/server/api/openapi/gen-spec.ts b/packages/backend/src/server/api/openapi/gen-spec.ts
index fe5a4715e8..c6e557aefb 100644
--- a/packages/backend/src/server/api/openapi/gen-spec.ts
+++ b/packages/backend/src/server/api/openapi/gen-spec.ts
@@ -1,7 +1,7 @@
-import endpoints from '../endpoints';
-import config from '@/config/index';
-import { errors as basicErrors } from './errors';
-import { schemas, convertSchemaToOpenApiSchema } from './schemas';
+import endpoints from '../endpoints.js';
+import config from '@/config/index.js';
+import { errors as basicErrors } from './errors.js';
+import { schemas, convertSchemaToOpenApiSchema } from './schemas.js';
 
 export function genOpenapiSpec(lang = 'ja-JP') {
 	const spec = {
diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts
index 5d062168e7..14bef9cab1 100644
--- a/packages/backend/src/server/api/openapi/schemas.ts
+++ b/packages/backend/src/server/api/openapi/schemas.ts
@@ -1,4 +1,4 @@
-import { refs, Schema } from '@/misc/schema';
+import { refs, Schema } from '@/misc/schema.js';
 
 export function convertSchemaToOpenApiSchema(schema: Schema) {
 	const res: any = schema;
diff --git a/packages/backend/src/server/api/private/signin.ts b/packages/backend/src/server/api/private/signin.ts
index 7b733b768d..b0f88948a0 100644
--- a/packages/backend/src/server/api/private/signin.ts
+++ b/packages/backend/src/server/api/private/signin.ts
@@ -1,13 +1,13 @@
-import * as Koa from 'koa';
-import * as bcrypt from 'bcryptjs';
+import Koa from 'koa';
+import bcrypt from 'bcryptjs';
 import * as speakeasy from 'speakeasy';
-import signin from '../common/signin';
-import config from '@/config/index';
-import { Users, Signins, UserProfiles, UserSecurityKeys, AttestationChallenges } from '@/models/index';
-import { ILocalUser } from '@/models/entities/user';
-import { genId } from '@/misc/gen-id';
-import { verifyLogin, hash } from '../2fa';
-import { randomBytes } from 'crypto';
+import signin from '../common/signin.js';
+import config from '@/config/index.js';
+import { Users, Signins, UserProfiles, UserSecurityKeys, AttestationChallenges } from '@/models/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { genId } from '@/misc/gen-id.js';
+import { verifyLogin, hash } from '../2fa.js';
+import { randomBytes } from 'node:crypto';
 
 export default async (ctx: Koa.Context) => {
 	ctx.set('Access-Control-Allow-Origin', config.url);
diff --git a/packages/backend/src/server/api/private/signup-pending.ts b/packages/backend/src/server/api/private/signup-pending.ts
index c0638a1cda..1a667ddb43 100644
--- a/packages/backend/src/server/api/private/signup-pending.ts
+++ b/packages/backend/src/server/api/private/signup-pending.ts
@@ -1,7 +1,7 @@
-import * as Koa from 'koa';
-import { Users, UserPendings, UserProfiles } from '@/models/index';
-import { signup } from '../common/signup';
-import signin from '../common/signin';
+import Koa from 'koa';
+import { Users, UserPendings, UserProfiles } from '@/models/index.js';
+import { signup } from '../common/signup.js';
+import signin from '../common/signin.js';
 
 export default async (ctx: Koa.Context) => {
 	const body = ctx.request.body;
diff --git a/packages/backend/src/server/api/private/signup.ts b/packages/backend/src/server/api/private/signup.ts
index d42c270bb0..01f284a57f 100644
--- a/packages/backend/src/server/api/private/signup.ts
+++ b/packages/backend/src/server/api/private/signup.ts
@@ -1,14 +1,14 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 import rndstr from 'rndstr';
-import * as bcrypt from 'bcryptjs';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { verifyHcaptcha, verifyRecaptcha } from '@/misc/captcha';
-import { Users, RegistrationTickets, UserPendings } from '@/models/index';
-import { signup } from '../common/signup';
-import config from '@/config';
-import { sendEmail } from '@/services/send-email';
-import { genId } from '@/misc/gen-id';
-import { validateEmailForAccount } from '@/services/validate-email-for-account';
+import bcrypt from 'bcryptjs';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { verifyHcaptcha, verifyRecaptcha } from '@/misc/captcha.js';
+import { Users, RegistrationTickets, UserPendings } from '@/models/index.js';
+import { signup } from '../common/signup.js';
+import config from '@/config/index.js';
+import { sendEmail } from '@/services/send-email.js';
+import { genId } from '@/misc/gen-id.js';
+import { validateEmailForAccount } from '@/services/validate-email-for-account.js';
 
 export default async (ctx: Koa.Context) => {
 	const body = ctx.request.body;
diff --git a/packages/backend/src/server/api/service/discord.ts b/packages/backend/src/server/api/service/discord.ts
index dd731c422e..089f7de0cd 100644
--- a/packages/backend/src/server/api/service/discord.ts
+++ b/packages/backend/src/server/api/service/discord.ts
@@ -1,15 +1,15 @@
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
-import { getJson } from '@/misc/fetch';
+import Koa from 'koa';
+import Router from '@koa/router';
+import { getJson } from '@/misc/fetch.js';
 import { OAuth2 } from 'oauth';
-import config from '@/config/index';
-import { publishMainStream } from '@/services/stream';
-import { redisClient } from '../../../db/redis';
+import config from '@/config/index.js';
+import { publishMainStream } from '@/services/stream.js';
+import { redisClient } from '../../../db/redis.js';
 import { v4 as uuid } from 'uuid';
-import signin from '../common/signin';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Users, UserProfiles } from '@/models/index';
-import { ILocalUser } from '@/models/entities/user';
+import signin from '../common/signin.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Users, UserProfiles } from '@/models/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
 
 function getUserToken(ctx: Koa.BaseContext): string | null {
 	return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
diff --git a/packages/backend/src/server/api/service/github.ts b/packages/backend/src/server/api/service/github.ts
index b23219986a..ce032db181 100644
--- a/packages/backend/src/server/api/service/github.ts
+++ b/packages/backend/src/server/api/service/github.ts
@@ -1,15 +1,15 @@
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
-import { getJson } from '@/misc/fetch';
+import Koa from 'koa';
+import Router from '@koa/router';
+import { getJson } from '@/misc/fetch.js';
 import { OAuth2 } from 'oauth';
-import config from '@/config/index';
-import { publishMainStream } from '@/services/stream';
-import { redisClient } from '../../../db/redis';
+import config from '@/config/index.js';
+import { publishMainStream } from '@/services/stream.js';
+import { redisClient } from '../../../db/redis.js';
 import { v4 as uuid } from 'uuid';
-import signin from '../common/signin';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Users, UserProfiles } from '@/models/index';
-import { ILocalUser } from '@/models/entities/user';
+import signin from '../common/signin.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Users, UserProfiles } from '@/models/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
 
 function getUserToken(ctx: Koa.BaseContext): string | null {
 	return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
diff --git a/packages/backend/src/server/api/service/twitter.ts b/packages/backend/src/server/api/service/twitter.ts
index bca00b7924..e6e4398fa2 100644
--- a/packages/backend/src/server/api/service/twitter.ts
+++ b/packages/backend/src/server/api/service/twitter.ts
@@ -1,14 +1,14 @@
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
+import Koa from 'koa';
+import Router from '@koa/router';
 import { v4 as uuid } from 'uuid';
 import autwh from 'autwh';
-import { redisClient } from '../../../db/redis';
-import { publishMainStream } from '@/services/stream';
-import config from '@/config/index';
-import signin from '../common/signin';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Users, UserProfiles } from '@/models/index';
-import { ILocalUser } from '@/models/entities/user';
+import { redisClient } from '../../../db/redis.js';
+import { publishMainStream } from '@/services/stream.js';
+import config from '@/config/index.js';
+import signin from '../common/signin.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Users, UserProfiles } from '@/models/index.js';
+import { ILocalUser } from '@/models/entities/user.js';
 
 function getUserToken(ctx: Koa.BaseContext): string | null {
 	return ((ctx.headers['cookie'] || '').match(/igi=(\w+)/) || [null, null])[1];
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
index 98337bb318..d2cc5122d5 100644
--- a/packages/backend/src/server/api/stream/channel.ts
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -1,4 +1,3 @@
-import autobind from 'autobind-decorator';
 import Connection from '.';
 
 /**
@@ -44,7 +43,6 @@ export default abstract class Channel {
 		this.connection = connection;
 	}
 
-	@autobind
 	public send(typeOrPayload: any, payload?: any) {
 		const type = payload === undefined ? typeOrPayload.type : typeOrPayload;
 		const body = payload === undefined ? typeOrPayload.body : payload;
diff --git a/packages/backend/src/server/api/stream/channels/admin.ts b/packages/backend/src/server/api/stream/channels/admin.ts
index 1ff932d1dd..945182ea10 100644
--- a/packages/backend/src/server/api/stream/channels/admin.ts
+++ b/packages/backend/src/server/api/stream/channels/admin.ts
@@ -1,12 +1,10 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
+import Channel from '../channel.js';
 
 export default class extends Channel {
 	public readonly chName = 'admin';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
 	public async init(params: any) {
 		// Subscribe admin stream
 		this.subscriber.on(`adminStream:${this.user!.id}`, data => {
diff --git a/packages/backend/src/server/api/stream/channels/antenna.ts b/packages/backend/src/server/api/stream/channels/antenna.ts
index 3cbdfebb43..afd14946e1 100644
--- a/packages/backend/src/server/api/stream/channels/antenna.ts
+++ b/packages/backend/src/server/api/stream/channels/antenna.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
-import { Notes } from '@/models/index';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { StreamMessages } from '../types';
+import Channel from '../channel.js';
+import { Notes } from '@/models/index.js';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { StreamMessages } from '../types.js';
 
 export default class extends Channel {
 	public readonly chName = 'antenna';
@@ -11,7 +10,11 @@ export default class extends Channel {
 	public static requireCredential = false;
 	private antennaId: string;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onEvent = this.onEvent.bind(this);
+	}
+
 	public async init(params: any) {
 		this.antennaId = params.antennaId as string;
 
@@ -19,7 +22,6 @@ export default class extends Channel {
 		this.subscriber.on(`antennaStream:${this.antennaId}`, this.onEvent);
 	}
 
-	@autobind
 	private async onEvent(data: StreamMessages['antenna']['payload']) {
 		if (data.type === 'note') {
 			const note = await Notes.pack(data.body.id, this.user, { detail: true });
@@ -37,7 +39,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off(`antennaStream:${this.antennaId}`, this.onEvent);
diff --git a/packages/backend/src/server/api/stream/channels/channel.ts b/packages/backend/src/server/api/stream/channels/channel.ts
index 1e51a81c4b..16ad809395 100644
--- a/packages/backend/src/server/api/stream/channels/channel.ts
+++ b/packages/backend/src/server/api/stream/channels/channel.ts
@@ -1,11 +1,10 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
-import { Notes, Users } from '@/models/index';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { User } from '@/models/entities/user';
-import { StreamMessages } from '../types';
-import { Packed } from '@/misc/schema';
+import Channel from '../channel.js';
+import { Notes, Users } from '@/models/index.js';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { User } from '@/models/entities/user.js';
+import { StreamMessages } from '../types.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'channel';
@@ -15,7 +14,11 @@ export default class extends Channel {
 	private typers: Record<User['id'], Date> = {};
 	private emitTypersIntervalId: ReturnType<typeof setInterval>;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		this.channelId = params.channelId as string;
 
@@ -25,7 +28,6 @@ export default class extends Channel {
 		this.emitTypersIntervalId = setInterval(this.emitTypers, 5000);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		if (note.channelId !== this.channelId) return;
 
@@ -52,7 +54,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	private onEvent(data: StreamMessages['channel']['payload']) {
 		if (data.type === 'typing') {
 			const id = data.body;
@@ -64,7 +65,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	private async emitTypers() {
 		const now = new Date();
 
@@ -81,7 +81,6 @@ export default class extends Channel {
 		});
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/drive.ts b/packages/backend/src/server/api/stream/channels/drive.ts
index 4112dd9b04..140255acd1 100644
--- a/packages/backend/src/server/api/stream/channels/drive.ts
+++ b/packages/backend/src/server/api/stream/channels/drive.ts
@@ -1,12 +1,10 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
+import Channel from '../channel.js';
 
 export default class extends Channel {
 	public readonly chName = 'drive';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
 	public async init(params: any) {
 		// Subscribe drive stream
 		this.subscriber.on(`driveStream:${this.user!.id}`, data => {
diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts
index ecd87d093d..1c7e038ab2 100644
--- a/packages/backend/src/server/api/stream/channels/global-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts
@@ -1,19 +1,22 @@
-import autobind from 'autobind-decorator';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import Channel from '../channel';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Notes } from '@/models/index';
-import { checkWordMute } from '@/misc/check-word-mute';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { isInstanceMuted } from '@/misc/is-instance-muted';
-import { Packed } from '@/misc/schema';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import Channel from '../channel.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Notes } from '@/models/index.js';
+import { checkWordMute } from '@/misc/check-word-mute.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { isInstanceMuted } from '@/misc/is-instance-muted.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'globalTimeline';
 	public static shouldShare = true;
 	public static requireCredential = false;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		const meta = await fetchMeta();
 		if (meta.disableGlobalTimeline) {
@@ -24,7 +27,6 @@ export default class extends Channel {
 		this.subscriber.on('notesStream', this.onNote);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		if (note.visibility !== 'public') return;
 		if (note.channelId != null) return;
@@ -69,7 +71,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/hashtag.ts b/packages/backend/src/server/api/stream/channels/hashtag.ts
index 820095dfcf..1b7a58022f 100644
--- a/packages/backend/src/server/api/stream/channels/hashtag.ts
+++ b/packages/backend/src/server/api/stream/channels/hashtag.ts
@@ -1,10 +1,9 @@
-import autobind from 'autobind-decorator';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import Channel from '../channel';
-import { Notes } from '@/models/index';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { Packed } from '@/misc/schema';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import Channel from '../channel.js';
+import { Notes } from '@/models/index.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'hashtag';
@@ -12,7 +11,11 @@ export default class extends Channel {
 	public static requireCredential = false;
 	private q: string[][];
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		this.q = params.q;
 
@@ -22,7 +25,6 @@ export default class extends Channel {
 		this.subscriber.on('notesStream', this.onNote);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		const noteTags = note.tags ? note.tags.map((t: string) => t.toLowerCase()) : [];
 		const matched = this.q.some(tags => tags.every(tag => noteTags.includes(normalizeForSearch(tag))));
@@ -45,7 +47,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index 445db5c382..3a8e55202a 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -1,24 +1,26 @@
-import autobind from 'autobind-decorator';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import Channel from '../channel';
-import { Notes } from '@/models/index';
-import { checkWordMute } from '@/misc/check-word-mute';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { isInstanceMuted } from '@/misc/is-instance-muted';
-import { Packed } from '@/misc/schema';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import Channel from '../channel.js';
+import { Notes } from '@/models/index.js';
+import { checkWordMute } from '@/misc/check-word-mute.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { isInstanceMuted } from '@/misc/is-instance-muted.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'homeTimeline';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		// Subscribe events
 		this.subscriber.on('notesStream', this.onNote);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		if (note.channelId) {
 			if (!this.followingChannels.has(note.channelId)) return;
@@ -77,7 +79,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
index c0be71fe2d..f3ceeffa1a 100644
--- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
@@ -1,19 +1,22 @@
-import autobind from 'autobind-decorator';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import Channel from '../channel';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Notes } from '@/models/index';
-import { checkWordMute } from '@/misc/check-word-mute';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { isInstanceMuted } from '@/misc/is-instance-muted';
-import { Packed } from '@/misc/schema';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import Channel from '../channel.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Notes } from '@/models/index.js';
+import { checkWordMute } from '@/misc/check-word-mute.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { isInstanceMuted } from '@/misc/is-instance-muted.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'hybridTimeline';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		const meta = await fetchMeta();
 		if (meta.disableLocalTimeline && !this.user!.isAdmin && !this.user!.isModerator) return;
@@ -22,7 +25,6 @@ export default class extends Channel {
 		this.subscriber.on('notesStream', this.onNote);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		// チャンネルの投稿ではなく、自分自身の投稿 または
 		// チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または
@@ -85,7 +87,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/index.ts b/packages/backend/src/server/api/stream/channels/index.ts
index f3826c4cf7..d422edde87 100644
--- a/packages/backend/src/server/api/stream/channels/index.ts
+++ b/packages/backend/src/server/api/stream/channels/index.ts
@@ -1,18 +1,18 @@
-import main from './main';
-import homeTimeline from './home-timeline';
-import localTimeline from './local-timeline';
-import hybridTimeline from './hybrid-timeline';
-import globalTimeline from './global-timeline';
-import serverStats from './server-stats';
-import queueStats from './queue-stats';
-import userList from './user-list';
-import antenna from './antenna';
-import messaging from './messaging';
-import messagingIndex from './messaging-index';
-import drive from './drive';
-import hashtag from './hashtag';
-import channel from './channel';
-import admin from './admin';
+import main from './main.js';
+import homeTimeline from './home-timeline.js';
+import localTimeline from './local-timeline.js';
+import hybridTimeline from './hybrid-timeline.js';
+import globalTimeline from './global-timeline.js';
+import serverStats from './server-stats.js';
+import queueStats from './queue-stats.js';
+import userList from './user-list.js';
+import antenna from './antenna.js';
+import messaging from './messaging.js';
+import messagingIndex from './messaging-index.js';
+import drive from './drive.js';
+import hashtag from './hashtag.js';
+import channel from './channel.js';
+import admin from './admin.js';
 
 export default {
 	main,
diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts
index ae8f62ba61..4e198482a0 100644
--- a/packages/backend/src/server/api/stream/channels/local-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts
@@ -1,18 +1,21 @@
-import autobind from 'autobind-decorator';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import Channel from '../channel';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Notes } from '@/models/index';
-import { checkWordMute } from '@/misc/check-word-mute';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { Packed } from '@/misc/schema';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import Channel from '../channel.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Notes } from '@/models/index.js';
+import { checkWordMute } from '@/misc/check-word-mute.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'localTimeline';
 	public static shouldShare = true;
 	public static requireCredential = false;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		const meta = await fetchMeta();
 		if (meta.disableLocalTimeline) {
@@ -23,7 +26,6 @@ export default class extends Channel {
 		this.subscriber.on('notesStream', this.onNote);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		if (note.user.host !== null) return;
 		if (note.visibility !== 'public') return;
@@ -66,7 +68,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off('notesStream', this.onNote);
diff --git a/packages/backend/src/server/api/stream/channels/main.ts b/packages/backend/src/server/api/stream/channels/main.ts
index b41eae7c71..9cfea0bfc4 100644
--- a/packages/backend/src/server/api/stream/channels/main.ts
+++ b/packages/backend/src/server/api/stream/channels/main.ts
@@ -1,14 +1,12 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
-import { Notes } from '@/models/index';
-import { isInstanceMuted, isUserFromMutedInstance } from '@/misc/is-instance-muted';
+import Channel from '../channel.js';
+import { Notes } from '@/models/index.js';
+import { isInstanceMuted, isUserFromMutedInstance } from '@/misc/is-instance-muted.js';
 
 export default class extends Channel {
 	public readonly chName = 'main';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
 	public async init(params: any) {
 		// Subscribe main stream channel
 		this.subscriber.on(`mainStream:${this.user!.id}`, async data => {
diff --git a/packages/backend/src/server/api/stream/channels/messaging-index.ts b/packages/backend/src/server/api/stream/channels/messaging-index.ts
index 0c495398ab..b930785d20 100644
--- a/packages/backend/src/server/api/stream/channels/messaging-index.ts
+++ b/packages/backend/src/server/api/stream/channels/messaging-index.ts
@@ -1,12 +1,10 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
+import Channel from '../channel.js';
 
 export default class extends Channel {
 	public readonly chName = 'messagingIndex';
 	public static shouldShare = true;
 	public static requireCredential = true;
 
-	@autobind
 	public async init(params: any) {
 		// Subscribe messaging index stream
 		this.subscriber.on(`messagingIndexStream:${this.user!.id}`, data => {
diff --git a/packages/backend/src/server/api/stream/channels/messaging.ts b/packages/backend/src/server/api/stream/channels/messaging.ts
index d8fccf0763..94bbdeca52 100644
--- a/packages/backend/src/server/api/stream/channels/messaging.ts
+++ b/packages/backend/src/server/api/stream/channels/messaging.ts
@@ -1,10 +1,9 @@
-import autobind from 'autobind-decorator';
-import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivity } from '../../common/read-messaging-message';
-import Channel from '../channel';
-import { UserGroupJoinings, Users, MessagingMessages } from '@/models/index';
-import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { UserGroup } from '@/models/entities/user-group';
-import { StreamMessages } from '../types';
+import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivity } from '../../common/read-messaging-message.js';
+import Channel from '../channel.js';
+import { UserGroupJoinings, Users, MessagingMessages } from '@/models/index.js';
+import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { StreamMessages } from '../types.js';
 
 export default class extends Channel {
 	public readonly chName = 'messaging';
@@ -18,7 +17,13 @@ export default class extends Channel {
 	private typers: Record<User['id'], Date> = {};
 	private emitTypersIntervalId: ReturnType<typeof setInterval>;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onEvent = this.onEvent.bind(this);
+		this.onMessage = this.onMessage.bind(this);
+		this.emitTypers = this.emitTypers.bind(this);
+	}
+
 	public async init(params: any) {
 		this.otherpartyId = params.otherparty;
 		this.otherparty = this.otherpartyId ? await Users.findOneOrFail({ id: this.otherpartyId }) : null;
@@ -46,7 +51,6 @@ export default class extends Channel {
 		this.subscriber.on(this.subCh, this.onEvent);
 	}
 
-	@autobind
 	private onEvent(data: StreamMessages['messaging']['payload'] | StreamMessages['groupMessaging']['payload']) {
 		if (data.type === 'typing') {
 			const id = data.body;
@@ -60,7 +64,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	public onMessage(type: string, body: any) {
 		switch (type) {
 			case 'read':
@@ -80,7 +83,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	private async emitTypers() {
 		const now = new Date();
 
@@ -97,7 +99,6 @@ export default class extends Channel {
 		});
 	}
 
-	@autobind
 	public dispose() {
 		this.subscriber.off(this.subCh, this.onEvent);
 
diff --git a/packages/backend/src/server/api/stream/channels/queue-stats.ts b/packages/backend/src/server/api/stream/channels/queue-stats.ts
index be18438fa3..043d03ab8d 100644
--- a/packages/backend/src/server/api/stream/channels/queue-stats.ts
+++ b/packages/backend/src/server/api/stream/channels/queue-stats.ts
@@ -1,25 +1,27 @@
-import autobind from 'autobind-decorator';
-import Xev from 'xev';
-import Channel from '../channel';
+import { default as Xev } from 'xev';
+import Channel from '../channel.js';
 
-const ev = new Xev();
+const ev = new Xev.default();
 
 export default class extends Channel {
 	public readonly chName = 'queueStats';
 	public static shouldShare = true;
 	public static requireCredential = false;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onStats = this.onStats.bind(this);
+		this.onMessage = this.onMessage.bind(this);
+	}
+
 	public async init(params: any) {
 		ev.addListener('queueStats', this.onStats);
 	}
 
-	@autobind
 	private onStats(stats: any) {
 		this.send('stats', stats);
 	}
 
-	@autobind
 	public onMessage(type: string, body: any) {
 		switch (type) {
 			case 'requestLog':
@@ -34,7 +36,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	public dispose() {
 		ev.removeListener('queueStats', this.onStats);
 	}
diff --git a/packages/backend/src/server/api/stream/channels/server-stats.ts b/packages/backend/src/server/api/stream/channels/server-stats.ts
index df89b4c750..0da1895767 100644
--- a/packages/backend/src/server/api/stream/channels/server-stats.ts
+++ b/packages/backend/src/server/api/stream/channels/server-stats.ts
@@ -1,25 +1,27 @@
-import autobind from 'autobind-decorator';
-import Xev from 'xev';
-import Channel from '../channel';
+import { default as Xev } from 'xev';
+import Channel from '../channel.js';
 
-const ev = new Xev();
+const ev = new Xev.default();
 
 export default class extends Channel {
 	public readonly chName = 'serverStats';
 	public static shouldShare = true;
 	public static requireCredential = false;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.onStats = this.onStats.bind(this);
+		this.onMessage = this.onMessage.bind(this);
+	}
+
 	public async init(params: any) {
 		ev.addListener('serverStats', this.onStats);
 	}
 
-	@autobind
 	private onStats(stats: any) {
 		this.send('stats', stats);
 	}
 
-	@autobind
 	public onMessage(type: string, body: any) {
 		switch (type) {
 			case 'requestLog':
@@ -34,7 +36,6 @@ export default class extends Channel {
 		}
 	}
 
-	@autobind
 	public dispose() {
 		ev.removeListener('serverStats', this.onStats);
 	}
diff --git a/packages/backend/src/server/api/stream/channels/user-list.ts b/packages/backend/src/server/api/stream/channels/user-list.ts
index b75920a180..57523c8488 100644
--- a/packages/backend/src/server/api/stream/channels/user-list.ts
+++ b/packages/backend/src/server/api/stream/channels/user-list.ts
@@ -1,10 +1,9 @@
-import autobind from 'autobind-decorator';
-import Channel from '../channel';
-import { Notes, UserListJoinings, UserLists } from '@/models/index';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import { User } from '@/models/entities/user';
-import { isBlockerUserRelated } from '@/misc/is-blocker-user-related';
-import { Packed } from '@/misc/schema';
+import Channel from '../channel.js';
+import { Notes, UserListJoinings, UserLists } from '@/models/index.js';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import { User } from '@/models/entities/user.js';
+import { isBlockerUserRelated } from '@/misc/is-blocker-user-related.js';
+import { Packed } from '@/misc/schema.js';
 
 export default class extends Channel {
 	public readonly chName = 'userList';
@@ -14,7 +13,12 @@ export default class extends Channel {
 	public listUsers: User['id'][] = [];
 	private listUsersClock: NodeJS.Timer;
 
-	@autobind
+	constructor(id: string, connection: Channel['connection']) {
+		super(id, connection);
+		this.updateListUsers = this.updateListUsers.bind(this);
+		this.onNote = this.onNote.bind(this);
+	}
+
 	public async init(params: any) {
 		this.listId = params.listId as string;
 
@@ -34,7 +38,6 @@ export default class extends Channel {
 		this.listUsersClock = setInterval(this.updateListUsers, 5000);
 	}
 
-	@autobind
 	private async updateListUsers() {
 		const users = await UserListJoinings.find({
 			where: {
@@ -46,7 +49,6 @@ export default class extends Channel {
 		this.listUsers = users.map(x => x.userId);
 	}
 
-	@autobind
 	private async onNote(note: Packed<'Note'>) {
 		if (!this.listUsers.includes(note.userId)) return;
 
@@ -81,7 +83,6 @@ export default class extends Channel {
 		this.send('note', note);
 	}
 
-	@autobind
 	public dispose() {
 		// Unsubscribe events
 		this.subscriber.off(`userListStream:${this.listId}`, this.send);
diff --git a/packages/backend/src/server/api/stream/index.ts b/packages/backend/src/server/api/stream/index.ts
index e0bb8033a2..0cb38e2a99 100644
--- a/packages/backend/src/server/api/stream/index.ts
+++ b/packages/backend/src/server/api/stream/index.ts
@@ -1,21 +1,20 @@
-import autobind from 'autobind-decorator';
 import * as websocket from 'websocket';
-import { readNotification } from '../common/read-notification';
-import call from '../call';
-import readNote from '@/services/note/read';
-import Channel from './channel';
-import channels from './channels/index';
+import { readNotification } from '../common/read-notification.js';
+import call from '../call.js';
+import readNote from '@/services/note/read.js';
+import Channel from './channel.js';
+import channels from './channels/index.js';
 import { EventEmitter } from 'events';
-import { User } from '@/models/entities/user';
-import { Channel as ChannelModel } from '@/models/entities/channel';
-import { Users, Followings, Mutings, UserProfiles, ChannelFollowings, Blockings } from '@/models/index';
-import { ApiError } from '../error';
-import { AccessToken } from '@/models/entities/access-token';
-import { UserProfile } from '@/models/entities/user-profile';
-import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '@/services/stream';
-import { UserGroup } from '@/models/entities/user-group';
-import { StreamEventEmitter, StreamMessages } from './types';
-import { Packed } from '@/misc/schema';
+import { User } from '@/models/entities/user.js';
+import { Channel as ChannelModel } from '@/models/entities/channel.js';
+import { Users, Followings, Mutings, UserProfiles, ChannelFollowings, Blockings } from '@/models/index.js';
+import { ApiError } from '../error.js';
+import { AccessToken } from '@/models/entities/access-token.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
+import { publishChannelStream, publishGroupMessagingStream, publishMessagingStream } from '@/services/stream.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { StreamEventEmitter, StreamMessages } from './types.js';
+import { Packed } from '@/misc/schema.js';
 
 /**
  * Main stream connection
@@ -38,13 +37,18 @@ export default class Connection {
 		wsConnection: websocket.connection,
 		subscriber: EventEmitter,
 		user: User | null | undefined,
-		token: AccessToken | null | undefined
+		token: AccessToken | null | undefined,
 	) {
 		this.wsConnection = wsConnection;
 		this.subscriber = subscriber;
 		if (user) this.user = user;
 		if (token) this.token = token;
 
+		this.onWsConnectionMessage = this.onWsConnectionMessage.bind(this);
+		this.onUserEvent = this.onUserEvent.bind(this);
+		this.onNoteStreamMessage = this.onNoteStreamMessage.bind(this);
+		this.onBroadcastMessage = this.onBroadcastMessage.bind(this);
+
 		this.wsConnection.on('message', this.onWsConnectionMessage);
 
 		this.subscriber.on('broadcast', data => {
@@ -62,7 +66,6 @@ export default class Connection {
 		}
 	}
 
-	@autobind
 	private onUserEvent(data: StreamMessages['user']['payload']) { // { type, body }と展開するとそれぞれ型が分離してしまう
 		switch (data.type) {
 			case 'follow':
@@ -108,7 +111,6 @@ export default class Connection {
 	/**
 	 * クライアントからメッセージ受信時
 	 */
-	@autobind
 	private async onWsConnectionMessage(data: websocket.Message) {
 		if (data.type !== 'utf8') return;
 		if (data.utf8Data == null) return;
@@ -144,12 +146,10 @@ export default class Connection {
 		}
 	}
 
-	@autobind
 	private onBroadcastMessage(data: StreamMessages['broadcast']['payload']) {
 		this.sendMessageToWs(data.type, data.body);
 	}
 
-	@autobind
 	public cacheNote(note: Packed<'Note'>) {
 		const add = (note: Packed<'Note'>) => {
 			const existIndex = this.cachedNotes.findIndex(n => n.id === note.id);
@@ -169,7 +169,6 @@ export default class Connection {
 		if (note.renote) add(note.renote);
 	}
 
-	@autobind
 	private readNote(body: any) {
 		const id = body.id;
 
@@ -187,7 +186,6 @@ export default class Connection {
 	/**
 	 * APIリクエスト要求時
 	 */
-	@autobind
 	private async onApiRequest(payload: any) {
 		// 新鮮なデータを利用するためにユーザーをフェッチ
 		const user = this.user ? await Users.findOne(this.user.id) : null;
@@ -210,7 +208,6 @@ export default class Connection {
 		});
 	}
 
-	@autobind
 	private onReadNotification(payload: any) {
 		if (!payload.id) return;
 		readNotification(this.user!.id, [payload.id]);
@@ -219,7 +216,6 @@ export default class Connection {
 	/**
 	 * 投稿購読要求時
 	 */
-	@autobind
 	private onSubscribeNote(payload: any) {
 		if (!payload.id) return;
 
@@ -237,7 +233,6 @@ export default class Connection {
 	/**
 	 * 投稿購読解除要求時
 	 */
-	@autobind
 	private onUnsubscribeNote(payload: any) {
 		if (!payload.id) return;
 
@@ -248,7 +243,6 @@ export default class Connection {
 		}
 	}
 
-	@autobind
 	private async onNoteStreamMessage(data: StreamMessages['note']['payload']) {
 		this.sendMessageToWs('noteUpdated', {
 			id: data.body.id,
@@ -260,7 +254,6 @@ export default class Connection {
 	/**
 	 * チャンネル接続要求時
 	 */
-	@autobind
 	private onChannelConnectRequested(payload: any) {
 		const { channel, id, params, pong } = payload;
 		this.connectChannel(id, params, channel, pong);
@@ -269,7 +262,6 @@ export default class Connection {
 	/**
 	 * チャンネル切断要求時
 	 */
-	@autobind
 	private onChannelDisconnectRequested(payload: any) {
 		const { id } = payload;
 		this.disconnectChannel(id);
@@ -278,7 +270,6 @@ export default class Connection {
 	/**
 	 * クライアントにメッセージ送信
 	 */
-	@autobind
 	public sendMessageToWs(type: string, payload: any) {
 		this.wsConnection.send(JSON.stringify({
 			type: type,
@@ -289,7 +280,6 @@ export default class Connection {
 	/**
 	 * チャンネルに接続
 	 */
-	@autobind
 	public connectChannel(id: string, params: any, channel: string, pong = false) {
 		if ((channels as any)[channel].requireCredential && this.user == null) {
 			return;
@@ -315,7 +305,6 @@ export default class Connection {
 	 * チャンネルから切断
 	 * @param id チャンネルコネクションID
 	 */
-	@autobind
 	public disconnectChannel(id: string) {
 		const channel = this.channels.find(c => c.id === id);
 
@@ -329,7 +318,6 @@ export default class Connection {
 	 * チャンネルへメッセージ送信要求時
 	 * @param data メッセージ
 	 */
-	@autobind
 	private onChannelMessageRequested(data: any) {
 		const channel = this.channels.find(c => c.id === data.id);
 		if (channel != null && channel.onMessage != null) {
@@ -337,14 +325,12 @@ export default class Connection {
 		}
 	}
 
-	@autobind
 	private typingOnChannel(channel: ChannelModel['id']) {
 		if (this.user) {
 			publishChannelStream(channel, 'typing', this.user.id);
 		}
 	}
 
-	@autobind
 	private typingOnMessaging(param: { partner?: User['id']; group?: UserGroup['id']; }) {
 		if (this.user) {
 			if (param.partner) {
@@ -355,7 +341,6 @@ export default class Connection {
 		}
 	}
 
-	@autobind
 	private async updateFollowing() {
 		const followings = await Followings.find({
 			where: {
@@ -367,7 +352,6 @@ export default class Connection {
 		this.following = new Set<string>(followings.map(x => x.followeeId));
 	}
 
-	@autobind
 	private async updateMuting() {
 		const mutings = await Mutings.find({
 			where: {
@@ -379,7 +363,6 @@ export default class Connection {
 		this.muting = new Set<string>(mutings.map(x => x.muteeId));
 	}
 
-	@autobind
 	private async updateBlocking() { // ここでいうBlockingは被Blockingの意
 		const blockings = await Blockings.find({
 			where: {
@@ -391,7 +374,6 @@ export default class Connection {
 		this.blocking = new Set<string>(blockings.map(x => x.blockerId));
 	}
 
-	@autobind
 	private async updateFollowingChannels() {
 		const followings = await ChannelFollowings.find({
 			where: {
@@ -403,7 +385,6 @@ export default class Connection {
 		this.followingChannels = new Set<string>(followings.map(x => x.followeeId));
 	}
 
-	@autobind
 	private async updateUserProfile() {
 		this.userProfile = await UserProfiles.findOne({
 			userId: this.user!.id,
@@ -413,7 +394,6 @@ export default class Connection {
 	/**
 	 * ストリームが切れたとき
 	 */
-	@autobind
 	public dispose() {
 		for (const c of this.channels.filter(c => c.dispose)) {
 			if (c.dispose) c.dispose();
diff --git a/packages/backend/src/server/api/stream/types.ts b/packages/backend/src/server/api/stream/types.ts
index 921856b38d..90cf59038d 100644
--- a/packages/backend/src/server/api/stream/types.ts
+++ b/packages/backend/src/server/api/stream/types.ts
@@ -1,20 +1,20 @@
 import { EventEmitter } from 'events';
 import Emitter from 'strict-event-emitter-types';
-import { Channel } from '@/models/entities/channel';
-import { User } from '@/models/entities/user';
-import { UserProfile } from '@/models/entities/user-profile';
-import { Note } from '@/models/entities/note';
-import { Antenna } from '@/models/entities/antenna';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFolder } from '@/models/entities/drive-folder';
-import { Emoji } from '@/models/entities/emoji';
-import { UserList } from '@/models/entities/user-list';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { UserGroup } from '@/models/entities/user-group';
-import { AbuseUserReport } from '@/models/entities/abuse-user-report';
-import { Signin } from '@/models/entities/signin';
-import { Page } from '@/models/entities/page';
-import { Packed } from '@/misc/schema';
+import { Channel } from '@/models/entities/channel.js';
+import { User } from '@/models/entities/user.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
+import { Note } from '@/models/entities/note.js';
+import { Antenna } from '@/models/entities/antenna.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFolder } from '@/models/entities/drive-folder.js';
+import { Emoji } from '@/models/entities/emoji.js';
+import { UserList } from '@/models/entities/user-list.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { AbuseUserReport } from '@/models/entities/abuse-user-report.js';
+import { Signin } from '@/models/entities/signin.js';
+import { Page } from '@/models/entities/page.js';
+import { Packed } from '@/misc/schema.js';
 
 //#region Stream type-body definitions
 export interface InternalStreamTypes {
diff --git a/packages/backend/src/server/api/streaming.ts b/packages/backend/src/server/api/streaming.ts
index b706b1b8df..2a34edac67 100644
--- a/packages/backend/src/server/api/streaming.ts
+++ b/packages/backend/src/server/api/streaming.ts
@@ -1,14 +1,14 @@
 import * as http from 'http';
 import * as websocket from 'websocket';
 
-import MainStreamConnection from './stream/index';
+import MainStreamConnection from './stream/index.js';
 import { ParsedUrlQuery } from 'querystring';
-import authenticate from './authenticate';
+import authenticate from './authenticate.js';
 import { EventEmitter } from 'events';
-import { subsdcriber as redisClient } from '../../db/redis';
-import { Users } from '@/models/index';
+import { subsdcriber as redisClient } from '../../db/redis.js';
+import { Users } from '@/models/index.js';
 
-module.exports = (server: http.Server) => {
+export const initializeStreamingServer = (server: http.Server) => {
 	// Init websocket server
 	const ws = new websocket.server({
 		httpServer: server,
diff --git a/packages/backend/src/server/file/index.ts b/packages/backend/src/server/file/index.ts
index 6fe6110dc9..07a493700a 100644
--- a/packages/backend/src/server/file/index.ts
+++ b/packages/backend/src/server/file/index.ts
@@ -2,16 +2,15 @@
  * File Server
  */
 
-import * as fs from 'fs';
-import { fileURLToPath } from 'url';
-import { dirname } from 'path';
-import * as Koa from 'koa';
-import * as cors from '@koa/cors';
-import * as Router from '@koa/router';
-import sendDriveFile from './send-drive-file';
+import * as fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+import Koa from 'koa';
+import cors from '@koa/cors';
+import Router from '@koa/router';
+import sendDriveFile from './send-drive-file.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 // Init app
@@ -38,4 +37,4 @@ router.get('/:key/(.*)', sendDriveFile);
 // Register router
 app.use(router.routes());
 
-module.exports = app;
+export default app;
diff --git a/packages/backend/src/server/file/send-drive-file.ts b/packages/backend/src/server/file/send-drive-file.ts
index f3c6c518fa..4e2bba0e20 100644
--- a/packages/backend/src/server/file/send-drive-file.ts
+++ b/packages/backend/src/server/file/send-drive-file.ts
@@ -1,23 +1,22 @@
-import * as fs from 'fs';
-import { fileURLToPath } from 'url';
-import { dirname } from 'path';
-import * as Koa from 'koa';
+import * as fs from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+import Koa from 'koa';
 import * as send from 'koa-send';
-import * as rename from 'rename';
+import rename from 'rename';
 import * as tmp from 'tmp';
-import { serverLogger } from '../index';
-import { contentDisposition } from '@/misc/content-disposition';
-import { DriveFiles } from '@/models/index';
-import { InternalStorage } from '@/services/drive/internal-storage';
-import { downloadUrl } from '@/misc/download-url';
-import { detectType } from '@/misc/get-file-info';
-import { convertToJpeg, convertToPng, convertToPngOrJpeg } from '@/services/drive/image-processor';
-import { GenerateVideoThumbnail } from '@/services/drive/generate-video-thumbnail';
-import { StatusError } from '@/misc/fetch';
-import { FILE_TYPE_BROWSERSAFE } from '@/const';
+import { serverLogger } from '../index.js';
+import { contentDisposition } from '@/misc/content-disposition.js';
+import { DriveFiles } from '@/models/index.js';
+import { InternalStorage } from '@/services/drive/internal-storage.js';
+import { downloadUrl } from '@/misc/download-url.js';
+import { detectType } from '@/misc/get-file-info.js';
+import { convertToJpeg, convertToPng, convertToPngOrJpeg } from '@/services/drive/image-processor.js';
+import { GenerateVideoThumbnail } from '@/services/drive/generate-video-thumbnail.js';
+import { StatusError } from '@/misc/fetch.js';
+import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 const assets = `${_dirname}/../../server/file/assets/`;
diff --git a/packages/backend/src/server/index.ts b/packages/backend/src/server/index.ts
index 4d6b402e64..a448925b68 100644
--- a/packages/backend/src/server/index.ts
+++ b/packages/backend/src/server/index.ts
@@ -2,28 +2,32 @@
  * Core Server
  */
 
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 import * as http from 'http';
 import * as http2 from 'http2';
 import * as https from 'https';
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
-import * as mount from 'koa-mount';
-import * as koaLogger from 'koa-logger';
+import Koa from 'koa';
+import Router from '@koa/router';
+import mount from 'koa-mount';
+import koaLogger from 'koa-logger';
 import * as slow from 'koa-slow';
 
-import activityPub from './activitypub';
-import nodeinfo from './nodeinfo';
-import wellKnown from './well-known';
-import config from '@/config/index';
-import apiServer from './api/index';
-import Logger from '@/services/logger';
-import { envOption } from '../env';
-import { UserProfiles, Users } from '@/models/index';
-import { genIdenticon } from '@/misc/gen-identicon';
-import { createTemp } from '@/misc/create-temp';
-import { publishMainStream } from '@/services/stream';
-import * as Acct from 'misskey-js/built/acct';
+import activityPub from './activitypub.js';
+import nodeinfo from './nodeinfo.js';
+import wellKnown from './well-known.js';
+import config from '@/config/index.js';
+import apiServer from './api/index.js';
+import fileServer from './file/index.js';
+import proxyServer from './proxy/index.js';
+import webServer from './web/index.js';
+import Logger from '@/services/logger.js';
+import { envOption } from '../env.js';
+import { UserProfiles, Users } from '@/models/index.js';
+import { genIdenticon } from '@/misc/gen-identicon.js';
+import { createTemp } from '@/misc/create-temp.js';
+import { publishMainStream } from '@/services/stream.js';
+import * as Acct from '@/misc/acct.js';
+import { initializeStreamingServer } from './api/streaming.js';
 
 export const serverLogger = new Logger('server', 'gray', false);
 
@@ -55,8 +59,8 @@ if (config.url.startsWith('https') && !config.disableHsts) {
 }
 
 app.use(mount('/api', apiServer));
-app.use(mount('/files', require('./file')));
-app.use(mount('/proxy', require('./proxy')));
+app.use(mount('/files', fileServer));
+app.use(mount('/proxy', proxyServer));
 
 // Init router
 const router = new Router();
@@ -114,7 +118,7 @@ router.get('/verify-email/:code', async ctx => {
 // Register router
 app.use(router.routes());
 
-app.use(mount(require('./web')));
+app.use(mount(webServer));
 
 function createServer() {
 	if (config.https) {
@@ -133,10 +137,8 @@ function createServer() {
 export const startServer = () => {
 	const server = createServer();
 
-	// Init stream server
-	require('./api/streaming')(server);
+	initializeStreamingServer(server);
 
-	// Listen
 	server.listen(config.port);
 
 	return server;
@@ -145,9 +147,7 @@ export const startServer = () => {
 export default () => new Promise(resolve => {
 	const server = createServer();
 
-	// Init stream server
-	require('./api/streaming')(server);
+	initializeStreamingServer(server);
 
-	// Listen
 	server.listen(config.port, resolve);
 });
diff --git a/packages/backend/src/server/nodeinfo.ts b/packages/backend/src/server/nodeinfo.ts
index 25eca291db..f4b56fc8a5 100644
--- a/packages/backend/src/server/nodeinfo.ts
+++ b/packages/backend/src/server/nodeinfo.ts
@@ -1,9 +1,9 @@
-import * as Router from '@koa/router';
-import config from '@/config/index';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Users, Notes } from '@/models/index';
+import Router from '@koa/router';
+import config from '@/config/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Users, Notes } from '@/models/index.js';
 import { MoreThan } from 'typeorm';
-import { MAX_NOTE_TEXT_LENGTH } from '@/const';
+import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 
 const router = new Router();
 
diff --git a/packages/backend/src/server/proxy/index.ts b/packages/backend/src/server/proxy/index.ts
index 7a3094311c..506ba10ef1 100644
--- a/packages/backend/src/server/proxy/index.ts
+++ b/packages/backend/src/server/proxy/index.ts
@@ -2,10 +2,10 @@
  * Media Proxy
  */
 
-import * as Koa from 'koa';
-import * as cors from '@koa/cors';
-import * as Router from '@koa/router';
-import { proxyMedia } from './proxy-media';
+import Koa from 'koa';
+import cors from '@koa/cors';
+import Router from '@koa/router';
+import { proxyMedia } from './proxy-media.js';
 
 // Init app
 const app = new Koa();
@@ -23,4 +23,4 @@ router.get('/:url*', proxyMedia);
 // Register router
 app.use(router.routes());
 
-module.exports = app;
+export default app;
diff --git a/packages/backend/src/server/proxy/proxy-media.ts b/packages/backend/src/server/proxy/proxy-media.ts
index b7dcd0292b..3cc5b827a6 100644
--- a/packages/backend/src/server/proxy/proxy-media.ts
+++ b/packages/backend/src/server/proxy/proxy-media.ts
@@ -1,12 +1,12 @@
-import * as fs from 'fs';
-import * as Koa from 'koa';
-import { serverLogger } from '../index';
-import { IImage, convertToPng, convertToJpeg } from '@/services/drive/image-processor';
-import { createTemp } from '@/misc/create-temp';
-import { downloadUrl } from '@/misc/download-url';
-import { detectType } from '@/misc/get-file-info';
-import { StatusError } from '@/misc/fetch';
-import { FILE_TYPE_BROWSERSAFE } from '@/const';
+import * as fs from 'node:fs';
+import Koa from 'koa';
+import { serverLogger } from '../index.js';
+import { IImage, convertToPng, convertToJpeg } from '@/services/drive/image-processor.js';
+import { createTemp } from '@/misc/create-temp.js';
+import { downloadUrl } from '@/misc/download-url.js';
+import { detectType } from '@/misc/get-file-info.js';
+import { StatusError } from '@/misc/fetch.js';
+import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
 
 export async function proxyMedia(ctx: Koa.Context) {
 	const url = 'url' in ctx.query ? ctx.query.url : 'https://' + ctx.params.url;
diff --git a/packages/backend/src/server/web/feed.ts b/packages/backend/src/server/web/feed.ts
index db589e086b..b98e3f8bf6 100644
--- a/packages/backend/src/server/web/feed.ts
+++ b/packages/backend/src/server/web/feed.ts
@@ -1,7 +1,7 @@
 import { Feed } from 'feed';
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { Notes, DriveFiles, UserProfiles } from '@/models/index';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { Notes, DriveFiles, UserProfiles } from '@/models/index.js';
 import { In } from 'typeorm';
 
 export default async function(user: User) {
diff --git a/packages/backend/src/server/web/index.ts b/packages/backend/src/server/web/index.ts
index 325121bbaf..cc4c2cc9ca 100644
--- a/packages/backend/src/server/web/index.ts
+++ b/packages/backend/src/server/web/index.ts
@@ -2,24 +2,26 @@
  * Web Client Server
  */
 
-import { dirname } from 'path';
+import { dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
 import ms from 'ms';
-import * as Koa from 'koa';
-import * as Router from '@koa/router';
-import * as send from 'koa-send';
-import * as favicon from 'koa-favicon';
-import * as views from 'koa-views';
+import Koa from 'koa';
+import Router from '@koa/router';
+import send from 'koa-send';
+import favicon from 'koa-favicon';
+import views from 'koa-views';
 
-import packFeed from './feed';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { genOpenapiSpec } from '../api/openapi/gen-spec';
-import config from '@/config/index';
-import { Users, Notes, UserProfiles, Pages, Channels, Clips, GalleryPosts } from '@/models/index';
-import * as Acct from 'misskey-js/built/acct';
-import { getNoteSummary } from '@/misc/get-note-summary';
+import packFeed from './feed.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { genOpenapiSpec } from '../api/openapi/gen-spec.js';
+import config from '@/config/index.js';
+import { Users, Notes, UserProfiles, Pages, Channels, Clips, GalleryPosts } from '@/models/index.js';
+import * as Acct from '@/misc/acct.js';
+import { getNoteSummary } from '@/misc/get-note-summary.js';
+import { urlPreviewHandler } from './url-preview.js';
+import { manifestHandler } from './manifest.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 const staticAssets = `${_dirname}/../../../assets/`;
@@ -105,7 +107,7 @@ router.get('/sw.js', async ctx => {
 });
 
 // Manifest
-router.get('/manifest.json', require('./manifest'));
+router.get('/manifest.json', manifestHandler);
 
 router.get('/robots.txt', async ctx => {
 	await send(ctx as any, '/robots.txt', {
@@ -123,7 +125,7 @@ router.get('/api-doc', async ctx => {
 });
 
 // URL preview endpoint
-router.get('/url', require('./url-preview'));
+router.get('/url', urlPreviewHandler);
 
 router.get('/api.json', async ctx => {
 	ctx.body = genOpenapiSpec();
@@ -426,4 +428,4 @@ router.get('(.*)', async ctx => {
 // Register router
 app.use(router.routes());
 
-module.exports = app;
+export default app;
diff --git a/packages/backend/src/server/web/manifest.ts b/packages/backend/src/server/web/manifest.ts
index 464b893d6b..db3e7a9673 100644
--- a/packages/backend/src/server/web/manifest.ts
+++ b/packages/backend/src/server/web/manifest.ts
@@ -1,8 +1,8 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 import * as manifest from './manifest.json';
-import { fetchMeta } from '@/misc/fetch-meta';
+import { fetchMeta } from '@/misc/fetch-meta.js';
 
-module.exports = async (ctx: Koa.Context) => {
+export const manifestHandler = async (ctx: Koa.Context) => {
 	const json = JSON.parse(JSON.stringify(manifest));
 
 	const instance = await fetchMeta(true);
diff --git a/packages/backend/src/server/web/url-preview.ts b/packages/backend/src/server/web/url-preview.ts
index 26fffbea88..592e6bad54 100644
--- a/packages/backend/src/server/web/url-preview.ts
+++ b/packages/backend/src/server/web/url-preview.ts
@@ -1,14 +1,14 @@
-import * as Koa from 'koa';
+import Koa from 'koa';
 import summaly from 'summaly';
-import { fetchMeta } from '@/misc/fetch-meta';
-import Logger from '@/services/logger';
-import config from '@/config/index';
-import { query } from '@/prelude/url';
-import { getJson } from '@/misc/fetch';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import Logger from '@/services/logger.js';
+import config from '@/config/index.js';
+import { query } from '@/prelude/url.js';
+import { getJson } from '@/misc/fetch.js';
 
 const logger = new Logger('url-preview');
 
-module.exports = async (ctx: Koa.Context) => {
+export const urlPreviewHandler = async (ctx: Koa.Context) => {
 	const url = ctx.query.url;
 	if (typeof url !== 'string') {
 		ctx.status = 400;
diff --git a/packages/backend/src/server/well-known.ts b/packages/backend/src/server/well-known.ts
index d1f13b70bb..7a5d085413 100644
--- a/packages/backend/src/server/well-known.ts
+++ b/packages/backend/src/server/well-known.ts
@@ -1,11 +1,11 @@
-import * as Router from '@koa/router';
+import Router from '@koa/router';
 
-import config from '@/config/index';
-import * as Acct from 'misskey-js/built/acct';
-import { links } from './nodeinfo';
-import { escapeAttribute, escapeValue } from '@/prelude/xml';
-import { Users } from '@/models/index';
-import { User } from '@/models/entities/user';
+import config from '@/config/index.js';
+import * as Acct from '@/misc/acct.js';
+import { links } from './nodeinfo.js';
+import { escapeAttribute, escapeValue } from '@/prelude/xml.js';
+import { Users } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
 
 // Init router
 const router = new Router();
diff --git a/packages/backend/src/services/add-note-to-antenna.ts b/packages/backend/src/services/add-note-to-antenna.ts
index 168e3a614d..e88c387234 100644
--- a/packages/backend/src/services/add-note-to-antenna.ts
+++ b/packages/backend/src/services/add-note-to-antenna.ts
@@ -1,10 +1,10 @@
-import { Antenna } from '@/models/entities/antenna';
-import { Note } from '@/models/entities/note';
-import { AntennaNotes, Mutings, Notes } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { isMutedUserRelated } from '@/misc/is-muted-user-related';
-import { publishAntennaStream, publishMainStream } from '@/services/stream';
-import { User } from '@/models/entities/user';
+import { Antenna } from '@/models/entities/antenna.js';
+import { Note } from '@/models/entities/note.js';
+import { AntennaNotes, Mutings, Notes } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { isMutedUserRelated } from '@/misc/is-muted-user-related.js';
+import { publishAntennaStream, publishMainStream } from '@/services/stream.js';
+import { User } from '@/models/entities/user.js';
 
 export async function addNoteToAntenna(antenna: Antenna, note: Note, noteUser: { id: User['id']; }) {
 	// 通知しない設定になっているか、自分自身の投稿なら既読にする
diff --git a/packages/backend/src/services/blocking/create.ts b/packages/backend/src/services/blocking/create.ts
index 907e4c3116..198d28705e 100644
--- a/packages/backend/src/services/blocking/create.ts
+++ b/packages/backend/src/services/blocking/create.ts
@@ -1,15 +1,15 @@
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import renderBlock from '@/remote/activitypub/renderer/block';
-import { deliver } from '@/queue/index';
-import renderReject from '@/remote/activitypub/renderer/reject';
-import { User } from '@/models/entities/user';
-import { Blockings, Users, FollowRequests, Followings, UserListJoinings, UserLists } from '@/models/index';
-import { perUserFollowingChart } from '@/services/chart/index';
-import { genId } from '@/misc/gen-id';
-import { IdentifiableError } from '@/misc/identifiable-error';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import renderBlock from '@/remote/activitypub/renderer/block.js';
+import { deliver } from '@/queue/index.js';
+import renderReject from '@/remote/activitypub/renderer/reject.js';
+import { User } from '@/models/entities/user.js';
+import { Blockings, Users, FollowRequests, Followings, UserListJoinings, UserLists } from '@/models/index.js';
+import { perUserFollowingChart } from '@/services/chart/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
 
 export default async function(blocker: User, blockee: User) {
 	await Promise.all([
diff --git a/packages/backend/src/services/blocking/delete.ts b/packages/backend/src/services/blocking/delete.ts
index 271bf4854a..c4f3784b05 100644
--- a/packages/backend/src/services/blocking/delete.ts
+++ b/packages/backend/src/services/blocking/delete.ts
@@ -1,10 +1,10 @@
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderBlock from '@/remote/activitypub/renderer/block';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { deliver } from '@/queue/index';
-import Logger from '../logger';
-import { User } from '@/models/entities/user';
-import { Blockings, Users } from '@/models/index';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderBlock from '@/remote/activitypub/renderer/block.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { deliver } from '@/queue/index.js';
+import Logger from '../logger.js';
+import { User } from '@/models/entities/user.js';
+import { Blockings, Users } from '@/models/index.js';
 
 const logger = new Logger('blocking/delete');
 
diff --git a/packages/backend/src/services/chart/charts/active-users.ts b/packages/backend/src/services/chart/charts/active-users.ts
index 5baf46f772..d952ea53bd 100644
--- a/packages/backend/src/services/chart/charts/active-users.ts
+++ b/packages/backend/src/services/chart/charts/active-users.ts
@@ -1,8 +1,7 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { User } from '@/models/entities/user';
-import { Users } from '@/models/index';
-import { name, schema } from './entities/active-users';
+import Chart, { KVs } from '../core.js';
+import { User } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
+import { name, schema } from './entities/active-users.js';
 
 const week = 1000 * 60 * 60 * 24 * 7;
 const month = 1000 * 60 * 60 * 24 * 30;
@@ -17,17 +16,14 @@ export default class ActiveUsersChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async read(user: { id: User['id'], host: null, createdAt: User['createdAt'] }): Promise<void> {
 		await this.commit({
 			'read': [user.id],
@@ -40,7 +36,6 @@ export default class ActiveUsersChart extends Chart<typeof schema> {
 		});
 	}
 
-	@autobind
 	public async write(user: { id: User['id'], host: null, createdAt: User['createdAt'] }): Promise<void> {
 		await this.commit({
 			'write': [user.id],
diff --git a/packages/backend/src/services/chart/charts/ap-request.ts b/packages/backend/src/services/chart/charts/ap-request.ts
index ca763c8847..e9e42ade7f 100644
--- a/packages/backend/src/services/chart/charts/ap-request.ts
+++ b/packages/backend/src/services/chart/charts/ap-request.ts
@@ -1,6 +1,5 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { name, schema } from './entities/ap-request';
+import Chart, { KVs } from '../core.js';
+import { name, schema } from './entities/ap-request.js';
 
 /**
  * Chart about ActivityPub requests
@@ -11,31 +10,26 @@ export default class ApRequestChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async deliverSucc(): Promise<void> {
 		await this.commit({
 			'deliverSucceeded': 1,
 		});
 	}
 
-	@autobind
 	public async deliverFail(): Promise<void> {
 		await this.commit({
 			'deliverFailed': 1,
 		});
 	}
 
-	@autobind
 	public async inbox(): Promise<void> {
 		await this.commit({
 			'inboxReceived': 1,
diff --git a/packages/backend/src/services/chart/charts/drive.ts b/packages/backend/src/services/chart/charts/drive.ts
index 288689784e..0eeba90dd3 100644
--- a/packages/backend/src/services/chart/charts/drive.ts
+++ b/packages/backend/src/services/chart/charts/drive.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { DriveFiles } from '@/models/index';
+import Chart, { KVs } from '../core.js';
+import { DriveFiles } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
-import { DriveFile } from '@/models/entities/drive-file';
-import { name, schema } from './entities/drive';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { name, schema } from './entities/drive.js';
 
 /**
  * ドライブに関するチャート
@@ -14,17 +13,14 @@ export default class DriveChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(file: DriveFile, isAdditional: boolean): Promise<void> {
 		const fileSizeKb = file.size / 1000;
 		await this.commit(file.userHost === null ? {
diff --git a/packages/backend/src/services/chart/charts/entities/active-users.ts b/packages/backend/src/services/chart/charts/entities/active-users.ts
index 843843836d..5767b76f8e 100644
--- a/packages/backend/src/services/chart/charts/entities/active-users.ts
+++ b/packages/backend/src/services/chart/charts/entities/active-users.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'activeUsers';
 
diff --git a/packages/backend/src/services/chart/charts/entities/ap-request.ts b/packages/backend/src/services/chart/charts/entities/ap-request.ts
index 21fb40d138..3a9f3dacfd 100644
--- a/packages/backend/src/services/chart/charts/entities/ap-request.ts
+++ b/packages/backend/src/services/chart/charts/entities/ap-request.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'apRequest';
 
diff --git a/packages/backend/src/services/chart/charts/entities/drive.ts b/packages/backend/src/services/chart/charts/entities/drive.ts
index c5cdfd85bd..4bf5bb729e 100644
--- a/packages/backend/src/services/chart/charts/entities/drive.ts
+++ b/packages/backend/src/services/chart/charts/entities/drive.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'drive';
 
diff --git a/packages/backend/src/services/chart/charts/entities/federation.ts b/packages/backend/src/services/chart/charts/entities/federation.ts
index 3ed5d7352a..9d2b860b10 100644
--- a/packages/backend/src/services/chart/charts/entities/federation.ts
+++ b/packages/backend/src/services/chart/charts/entities/federation.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'federation';
 
diff --git a/packages/backend/src/services/chart/charts/entities/hashtag.ts b/packages/backend/src/services/chart/charts/entities/hashtag.ts
index bd2ae38a16..4d04039047 100644
--- a/packages/backend/src/services/chart/charts/entities/hashtag.ts
+++ b/packages/backend/src/services/chart/charts/entities/hashtag.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'hashtag';
 
diff --git a/packages/backend/src/services/chart/charts/entities/instance.ts b/packages/backend/src/services/chart/charts/entities/instance.ts
index b98e1640c8..06962120e2 100644
--- a/packages/backend/src/services/chart/charts/entities/instance.ts
+++ b/packages/backend/src/services/chart/charts/entities/instance.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'instance';
 
diff --git a/packages/backend/src/services/chart/charts/entities/notes.ts b/packages/backend/src/services/chart/charts/entities/notes.ts
index f9b9b20eed..9387dbfb2c 100644
--- a/packages/backend/src/services/chart/charts/entities/notes.ts
+++ b/packages/backend/src/services/chart/charts/entities/notes.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'notes';
 
diff --git a/packages/backend/src/services/chart/charts/entities/per-user-drive.ts b/packages/backend/src/services/chart/charts/entities/per-user-drive.ts
index 00d85b1620..6111640ea0 100644
--- a/packages/backend/src/services/chart/charts/entities/per-user-drive.ts
+++ b/packages/backend/src/services/chart/charts/entities/per-user-drive.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'perUserDrive';
 
diff --git a/packages/backend/src/services/chart/charts/entities/per-user-following.ts b/packages/backend/src/services/chart/charts/entities/per-user-following.ts
index 1efd4977fc..4118daa474 100644
--- a/packages/backend/src/services/chart/charts/entities/per-user-following.ts
+++ b/packages/backend/src/services/chart/charts/entities/per-user-following.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'perUserFollowing';
 
diff --git a/packages/backend/src/services/chart/charts/entities/per-user-notes.ts b/packages/backend/src/services/chart/charts/entities/per-user-notes.ts
index 562cde9b00..c1fa174452 100644
--- a/packages/backend/src/services/chart/charts/entities/per-user-notes.ts
+++ b/packages/backend/src/services/chart/charts/entities/per-user-notes.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'perUserNotes';
 
diff --git a/packages/backend/src/services/chart/charts/entities/per-user-reactions.ts b/packages/backend/src/services/chart/charts/entities/per-user-reactions.ts
index ab315d24c9..5e1a6c7b30 100644
--- a/packages/backend/src/services/chart/charts/entities/per-user-reactions.ts
+++ b/packages/backend/src/services/chart/charts/entities/per-user-reactions.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'perUserReaction';
 
diff --git a/packages/backend/src/services/chart/charts/entities/test-grouped.ts b/packages/backend/src/services/chart/charts/entities/test-grouped.ts
index 78c2bbd548..66b6e8e864 100644
--- a/packages/backend/src/services/chart/charts/entities/test-grouped.ts
+++ b/packages/backend/src/services/chart/charts/entities/test-grouped.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'testGrouped';
 
diff --git a/packages/backend/src/services/chart/charts/entities/test-intersection.ts b/packages/backend/src/services/chart/charts/entities/test-intersection.ts
index dc56eb93f5..a3bdcb367f 100644
--- a/packages/backend/src/services/chart/charts/entities/test-intersection.ts
+++ b/packages/backend/src/services/chart/charts/entities/test-intersection.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'testIntersection';
 
diff --git a/packages/backend/src/services/chart/charts/entities/test-unique.ts b/packages/backend/src/services/chart/charts/entities/test-unique.ts
index dc7c1520e1..b2cfb71b05 100644
--- a/packages/backend/src/services/chart/charts/entities/test-unique.ts
+++ b/packages/backend/src/services/chart/charts/entities/test-unique.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'testUnique';
 
diff --git a/packages/backend/src/services/chart/charts/entities/test.ts b/packages/backend/src/services/chart/charts/entities/test.ts
index edfa4c524b..7cba21e16a 100644
--- a/packages/backend/src/services/chart/charts/entities/test.ts
+++ b/packages/backend/src/services/chart/charts/entities/test.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'test';
 
diff --git a/packages/backend/src/services/chart/charts/entities/users.ts b/packages/backend/src/services/chart/charts/entities/users.ts
index d2cec72497..c0b83094ae 100644
--- a/packages/backend/src/services/chart/charts/entities/users.ts
+++ b/packages/backend/src/services/chart/charts/entities/users.ts
@@ -1,4 +1,4 @@
-import Chart from '../../core';
+import Chart from '../../core.js';
 
 export const name = 'users';
 
diff --git a/packages/backend/src/services/chart/charts/federation.ts b/packages/backend/src/services/chart/charts/federation.ts
index 020f89fe72..13aa6c584e 100644
--- a/packages/backend/src/services/chart/charts/federation.ts
+++ b/packages/backend/src/services/chart/charts/federation.ts
@@ -1,7 +1,6 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { Followings } from '@/models/index';
-import { name, schema } from './entities/federation';
+import Chart, { KVs } from '../core.js';
+import { Followings } from '@/models/index.js';
+import { name, schema } from './entities/federation.js';
 
 /**
  * フェデレーションに関するチャート
@@ -12,13 +11,11 @@ export default class FederationChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		const pubsubSubQuery = Followings.createQueryBuilder('f')
 			.select('f.followerHost')
@@ -51,7 +48,6 @@ export default class FederationChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	public async deliverd(host: string, succeeded: boolean): Promise<void> {
 		await this.commit(succeeded ? {
 			'deliveredInstances': [host],
@@ -60,7 +56,6 @@ export default class FederationChart extends Chart<typeof schema> {
 		});
 	}
 
-	@autobind
 	public async inbox(host: string): Promise<void> {
 		await this.commit({
 			'inboxInstances': [host],
diff --git a/packages/backend/src/services/chart/charts/hashtag.ts b/packages/backend/src/services/chart/charts/hashtag.ts
index cbae686833..31f7fa95dc 100644
--- a/packages/backend/src/services/chart/charts/hashtag.ts
+++ b/packages/backend/src/services/chart/charts/hashtag.ts
@@ -1,8 +1,7 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { User } from '@/models/entities/user';
-import { Users } from '@/models/index';
-import { name, schema } from './entities/hashtag';
+import Chart, { KVs } from '../core.js';
+import { User } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
+import { name, schema } from './entities/hashtag.js';
 
 /**
  * ハッシュタグに関するチャート
@@ -13,17 +12,14 @@ export default class HashtagChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(hashtag: string, user: { id: User['id'], host: User['host'] }): Promise<void> {
 		await this.commit({
 			'local.users': Users.isLocalUser(user) ? [user.id] : [],
diff --git a/packages/backend/src/services/chart/charts/instance.ts b/packages/backend/src/services/chart/charts/instance.ts
index 930ac4729b..593430f281 100644
--- a/packages/backend/src/services/chart/charts/instance.ts
+++ b/packages/backend/src/services/chart/charts/instance.ts
@@ -1,10 +1,9 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { DriveFiles, Followings, Users, Notes } from '@/models/index';
-import { DriveFile } from '@/models/entities/drive-file';
-import { Note } from '@/models/entities/note';
-import { toPuny } from '@/misc/convert-host';
-import { name, schema } from './entities/instance';
+import Chart, { KVs } from '../core.js';
+import { DriveFiles, Followings, Users, Notes } from '@/models/index.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { Note } from '@/models/entities/note.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { name, schema } from './entities/instance.js';
 
 /**
  * インスタンスごとのチャート
@@ -15,7 +14,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		const [
 			notesCount,
@@ -42,19 +40,16 @@ export default class InstanceChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async requestReceived(host: string): Promise<void> {
 		await this.commit({
 			'requests.received': 1,
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async requestSent(host: string, isSucceeded: boolean): Promise<void> {
 		await this.commit({
 			'requests.succeeded': isSucceeded ? 1 : 0,
@@ -62,7 +57,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async newUser(host: string): Promise<void> {
 		await this.commit({
 			'users.total': 1,
@@ -70,7 +64,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async updateNote(host: string, note: Note, isAdditional: boolean): Promise<void> {
 		await this.commit({
 			'notes.total': isAdditional ? 1 : -1,
@@ -83,7 +76,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async updateFollowing(host: string, isAdditional: boolean): Promise<void> {
 		await this.commit({
 			'following.total': isAdditional ? 1 : -1,
@@ -92,7 +84,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async updateFollowers(host: string, isAdditional: boolean): Promise<void> {
 		await this.commit({
 			'followers.total': isAdditional ? 1 : -1,
@@ -101,7 +92,6 @@ export default class InstanceChart extends Chart<typeof schema> {
 		}, toPuny(host));
 	}
 
-	@autobind
 	public async updateDrive(file: DriveFile, isAdditional: boolean): Promise<void> {
 		const fileSizeKb = file.size / 1000;
 		await this.commit({
diff --git a/packages/backend/src/services/chart/charts/notes.ts b/packages/backend/src/services/chart/charts/notes.ts
index 624ee5db28..ab6a37e3c1 100644
--- a/packages/backend/src/services/chart/charts/notes.ts
+++ b/packages/backend/src/services/chart/charts/notes.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { Notes } from '@/models/index';
+import Chart, { KVs } from '../core.js';
+import { Notes } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
-import { Note } from '@/models/entities/note';
-import { name, schema } from './entities/notes';
+import { Note } from '@/models/entities/note.js';
+import { name, schema } from './entities/notes.js';
 
 /**
  * ノートに関するチャート
@@ -14,7 +13,6 @@ export default class NotesChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		const [localCount, remoteCount] = await Promise.all([
 			Notes.count({ userHost: null }),
@@ -27,12 +25,10 @@ export default class NotesChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(note: Note, isAdditional: boolean): Promise<void> {
 		const prefix = note.userHost === null ? 'local' : 'remote';
 
diff --git a/packages/backend/src/services/chart/charts/per-user-drive.ts b/packages/backend/src/services/chart/charts/per-user-drive.ts
index ae9e8c5694..131befa396 100644
--- a/packages/backend/src/services/chart/charts/per-user-drive.ts
+++ b/packages/backend/src/services/chart/charts/per-user-drive.ts
@@ -1,8 +1,7 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { DriveFiles } from '@/models/index';
-import { DriveFile } from '@/models/entities/drive-file';
-import { name, schema } from './entities/per-user-drive';
+import Chart, { KVs } from '../core.js';
+import { DriveFiles } from '@/models/index.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { name, schema } from './entities/per-user-drive.js';
 
 /**
  * ユーザーごとのドライブに関するチャート
@@ -13,7 +12,6 @@ export default class PerUserDriveChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		const [count, size] = await Promise.all([
 			DriveFiles.count({ userId: group }),
@@ -26,12 +24,10 @@ export default class PerUserDriveChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(file: DriveFile, isAdditional: boolean): Promise<void> {
 		const fileSizeKb = file.size / 1000;
 		await this.commit({
diff --git a/packages/backend/src/services/chart/charts/per-user-following.ts b/packages/backend/src/services/chart/charts/per-user-following.ts
index 0b39881c14..5d5dd1fa1e 100644
--- a/packages/backend/src/services/chart/charts/per-user-following.ts
+++ b/packages/backend/src/services/chart/charts/per-user-following.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { Followings, Users } from '@/models/index';
+import Chart, { KVs } from '../core.js';
+import { Followings, Users } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
-import { User } from '@/models/entities/user';
-import { name, schema } from './entities/per-user-following';
+import { User } from '@/models/entities/user.js';
+import { name, schema } from './entities/per-user-following.js';
 
 /**
  * ユーザーごとのフォローに関するチャート
@@ -14,7 +13,6 @@ export default class PerUserFollowingChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		const [
 			localFollowingsCount,
@@ -36,12 +34,10 @@ export default class PerUserFollowingChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(follower: { id: User['id']; host: User['host']; }, followee: { id: User['id']; host: User['host']; }, isFollow: boolean): Promise<void> {
 		const prefixFollower = Users.isLocalUser(follower) ? 'local' : 'remote';
 		const prefixFollowee = Users.isLocalUser(followee) ? 'local' : 'remote';
diff --git a/packages/backend/src/services/chart/charts/per-user-notes.ts b/packages/backend/src/services/chart/charts/per-user-notes.ts
index 01a2785158..9c5dea1aa9 100644
--- a/packages/backend/src/services/chart/charts/per-user-notes.ts
+++ b/packages/backend/src/services/chart/charts/per-user-notes.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { User } from '@/models/entities/user';
-import { Notes } from '@/models/index';
-import { Note } from '@/models/entities/note';
-import { name, schema } from './entities/per-user-notes';
+import Chart, { KVs } from '../core.js';
+import { User } from '@/models/entities/user.js';
+import { Notes } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
+import { name, schema } from './entities/per-user-notes.js';
 
 /**
  * ユーザーごとのノートに関するチャート
@@ -14,7 +13,6 @@ export default class PerUserNotesChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		const [count] = await Promise.all([
 			Notes.count({ userId: group }),
@@ -25,12 +23,10 @@ export default class PerUserNotesChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(user: { id: User['id'] }, note: Note, isAdditional: boolean): Promise<void> {
 		await this.commit({
 			'total': isAdditional ? 1 : -1,
diff --git a/packages/backend/src/services/chart/charts/per-user-reactions.ts b/packages/backend/src/services/chart/charts/per-user-reactions.ts
index 59af0e86c0..3a830e118c 100644
--- a/packages/backend/src/services/chart/charts/per-user-reactions.ts
+++ b/packages/backend/src/services/chart/charts/per-user-reactions.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { Users } from '@/models/index';
-import { name, schema } from './entities/per-user-reactions';
+import Chart, { KVs } from '../core.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { Users } from '@/models/index.js';
+import { name, schema } from './entities/per-user-reactions.js';
 
 /**
  * ユーザーごとのリアクションに関するチャート
@@ -14,17 +13,14 @@ export default class PerUserReactionsChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(user: { id: User['id'], host: User['host'] }, note: Note): Promise<void> {
 		const prefix = Users.isLocalUser(user) ? 'local' : 'remote';
 		this.commit({
diff --git a/packages/backend/src/services/chart/charts/test-grouped.ts b/packages/backend/src/services/chart/charts/test-grouped.ts
index 19b2135849..d01c9fcbd6 100644
--- a/packages/backend/src/services/chart/charts/test-grouped.ts
+++ b/packages/backend/src/services/chart/charts/test-grouped.ts
@@ -1,6 +1,5 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { name, schema } from './entities/test-grouped';
+import Chart, { KVs } from '../core.js';
+import { name, schema } from './entities/test-grouped.js';
 
 /**
  * For testing
@@ -13,19 +12,16 @@ export default class TestGroupedChart extends Chart<typeof schema> {
 		super(name, schema, true);
 	}
 
-	@autobind
 	protected async tickMajor(group: string): Promise<Partial<KVs<typeof schema>>> {
 		return {
 			'foo.total': this.total[group],
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async increment(group: string): Promise<void> {
 		if (this.total[group] == null) this.total[group] = 0;
 
diff --git a/packages/backend/src/services/chart/charts/test-intersection.ts b/packages/backend/src/services/chart/charts/test-intersection.ts
index 6fd780f9b9..88b5a715c1 100644
--- a/packages/backend/src/services/chart/charts/test-intersection.ts
+++ b/packages/backend/src/services/chart/charts/test-intersection.ts
@@ -1,6 +1,5 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { name, schema } from './entities/test-intersection';
+import Chart, { KVs } from '../core.js';
+import { name, schema } from './entities/test-intersection.js';
 
 /**
  * For testing
@@ -11,24 +10,20 @@ export default class TestIntersectionChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async addA(key: string): Promise<void> {
 		await this.commit({
 			a: [key],
 		});
 	}
 
-	@autobind
 	public async addB(key: string): Promise<void> {
 		await this.commit({
 			b: [key],
diff --git a/packages/backend/src/services/chart/charts/test-unique.ts b/packages/backend/src/services/chart/charts/test-unique.ts
index 2c9cc2fd6a..d714f1d40c 100644
--- a/packages/backend/src/services/chart/charts/test-unique.ts
+++ b/packages/backend/src/services/chart/charts/test-unique.ts
@@ -1,6 +1,5 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { name, schema } from './entities/test-unique';
+import Chart, { KVs } from '../core.js';
+import { name, schema } from './entities/test-unique.js';
 
 /**
  * For testing
@@ -11,17 +10,14 @@ export default class TestUniqueChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async uniqueIncrement(key: string): Promise<void> {
 		await this.commit({
 			foo: [key],
diff --git a/packages/backend/src/services/chart/charts/test.ts b/packages/backend/src/services/chart/charts/test.ts
index b539625c10..adb2b18c87 100644
--- a/packages/backend/src/services/chart/charts/test.ts
+++ b/packages/backend/src/services/chart/charts/test.ts
@@ -1,6 +1,5 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { name, schema } from './entities/test';
+import Chart, { KVs } from '../core.js';
+import { name, schema } from './entities/test.js';
 
 /**
  * For testing
@@ -13,19 +12,16 @@ export default class TestChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		return {
 			'foo.total': this.total,
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async increment(): Promise<void> {
 		this.total++;
 
@@ -35,7 +31,6 @@ export default class TestChart extends Chart<typeof schema> {
 		});
 	}
 
-	@autobind
 	public async decrement(): Promise<void> {
 		this.total--;
 
diff --git a/packages/backend/src/services/chart/charts/users.ts b/packages/backend/src/services/chart/charts/users.ts
index 70ef89f8cd..fb9d5e15fb 100644
--- a/packages/backend/src/services/chart/charts/users.ts
+++ b/packages/backend/src/services/chart/charts/users.ts
@@ -1,9 +1,8 @@
-import autobind from 'autobind-decorator';
-import Chart, { KVs } from '../core';
-import { Users } from '@/models/index';
+import Chart, { KVs } from '../core.js';
+import { Users } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
-import { User } from '@/models/entities/user';
-import { name, schema } from './entities/users';
+import { User } from '@/models/entities/user.js';
+import { name, schema } from './entities/users.js';
 
 /**
  * ユーザー数に関するチャート
@@ -14,7 +13,6 @@ export default class UsersChart extends Chart<typeof schema> {
 		super(name, schema);
 	}
 
-	@autobind
 	protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
 		const [localCount, remoteCount] = await Promise.all([
 			Users.count({ host: null }),
@@ -27,12 +25,10 @@ export default class UsersChart extends Chart<typeof schema> {
 		};
 	}
 
-	@autobind
 	protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
 		return {};
 	}
 
-	@autobind
 	public async update(user: { id: User['id'], host: User['host'] }, isAdditional: boolean): Promise<void> {
 		const prefix = Users.isLocalUser(user) ? 'local' : 'remote';
 
diff --git a/packages/backend/src/services/chart/core.ts b/packages/backend/src/services/chart/core.ts
index c6bea0feea..39fad71dd7 100644
--- a/packages/backend/src/services/chart/core.ts
+++ b/packages/backend/src/services/chart/core.ts
@@ -5,11 +5,10 @@
  */
 
 import * as nestedProperty from 'nested-property';
-import autobind from 'autobind-decorator';
-import Logger from '../logger';
+import Logger from '../logger.js';
 import { EntitySchema, getRepository, Repository, LessThan, Between } from 'typeorm';
-import { dateUTC, isTimeSame, isTimeBefore, subtractTime, addTime } from '@/prelude/time';
-import { getChartInsertLock } from '@/misc/app-lock';
+import { dateUTC, isTimeSame, isTimeBefore, subtractTime, addTime } from '@/prelude/time.js';
+import { getChartInsertLock } from '@/misc/app-lock.js';
 
 const logger = new Logger('chart', 'white', process.env.NODE_ENV !== 'test');
 
@@ -142,7 +141,6 @@ export default abstract class Chart<T extends Schema> {
 	 */
 	protected abstract tickMinor(group: string | null): Promise<Partial<KVs<T>>>;
 
-	@autobind
 	private static convertSchemaToColumnDefinitions(schema: Schema): Record<string, { type: string; array?: boolean; default?: any; }> {
 		const columns = {} as Record<string, { type: string; array?: boolean; default?: any; }>;
 		for (const [k, v] of Object.entries(schema)) {
@@ -168,12 +166,10 @@ export default abstract class Chart<T extends Schema> {
 		return columns;
 	}
 
-	@autobind
 	private static dateToTimestamp(x: Date): number {
 		return Math.floor(x.getTime() / 1000);
 	}
 
-	@autobind
 	private static parseDate(date: Date): [number, number, number, number, number, number, number] {
 		const y = date.getUTCFullYear();
 		const m = date.getUTCMonth();
@@ -186,12 +182,10 @@ export default abstract class Chart<T extends Schema> {
 		return [y, m, d, h, _m, _s, _ms];
 	}
 
-	@autobind
 	private static getCurrentDate() {
 		return Chart.parseDate(new Date());
 	}
 
-	@autobind
 	public static schemaToEntity(name: string, schema: Schema, grouped = false): {
 		hour: EntitySchema,
 		day: EntitySchema,
@@ -251,7 +245,6 @@ export default abstract class Chart<T extends Schema> {
 		this.repositoryForDay = getRepository<{ id: number; group?: string | null; date: number; }>(day);
 	}
 
-	@autobind
 	private convertRawRecord(x: RawRecord<T>): KVs<T> {
 		const kvs = {} as Record<string, number>;
 		for (const k of Object.keys(x).filter((k) => k.startsWith(columnPrefix)) as (keyof Columns<T>)[]) {
@@ -260,7 +253,6 @@ export default abstract class Chart<T extends Schema> {
 		return kvs as KVs<T>;
 	}
 
-	@autobind
 	private getNewLog(latest: KVs<T> | null): KVs<T> {
 		const log = {} as Record<keyof T, number>;
 		for (const [k, v] of Object.entries(this.schema) as ([keyof typeof this['schema'], this['schema'][string]])[]) {
@@ -273,7 +265,6 @@ export default abstract class Chart<T extends Schema> {
 		return log as KVs<T>;
 	}
 
-	@autobind
 	private getLatestLog(group: string | null, span: 'hour' | 'day'): Promise<RawRecord<T> | null> {
 		const repository =
 			span === 'hour' ? this.repositoryForHour :
@@ -292,7 +283,6 @@ export default abstract class Chart<T extends Schema> {
 	/**
 	 * 現在(=今のHour or Day)のログをデータベースから探して、あればそれを返し、なければ作成して返します。
 	 */
-	@autobind
 	private async claimCurrentLog(group: string | null, span: 'hour' | 'day'): Promise<RawRecord<T>> {
 		const [y, m, d, h] = Chart.getCurrentDate();
 
@@ -376,7 +366,6 @@ export default abstract class Chart<T extends Schema> {
 		}
 	}
 
-	@autobind
 	protected commit(diff: Commit<T>, group: string | null = null): void {
 		for (const [k, v] of Object.entries(diff)) {
 			if (v == null || v === 0 || (Array.isArray(v) && v.length === 0)) delete diff[k];
@@ -386,7 +375,6 @@ export default abstract class Chart<T extends Schema> {
 		});
 	}
 
-	@autobind
 	public async save(): Promise<void> {
 		if (this.buffer.length === 0) {
 			logger.info(`${this.name}: Write skipped`);
@@ -505,7 +493,6 @@ export default abstract class Chart<T extends Schema> {
 					update(logHour, logDay))));
 	}
 
-	@autobind
 	public async tick(major: boolean, group: string | null = null): Promise<void> {
 		const data = major ? await this.tickMajor(group) : await this.tickMinor(group);
 
@@ -541,12 +528,10 @@ export default abstract class Chart<T extends Schema> {
 			update(logHour, logDay));
 	}
 
-	@autobind
 	public resync(group: string | null = null): Promise<void> {
 		return this.tick(true, group);
 	}
 
-	@autobind
 	public async clean(): Promise<void> {
 		const current = dateUTC(Chart.getCurrentDate());
 
@@ -582,7 +567,6 @@ export default abstract class Chart<T extends Schema> {
 		]);
 	}
 
-	@autobind
 	public async getChartRaw(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<ChartResult<T>> {
 		const [y, m, d, h, _m, _s, _ms] = cursor ? Chart.parseDate(subtractTime(addTime(cursor, 1, span), 1)) : Chart.getCurrentDate();
 		const [y2, m2, d2, h2] = cursor ? Chart.parseDate(addTime(cursor, 1, span)) : [] as never;
@@ -685,7 +669,6 @@ export default abstract class Chart<T extends Schema> {
 		return res;
 	}
 
-	@autobind
 	public async getChart(span: 'hour' | 'day', amount: number, cursor: Date | null, group: string | null = null): Promise<Unflatten<ChartResult<T>>> {
 		const result = await this.getChartRaw(span, amount, cursor, group);
 		const object = {};
diff --git a/packages/backend/src/services/chart/entities.ts b/packages/backend/src/services/chart/entities.ts
index 569b328557..13e994cb65 100644
--- a/packages/backend/src/services/chart/entities.ts
+++ b/packages/backend/src/services/chart/entities.ts
@@ -1,15 +1,15 @@
-import { entity as FederationChart } from './charts/entities/federation';
-import { entity as NotesChart } from './charts/entities/notes';
-import { entity as UsersChart } from './charts/entities/users';
-import { entity as ActiveUsersChart } from './charts/entities/active-users';
-import { entity as InstanceChart } from './charts/entities/instance';
-import { entity as PerUserNotesChart } from './charts/entities/per-user-notes';
-import { entity as DriveChart } from './charts/entities/drive';
-import { entity as PerUserReactionsChart } from './charts/entities/per-user-reactions';
-import { entity as HashtagChart } from './charts/entities/hashtag';
-import { entity as PerUserFollowingChart } from './charts/entities/per-user-following';
-import { entity as PerUserDriveChart } from './charts/entities/per-user-drive';
-import { entity as ApRequestChart } from './charts/entities/ap-request';
+import { entity as FederationChart } from './charts/entities/federation.js';
+import { entity as NotesChart } from './charts/entities/notes.js';
+import { entity as UsersChart } from './charts/entities/users.js';
+import { entity as ActiveUsersChart } from './charts/entities/active-users.js';
+import { entity as InstanceChart } from './charts/entities/instance.js';
+import { entity as PerUserNotesChart } from './charts/entities/per-user-notes.js';
+import { entity as DriveChart } from './charts/entities/drive.js';
+import { entity as PerUserReactionsChart } from './charts/entities/per-user-reactions.js';
+import { entity as HashtagChart } from './charts/entities/hashtag.js';
+import { entity as PerUserFollowingChart } from './charts/entities/per-user-following.js';
+import { entity as PerUserDriveChart } from './charts/entities/per-user-drive.js';
+import { entity as ApRequestChart } from './charts/entities/ap-request.js';
 
 export const entities = [
 	FederationChart.hour, FederationChart.day,
diff --git a/packages/backend/src/services/chart/index.ts b/packages/backend/src/services/chart/index.ts
index 1c0f7aadc1..8bf2d8f65f 100644
--- a/packages/backend/src/services/chart/index.ts
+++ b/packages/backend/src/services/chart/index.ts
@@ -1,17 +1,17 @@
-import { beforeShutdown } from '@/misc/before-shutdown';
+import { beforeShutdown } from '@/misc/before-shutdown.js';
 
-import FederationChart from './charts/federation';
-import NotesChart from './charts/notes';
-import UsersChart from './charts/users';
-import ActiveUsersChart from './charts/active-users';
-import InstanceChart from './charts/instance';
-import PerUserNotesChart from './charts/per-user-notes';
-import DriveChart from './charts/drive';
-import PerUserReactionsChart from './charts/per-user-reactions';
-import HashtagChart from './charts/hashtag';
-import PerUserFollowingChart from './charts/per-user-following';
-import PerUserDriveChart from './charts/per-user-drive';
-import ApRequestChart from './charts/ap-request';
+import FederationChart from './charts/federation.js';
+import NotesChart from './charts/notes.js';
+import UsersChart from './charts/users.js';
+import ActiveUsersChart from './charts/active-users.js';
+import InstanceChart from './charts/instance.js';
+import PerUserNotesChart from './charts/per-user-notes.js';
+import DriveChart from './charts/drive.js';
+import PerUserReactionsChart from './charts/per-user-reactions.js';
+import HashtagChart from './charts/hashtag.js';
+import PerUserFollowingChart from './charts/per-user-following.js';
+import PerUserDriveChart from './charts/per-user-drive.js';
+import ApRequestChart from './charts/ap-request.js';
 
 export const federationChart = new FederationChart();
 export const notesChart = new NotesChart();
diff --git a/packages/backend/src/services/create-notification.ts b/packages/backend/src/services/create-notification.ts
index 1c1c1fcdff..d78e707ecf 100644
--- a/packages/backend/src/services/create-notification.ts
+++ b/packages/backend/src/services/create-notification.ts
@@ -1,10 +1,10 @@
-import { publishMainStream } from '@/services/stream';
-import pushSw from './push-notification';
-import { Notifications, Mutings, UserProfiles, Users } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { User } from '@/models/entities/user';
-import { Notification } from '@/models/entities/notification';
-import { sendEmailNotification } from './send-email-notification';
+import { publishMainStream } from '@/services/stream.js';
+import pushSw from './push-notification.js';
+import { Notifications, Mutings, UserProfiles, Users } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { User } from '@/models/entities/user.js';
+import { Notification } from '@/models/entities/notification.js';
+import { sendEmailNotification } from './send-email-notification.js';
 
 export async function createNotification(
 	notifieeId: User['id'],
diff --git a/packages/backend/src/services/create-system-user.ts b/packages/backend/src/services/create-system-user.ts
index 2e9ec178fd..781e0560d1 100644
--- a/packages/backend/src/services/create-system-user.ts
+++ b/packages/backend/src/services/create-system-user.ts
@@ -1,13 +1,13 @@
-import * as bcrypt from 'bcryptjs';
+import bcrypt from 'bcryptjs';
 import { v4 as uuid } from 'uuid';
-import generateNativeUserToken from '../server/api/common/generate-native-user-token';
-import { genRsaKeyPair } from '@/misc/gen-key-pair';
-import { User } from '@/models/entities/user';
-import { UserProfile } from '@/models/entities/user-profile';
+import generateNativeUserToken from '../server/api/common/generate-native-user-token.js';
+import { genRsaKeyPair } from '@/misc/gen-key-pair.js';
+import { User } from '@/models/entities/user.js';
+import { UserProfile } from '@/models/entities/user-profile.js';
 import { getConnection, ObjectLiteral } from 'typeorm';
-import { genId } from '@/misc/gen-id';
-import { UserKeypair } from '@/models/entities/user-keypair';
-import { UsedUsername } from '@/models/entities/used-username';
+import { genId } from '@/misc/gen-id.js';
+import { UserKeypair } from '@/models/entities/user-keypair.js';
+import { UsedUsername } from '@/models/entities/used-username.js';
 
 export async function createSystemUser(username: string) {
 	const password = uuid();
diff --git a/packages/backend/src/services/drive/add-file.ts b/packages/backend/src/services/drive/add-file.ts
index 9a8a543904..cebdf6c87a 100644
--- a/packages/backend/src/services/drive/add-file.ts
+++ b/packages/backend/src/services/drive/add-file.ts
@@ -1,26 +1,26 @@
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 
 import { v4 as uuid } from 'uuid';
 
-import { publishMainStream, publishDriveStream } from '@/services/stream';
-import { deleteFile } from './delete-file';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { GenerateVideoThumbnail } from './generate-video-thumbnail';
-import { driveLogger } from './logger';
-import { IImage, convertSharpToJpeg, convertSharpToWebp, convertSharpToPng, convertSharpToPngOrJpeg } from './image-processor';
-import { contentDisposition } from '@/misc/content-disposition';
-import { getFileInfo } from '@/misc/get-file-info';
-import { DriveFiles, DriveFolders, Users, Instances, UserProfiles } from '@/models/index';
-import { InternalStorage } from './internal-storage';
-import { DriveFile } from '@/models/entities/drive-file';
-import { IRemoteUser, User } from '@/models/entities/user';
-import { driveChart, perUserDriveChart, instanceChart } from '@/services/chart/index';
-import { genId } from '@/misc/gen-id';
-import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
-import * as S3 from 'aws-sdk/clients/s3';
-import { getS3 } from './s3';
-import * as sharp from 'sharp';
-import { FILE_TYPE_BROWSERSAFE } from '@/const';
+import { publishMainStream, publishDriveStream } from '@/services/stream.js';
+import { deleteFile } from './delete-file.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { GenerateVideoThumbnail } from './generate-video-thumbnail.js';
+import { driveLogger } from './logger.js';
+import { IImage, convertSharpToJpeg, convertSharpToWebp, convertSharpToPng, convertSharpToPngOrJpeg } from './image-processor.js';
+import { contentDisposition } from '@/misc/content-disposition.js';
+import { getFileInfo } from '@/misc/get-file-info.js';
+import { DriveFiles, DriveFolders, Users, Instances, UserProfiles } from '@/models/index.js';
+import { InternalStorage } from './internal-storage.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { IRemoteUser, User } from '@/models/entities/user.js';
+import { driveChart, perUserDriveChart, instanceChart } from '@/services/chart/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
+import * as S3 from 'aws-sdk/clients/s3.js';
+import { getS3 } from './s3.js';
+import sharp from 'sharp';
+import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
 
 const logger = driveLogger.createSubLogger('register', 'yellow');
 
diff --git a/packages/backend/src/services/drive/delete-file.ts b/packages/backend/src/services/drive/delete-file.ts
index 5cda32c7d5..18f1dc970b 100644
--- a/packages/backend/src/services/drive/delete-file.ts
+++ b/packages/backend/src/services/drive/delete-file.ts
@@ -1,10 +1,10 @@
-import { DriveFile } from '@/models/entities/drive-file';
-import { InternalStorage } from './internal-storage';
-import { DriveFiles, Instances } from '@/models/index';
-import { driveChart, perUserDriveChart, instanceChart } from '@/services/chart/index';
-import { createDeleteObjectStorageFileJob } from '@/queue/index';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { getS3 } from './s3';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { InternalStorage } from './internal-storage.js';
+import { DriveFiles, Instances } from '@/models/index.js';
+import { driveChart, perUserDriveChart, instanceChart } from '@/services/chart/index.js';
+import { createDeleteObjectStorageFileJob } from '@/queue/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { getS3 } from './s3.js';
 import { v4 as uuid } from 'uuid';
 
 export async function deleteFile(file: DriveFile, isExpired = false) {
diff --git a/packages/backend/src/services/drive/generate-video-thumbnail.ts b/packages/backend/src/services/drive/generate-video-thumbnail.ts
index e8cc952b9a..04a7a83346 100644
--- a/packages/backend/src/services/drive/generate-video-thumbnail.ts
+++ b/packages/backend/src/services/drive/generate-video-thumbnail.ts
@@ -1,6 +1,6 @@
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 import * as tmp from 'tmp';
-import { IImage, convertToJpeg } from './image-processor';
+import { IImage, convertToJpeg } from './image-processor.js';
 import * as FFmpeg from 'fluent-ffmpeg';
 
 export async function GenerateVideoThumbnail(path: string): Promise<IImage> {
diff --git a/packages/backend/src/services/drive/image-processor.ts b/packages/backend/src/services/drive/image-processor.ts
index f3c4a2abd9..146dcfb6ca 100644
--- a/packages/backend/src/services/drive/image-processor.ts
+++ b/packages/backend/src/services/drive/image-processor.ts
@@ -1,4 +1,4 @@
-import * as sharp from 'sharp';
+import sharp from 'sharp';
 
 export type IImage = {
 	data: Buffer;
diff --git a/packages/backend/src/services/drive/internal-storage.ts b/packages/backend/src/services/drive/internal-storage.ts
index fe190a028c..8f76c81ca3 100644
--- a/packages/backend/src/services/drive/internal-storage.ts
+++ b/packages/backend/src/services/drive/internal-storage.ts
@@ -1,11 +1,10 @@
-import * as fs from 'fs';
-import * as Path from 'path';
-import { fileURLToPath } from 'url';
-import { dirname } from 'path';
-import config from '@/config/index';
+import * as fs from 'node:fs';
+import * as Path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+import config from '@/config/index.js';
 
-//const _filename = fileURLToPath(import.meta.url);
-const _filename = __filename;
+const _filename = fileURLToPath(import.meta.url);
 const _dirname = dirname(_filename);
 
 export class InternalStorage {
diff --git a/packages/backend/src/services/drive/logger.ts b/packages/backend/src/services/drive/logger.ts
index 655d074d6e..917a8317e2 100644
--- a/packages/backend/src/services/drive/logger.ts
+++ b/packages/backend/src/services/drive/logger.ts
@@ -1,3 +1,3 @@
-import Logger from '../logger';
+import Logger from '../logger.js';
 
 export const driveLogger = new Logger('drive', 'blue');
diff --git a/packages/backend/src/services/drive/s3.ts b/packages/backend/src/services/drive/s3.ts
index 42bf6e187c..456d7dddd9 100644
--- a/packages/backend/src/services/drive/s3.ts
+++ b/packages/backend/src/services/drive/s3.ts
@@ -1,7 +1,7 @@
-import { URL } from 'url';
-import * as S3 from 'aws-sdk/clients/s3';
-import { Meta } from '@/models/entities/meta';
-import { getAgentByUrl } from '@/misc/fetch';
+import { URL } from 'node:url';
+import * as S3 from 'aws-sdk/clients/s3.js';
+import { Meta } from '@/models/entities/meta.js';
+import { getAgentByUrl } from '@/misc/fetch.js';
 
 export function getS3(meta: Meta) {
 	const u = meta.objectStorageEndpoint != null
diff --git a/packages/backend/src/services/drive/upload-from-url.ts b/packages/backend/src/services/drive/upload-from-url.ts
index 7c5fa5ce3f..5007fff6ee 100644
--- a/packages/backend/src/services/drive/upload-from-url.ts
+++ b/packages/backend/src/services/drive/upload-from-url.ts
@@ -1,12 +1,12 @@
-import { URL } from 'url';
-import { addFile } from './add-file';
-import { User } from '@/models/entities/user';
-import { driveLogger } from './logger';
-import { createTemp } from '@/misc/create-temp';
-import { downloadUrl } from '@/misc/download-url';
-import { DriveFolder } from '@/models/entities/drive-folder';
-import { DriveFile } from '@/models/entities/drive-file';
-import { DriveFiles } from '@/models/index';
+import { URL } from 'node:url';
+import { addFile } from './add-file.js';
+import { User } from '@/models/entities/user.js';
+import { driveLogger } from './logger.js';
+import { createTemp } from '@/misc/create-temp.js';
+import { downloadUrl } from '@/misc/download-url.js';
+import { DriveFolder } from '@/models/entities/drive-folder.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { DriveFiles } from '@/models/index.js';
 
 const logger = driveLogger.createSubLogger('downloader');
 
diff --git a/packages/backend/src/services/fetch-instance-metadata.ts b/packages/backend/src/services/fetch-instance-metadata.ts
index 95601bfd82..f3a0424abd 100644
--- a/packages/backend/src/services/fetch-instance-metadata.ts
+++ b/packages/backend/src/services/fetch-instance-metadata.ts
@@ -1,11 +1,11 @@
 import { DOMWindow, JSDOM } from 'jsdom';
 import fetch from 'node-fetch';
-import { getJson, getHtml, getAgentByUrl } from '@/misc/fetch';
-import { Instance } from '@/models/entities/instance';
-import { Instances } from '@/models/index';
-import { getFetchInstanceMetadataLock } from '@/misc/app-lock';
-import Logger from './logger';
-import { URL } from 'url';
+import { getJson, getHtml, getAgentByUrl } from '@/misc/fetch.js';
+import { Instance } from '@/models/entities/instance.js';
+import { Instances } from '@/models/index.js';
+import { getFetchInstanceMetadataLock } from '@/misc/app-lock.js';
+import Logger from './logger.js';
+import { URL } from 'node:url';
 
 const logger = new Logger('metadata', 'cyan');
 
diff --git a/packages/backend/src/services/following/create.ts b/packages/backend/src/services/following/create.ts
index bc5ac275b5..a416412131 100644
--- a/packages/backend/src/services/following/create.ts
+++ b/packages/backend/src/services/following/create.ts
@@ -1,20 +1,20 @@
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderAccept from '@/remote/activitypub/renderer/accept';
-import renderReject from '@/remote/activitypub/renderer/reject';
-import { deliver } from '@/queue/index';
-import createFollowRequest from './requests/create';
-import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc';
-import Logger from '../logger';
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { User } from '@/models/entities/user';
-import { Followings, Users, FollowRequests, Blockings, Instances, UserProfiles } from '@/models/index';
-import { instanceChart, perUserFollowingChart } from '@/services/chart/index';
-import { genId } from '@/misc/gen-id';
-import { createNotification } from '../create-notification';
-import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
-import { Packed } from '@/misc/schema';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderAccept from '@/remote/activitypub/renderer/accept.js';
+import renderReject from '@/remote/activitypub/renderer/reject.js';
+import { deliver } from '@/queue/index.js';
+import createFollowRequest from './requests/create.js';
+import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js';
+import Logger from '../logger.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { User } from '@/models/entities/user.js';
+import { Followings, Users, FollowRequests, Blockings, Instances, UserProfiles } from '@/models/index.js';
+import { instanceChart, perUserFollowingChart } from '@/services/chart/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { createNotification } from '../create-notification.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
+import { Packed } from '@/misc/schema.js';
 
 const logger = new Logger('following/create');
 
diff --git a/packages/backend/src/services/following/delete.ts b/packages/backend/src/services/following/delete.ts
index 9b7d72e86d..d82c0be52d 100644
--- a/packages/backend/src/services/following/delete.ts
+++ b/packages/backend/src/services/following/delete.ts
@@ -1,14 +1,14 @@
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import renderReject from '@/remote/activitypub/renderer/reject';
-import { deliver } from '@/queue/index';
-import Logger from '../logger';
-import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc';
-import { User } from '@/models/entities/user';
-import { Followings, Users, Instances } from '@/models/index';
-import { instanceChart, perUserFollowingChart } from '@/services/chart/index';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import renderReject from '@/remote/activitypub/renderer/reject.js';
+import { deliver } from '@/queue/index.js';
+import Logger from '../logger.js';
+import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js';
+import { User } from '@/models/entities/user.js';
+import { Followings, Users, Instances } from '@/models/index.js';
+import { instanceChart, perUserFollowingChart } from '@/services/chart/index.js';
 
 const logger = new Logger('following/delete');
 
diff --git a/packages/backend/src/services/following/reject.ts b/packages/backend/src/services/following/reject.ts
index 1deabea4f8..3b0cb2ba88 100644
--- a/packages/backend/src/services/following/reject.ts
+++ b/packages/backend/src/services/following/reject.ts
@@ -1,11 +1,11 @@
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderReject from '@/remote/activitypub/renderer/reject';
-import { deliver } from '@/queue/index';
-import { publishMainStream, publishUserEvent } from '@/services/stream';
-import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { Users, FollowRequests, Followings } from '@/models/index';
-import { decrementFollowing } from './delete';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderReject from '@/remote/activitypub/renderer/reject.js';
+import { deliver } from '@/queue/index.js';
+import { publishMainStream, publishUserEvent } from '@/services/stream.js';
+import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { Users, FollowRequests, Followings } from '@/models/index.js';
+import { decrementFollowing } from './delete.js';
 
 type Local = ILocalUser | { id: User['id']; host: User['host']; uri: User['host'] };
 type Remote = IRemoteUser;
diff --git a/packages/backend/src/services/following/requests/accept-all.ts b/packages/backend/src/services/following/requests/accept-all.ts
index 06ff835c02..a240bec8f4 100644
--- a/packages/backend/src/services/following/requests/accept-all.ts
+++ b/packages/backend/src/services/following/requests/accept-all.ts
@@ -1,6 +1,6 @@
-import accept from './accept';
-import { User } from '@/models/entities/user';
-import { FollowRequests, Users } from '@/models/index';
+import accept from './accept.js';
+import { User } from '@/models/entities/user.js';
+import { FollowRequests, Users } from '@/models/index.js';
 
 /**
  * 指定したユーザー宛てのフォローリクエストをすべて承認
diff --git a/packages/backend/src/services/following/requests/accept.ts b/packages/backend/src/services/following/requests/accept.ts
index fcda49758e..b8113cd1b1 100644
--- a/packages/backend/src/services/following/requests/accept.ts
+++ b/packages/backend/src/services/following/requests/accept.ts
@@ -1,12 +1,12 @@
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderAccept from '@/remote/activitypub/renderer/accept';
-import { deliver } from '@/queue/index';
-import { publishMainStream } from '@/services/stream';
-import { insertFollowingDoc } from '../create';
-import { User, ILocalUser } from '@/models/entities/user';
-import { FollowRequests, Users } from '@/models/index';
-import { IdentifiableError } from '@/misc/identifiable-error';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderAccept from '@/remote/activitypub/renderer/accept.js';
+import { deliver } from '@/queue/index.js';
+import { publishMainStream } from '@/services/stream.js';
+import { insertFollowingDoc } from '../create.js';
+import { User, ILocalUser } from '@/models/entities/user.js';
+import { FollowRequests, Users } from '@/models/index.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
 
 export default async function(followee: { id: User['id']; host: User['host']; uri: User['host']; inbox: User['inbox']; sharedInbox: User['sharedInbox']; }, follower: User) {
 	const request = await FollowRequests.findOne({
diff --git a/packages/backend/src/services/following/requests/cancel.ts b/packages/backend/src/services/following/requests/cancel.ts
index 53e54f2a1b..ca9777d38b 100644
--- a/packages/backend/src/services/following/requests/cancel.ts
+++ b/packages/backend/src/services/following/requests/cancel.ts
@@ -1,11 +1,11 @@
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { deliver } from '@/queue/index';
-import { publishMainStream } from '@/services/stream';
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { User, ILocalUser } from '@/models/entities/user';
-import { Users, FollowRequests } from '@/models/index';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { deliver } from '@/queue/index.js';
+import { publishMainStream } from '@/services/stream.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { User, ILocalUser } from '@/models/entities/user.js';
+import { Users, FollowRequests } from '@/models/index.js';
 
 export default async function(followee: { id: User['id']; host: User['host']; uri: User['host']; inbox: User['inbox'] }, follower: { id: User['id']; host: User['host']; uri: User['host'] }) {
 	if (Users.isRemoteUser(followee)) {
diff --git a/packages/backend/src/services/following/requests/create.ts b/packages/backend/src/services/following/requests/create.ts
index e45023015d..bca607d7e4 100644
--- a/packages/backend/src/services/following/requests/create.ts
+++ b/packages/backend/src/services/following/requests/create.ts
@@ -1,11 +1,11 @@
-import { publishMainStream } from '@/services/stream';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderFollow from '@/remote/activitypub/renderer/follow';
-import { deliver } from '@/queue/index';
-import { User } from '@/models/entities/user';
-import { Blockings, FollowRequests, Users } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { createNotification } from '../../create-notification';
+import { publishMainStream } from '@/services/stream.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderFollow from '@/remote/activitypub/renderer/follow.js';
+import { deliver } from '@/queue/index.js';
+import { User } from '@/models/entities/user.js';
+import { Blockings, FollowRequests, Users } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { createNotification } from '../../create-notification.js';
 
 export default async function(follower: { id: User['id']; host: User['host']; uri: User['host']; inbox: User['inbox']; sharedInbox: User['sharedInbox']; }, followee: { id: User['id']; host: User['host']; uri: User['host']; inbox: User['inbox']; sharedInbox: User['sharedInbox']; }, requestId?: string) {
 	if (follower.id === followee.id) return;
diff --git a/packages/backend/src/services/i/pin.ts b/packages/backend/src/services/i/pin.ts
index 167dfc10c1..06d7e79e89 100644
--- a/packages/backend/src/services/i/pin.ts
+++ b/packages/backend/src/services/i/pin.ts
@@ -1,15 +1,15 @@
-import config from '@/config/index';
-import renderAdd from '@/remote/activitypub/renderer/add';
-import renderRemove from '@/remote/activitypub/renderer/remove';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { Notes, UserNotePinings, Users } from '@/models/index';
-import { UserNotePining } from '@/models/entities/user-note-pining';
-import { genId } from '@/misc/gen-id';
-import { deliverToFollowers } from '@/remote/activitypub/deliver-manager';
-import { deliverToRelays } from '../relay';
+import config from '@/config/index.js';
+import renderAdd from '@/remote/activitypub/renderer/add.js';
+import renderRemove from '@/remote/activitypub/renderer/remove.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { Notes, UserNotePinings, Users } from '@/models/index.js';
+import { UserNotePining } from '@/models/entities/user-note-pining.js';
+import { genId } from '@/misc/gen-id.js';
+import { deliverToFollowers } from '@/remote/activitypub/deliver-manager.js';
+import { deliverToRelays } from '../relay.js';
 
 /**
  * 指定した投稿をピン留めします
diff --git a/packages/backend/src/services/i/update.ts b/packages/backend/src/services/i/update.ts
index f700d9b48b..1fbaf40df1 100644
--- a/packages/backend/src/services/i/update.ts
+++ b/packages/backend/src/services/i/update.ts
@@ -1,10 +1,10 @@
-import renderUpdate from '@/remote/activitypub/renderer/update';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { Users } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { renderPerson } from '@/remote/activitypub/renderer/person';
-import { deliverToFollowers } from '@/remote/activitypub/deliver-manager';
-import { deliverToRelays } from '../relay';
+import renderUpdate from '@/remote/activitypub/renderer/update.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { Users } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { renderPerson } from '@/remote/activitypub/renderer/person.js';
+import { deliverToFollowers } from '@/remote/activitypub/deliver-manager.js';
+import { deliverToRelays } from '../relay.js';
 
 export async function publishToFollowers(userId: User['id']) {
 	const user = await Users.findOne(userId);
diff --git a/packages/backend/src/services/insert-moderation-log.ts b/packages/backend/src/services/insert-moderation-log.ts
index affed4095f..0a7c472d8d 100644
--- a/packages/backend/src/services/insert-moderation-log.ts
+++ b/packages/backend/src/services/insert-moderation-log.ts
@@ -1,6 +1,6 @@
-import { ModerationLogs } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { User } from '@/models/entities/user';
+import { ModerationLogs } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { User } from '@/models/entities/user.js';
 
 export async function insertModerationLog(moderator: { id: User['id'] }, type: string, info?: Record<string, any>) {
 	await ModerationLogs.insert({
diff --git a/packages/backend/src/services/instance-actor.ts b/packages/backend/src/services/instance-actor.ts
index 6f2e32667a..e271710488 100644
--- a/packages/backend/src/services/instance-actor.ts
+++ b/packages/backend/src/services/instance-actor.ts
@@ -1,7 +1,7 @@
-import { createSystemUser } from './create-system-user';
-import { ILocalUser } from '@/models/entities/user';
-import { Users } from '@/models/index';
-import { Cache } from '@/misc/cache';
+import { createSystemUser } from './create-system-user.js';
+import { ILocalUser } from '@/models/entities/user.js';
+import { Users } from '@/models/index.js';
+import { Cache } from '@/misc/cache.js';
 
 const ACTOR_USERNAME = 'instance.actor' as const;
 
diff --git a/packages/backend/src/services/logger.ts b/packages/backend/src/services/logger.ts
index 1962088b63..89d6d57209 100644
--- a/packages/backend/src/services/logger.ts
+++ b/packages/backend/src/services/logger.ts
@@ -1,8 +1,9 @@
-import * as cluster from 'cluster';
-import * as chalk from 'chalk';
+import cluster from 'node:cluster';
+import chalk from 'chalk';
+import { default as convertColor } from 'color-convert';
 import { format as dateFormat } from 'date-fns';
-import { envOption } from '../env';
-import config from '@/config/index';
+import { envOption } from '../env.js';
+import config from '@/config/index.js';
 
 import * as SyslogPro from 'syslog-pro';
 
@@ -66,7 +67,7 @@ export default class Logger {
 			level === 'debug' ? chalk.gray('VERB') :
 			level === 'info' ? chalk.blue('INFO') :
 			null;
-		const domains = [this.domain].concat(subDomains).map(d => d.color ? chalk.keyword(d.color)(d.name) : chalk.white(d.name));
+		const domains = [this.domain].concat(subDomains).map(d => d.color ? chalk.rgb(...convertColor.keyword.rgb(d.color))(d.name) : chalk.white(d.name));
 		const m =
 			level === 'error' ? chalk.red(message) :
 			level === 'warning' ? chalk.yellow(message) :
diff --git a/packages/backend/src/services/messages/create.ts b/packages/backend/src/services/messages/create.ts
index dc89bc785d..c3908b2552 100644
--- a/packages/backend/src/services/messages/create.ts
+++ b/packages/backend/src/services/messages/create.ts
@@ -1,17 +1,17 @@
-import { User } from '@/models/entities/user';
-import { UserGroup } from '@/models/entities/user-group';
-import { DriveFile } from '@/models/entities/drive-file';
-import { MessagingMessages, UserGroupJoinings, Mutings, Users } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { publishMessagingStream, publishMessagingIndexStream, publishMainStream, publishGroupMessagingStream } from '@/services/stream';
-import pushNotification from '../push-notification';
+import { User } from '@/models/entities/user.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { MessagingMessages, UserGroupJoinings, Mutings, Users } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { publishMessagingStream, publishMessagingIndexStream, publishMainStream, publishGroupMessagingStream } from '@/services/stream.js';
+import pushNotification from '../push-notification.js';
 import { Not } from 'typeorm';
-import { Note } from '@/models/entities/note';
-import renderNote from '@/remote/activitypub/renderer/note';
-import renderCreate from '@/remote/activitypub/renderer/create';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { deliver } from '@/queue/index';
+import { Note } from '@/models/entities/note.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import renderCreate from '@/remote/activitypub/renderer/create.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { deliver } from '@/queue/index.js';
 
 export async function createMessage(user: { id: User['id']; host: User['host']; }, recipientUser: User | undefined, recipientGroup: UserGroup | undefined, text: string | null | undefined, file: DriveFile | null, uri?: string) {
 	const message = {
diff --git a/packages/backend/src/services/messages/delete.ts b/packages/backend/src/services/messages/delete.ts
index 5c299c9a50..82eb6cb21c 100644
--- a/packages/backend/src/services/messages/delete.ts
+++ b/packages/backend/src/services/messages/delete.ts
@@ -1,11 +1,11 @@
-import config from '@/config/index';
-import { MessagingMessages, Users } from '@/models/index';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { publishGroupMessagingStream, publishMessagingStream } from '@/services/stream';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderDelete from '@/remote/activitypub/renderer/delete';
-import renderTombstone from '@/remote/activitypub/renderer/tombstone';
-import { deliver } from '@/queue/index';
+import config from '@/config/index.js';
+import { MessagingMessages, Users } from '@/models/index.js';
+import { MessagingMessage } from '@/models/entities/messaging-message.js';
+import { publishGroupMessagingStream, publishMessagingStream } from '@/services/stream.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderDelete from '@/remote/activitypub/renderer/delete.js';
+import renderTombstone from '@/remote/activitypub/renderer/tombstone.js';
+import { deliver } from '@/queue/index.js';
 
 export async function deleteMessage(message: MessagingMessage) {
 	await MessagingMessages.delete(message.id);
diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts
index 7a4c2cef12..ed242a0b59 100644
--- a/packages/backend/src/services/note/create.ts
+++ b/packages/backend/src/services/note/create.ts
@@ -1,39 +1,39 @@
 import * as mfm from 'mfm-js';
-import es from '../../db/elasticsearch';
-import { publishMainStream, publishNotesStream } from '@/services/stream';
-import DeliverManager from '@/remote/activitypub/deliver-manager';
-import renderNote from '@/remote/activitypub/renderer/note';
-import renderCreate from '@/remote/activitypub/renderer/create';
-import renderAnnounce from '@/remote/activitypub/renderer/announce';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { resolveUser } from '@/remote/resolve-user';
-import config from '@/config/index';
-import { updateHashtags } from '../update-hashtag';
-import { concat } from '@/prelude/array';
-import { insertNoteUnread } from '@/services/note/unread';
-import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc';
-import { extractMentions } from '@/misc/extract-mentions';
-import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm';
-import { extractHashtags } from '@/misc/extract-hashtags';
-import { Note, IMentionedRemoteUsers } from '@/models/entities/note';
-import { Mutings, Users, NoteWatchings, Notes, Instances, UserProfiles, Antennas, Followings, MutedNotes, Channels, ChannelFollowings, Blockings, NoteThreadMutings } from '@/models/index';
-import { DriveFile } from '@/models/entities/drive-file';
-import { App } from '@/models/entities/app';
+import es from '../../db/elasticsearch.js';
+import { publishMainStream, publishNotesStream } from '@/services/stream.js';
+import DeliverManager from '@/remote/activitypub/deliver-manager.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import renderCreate from '@/remote/activitypub/renderer/create.js';
+import renderAnnounce from '@/remote/activitypub/renderer/announce.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { resolveUser } from '@/remote/resolve-user.js';
+import config from '@/config/index.js';
+import { updateHashtags } from '../update-hashtag.js';
+import { concat } from '@/prelude/array.js';
+import { insertNoteUnread } from '@/services/note/unread.js';
+import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js';
+import { extractMentions } from '@/misc/extract-mentions.js';
+import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm.js';
+import { extractHashtags } from '@/misc/extract-hashtags.js';
+import { Note, IMentionedRemoteUsers } from '@/models/entities/note.js';
+import { Mutings, Users, NoteWatchings, Notes, Instances, UserProfiles, Antennas, Followings, MutedNotes, Channels, ChannelFollowings, Blockings, NoteThreadMutings } from '@/models/index.js';
+import { DriveFile } from '@/models/entities/drive-file.js';
+import { App } from '@/models/entities/app.js';
 import { Not, getConnection, In } from 'typeorm';
-import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { genId } from '@/misc/gen-id';
-import { notesChart, perUserNotesChart, activeUsersChart, instanceChart } from '@/services/chart/index';
-import { Poll, IPoll } from '@/models/entities/poll';
-import { createNotification } from '../create-notification';
-import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
-import { checkHitAntenna } from '@/misc/check-hit-antenna';
-import { checkWordMute } from '@/misc/check-word-mute';
-import { addNoteToAntenna } from '../add-note-to-antenna';
-import { countSameRenotes } from '@/misc/count-same-renotes';
-import { deliverToRelays } from '../relay';
-import { Channel } from '@/models/entities/channel';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
-import { getAntennas } from '@/misc/antenna-cache';
+import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { genId } from '@/misc/gen-id.js';
+import { notesChart, perUserNotesChart, activeUsersChart, instanceChart } from '@/services/chart/index.js';
+import { Poll, IPoll } from '@/models/entities/poll.js';
+import { createNotification } from '../create-notification.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
+import { checkHitAntenna } from '@/misc/check-hit-antenna.js';
+import { checkWordMute } from '@/misc/check-word-mute.js';
+import { addNoteToAntenna } from '../add-note-to-antenna.js';
+import { countSameRenotes } from '@/misc/count-same-renotes.js';
+import { deliverToRelays } from '../relay.js';
+import { Channel } from '@/models/entities/channel.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
+import { getAntennas } from '@/misc/antenna-cache.js';
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
diff --git a/packages/backend/src/services/note/delete.ts b/packages/backend/src/services/note/delete.ts
index 77723fe8b7..cf23656f8f 100644
--- a/packages/backend/src/services/note/delete.ts
+++ b/packages/backend/src/services/note/delete.ts
@@ -1,18 +1,18 @@
-import { publishNoteStream } from '@/services/stream';
-import renderDelete from '@/remote/activitypub/renderer/delete';
-import renderAnnounce from '@/remote/activitypub/renderer/announce';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderTombstone from '@/remote/activitypub/renderer/tombstone';
-import config from '@/config/index';
-import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc';
-import { User, ILocalUser, IRemoteUser } from '@/models/entities/user';
-import { Note, IMentionedRemoteUsers } from '@/models/entities/note';
-import { Notes, Users, Instances } from '@/models/index';
-import { notesChart, perUserNotesChart, instanceChart } from '@/services/chart/index';
-import { deliverToFollowers, deliverToUser } from '@/remote/activitypub/deliver-manager';
-import { countSameRenotes } from '@/misc/count-same-renotes';
-import { deliverToRelays } from '../relay';
+import { publishNoteStream } from '@/services/stream.js';
+import renderDelete from '@/remote/activitypub/renderer/delete.js';
+import renderAnnounce from '@/remote/activitypub/renderer/announce.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderTombstone from '@/remote/activitypub/renderer/tombstone.js';
+import config from '@/config/index.js';
+import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js';
+import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
+import { Note, IMentionedRemoteUsers } from '@/models/entities/note.js';
+import { Notes, Users, Instances } from '@/models/index.js';
+import { notesChart, perUserNotesChart, instanceChart } from '@/services/chart/index.js';
+import { deliverToFollowers, deliverToUser } from '@/remote/activitypub/deliver-manager.js';
+import { countSameRenotes } from '@/misc/count-same-renotes.js';
+import { deliverToRelays } from '../relay.js';
 import { Brackets, In } from 'typeorm';
 
 /**
diff --git a/packages/backend/src/services/note/polls/update.ts b/packages/backend/src/services/note/polls/update.ts
index a22ce8e373..88baf16b64 100644
--- a/packages/backend/src/services/note/polls/update.ts
+++ b/packages/backend/src/services/note/polls/update.ts
@@ -1,10 +1,10 @@
-import renderUpdate from '@/remote/activitypub/renderer/update';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import renderNote from '@/remote/activitypub/renderer/note';
-import { Users, Notes } from '@/models/index';
-import { Note } from '@/models/entities/note';
-import { deliverToFollowers } from '@/remote/activitypub/deliver-manager';
-import { deliverToRelays } from '../../relay';
+import renderUpdate from '@/remote/activitypub/renderer/update.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import renderNote from '@/remote/activitypub/renderer/note.js';
+import { Users, Notes } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
+import { deliverToFollowers } from '@/remote/activitypub/deliver-manager.js';
+import { deliverToRelays } from '../../relay.js';
 
 export async function deliverQuestionUpdate(noteId: Note['id']) {
 	const note = await Notes.findOne(noteId);
diff --git a/packages/backend/src/services/note/polls/vote.ts b/packages/backend/src/services/note/polls/vote.ts
index 25c62f3e3d..9b83b1953f 100644
--- a/packages/backend/src/services/note/polls/vote.ts
+++ b/packages/backend/src/services/note/polls/vote.ts
@@ -1,10 +1,10 @@
-import { publishNoteStream } from '@/services/stream';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { PollVotes, NoteWatchings, Polls, Blockings } from '@/models/index';
+import { publishNoteStream } from '@/services/stream.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { PollVotes, NoteWatchings, Polls, Blockings } from '@/models/index.js';
 import { Not } from 'typeorm';
-import { genId } from '@/misc/gen-id';
-import { createNotification } from '../../create-notification';
+import { genId } from '@/misc/gen-id.js';
+import { createNotification } from '../../create-notification.js';
 
 export default async function(user: User, note: Note, choice: number) {
 	const poll = await Polls.findOne(note.id);
diff --git a/packages/backend/src/services/note/reaction/create.ts b/packages/backend/src/services/note/reaction/create.ts
index c01d43c221..236aa79938 100644
--- a/packages/backend/src/services/note/reaction/create.ts
+++ b/packages/backend/src/services/note/reaction/create.ts
@@ -1,19 +1,19 @@
-import { publishNoteStream } from '@/services/stream';
-import { renderLike } from '@/remote/activitypub/renderer/like';
-import DeliverManager from '@/remote/activitypub/deliver-manager';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { toDbReaction, decodeReaction } from '@/misc/reaction-lib';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { NoteReactions, Users, NoteWatchings, Notes, Emojis, Blockings } from '@/models/index';
+import { publishNoteStream } from '@/services/stream.js';
+import { renderLike } from '@/remote/activitypub/renderer/like.js';
+import DeliverManager from '@/remote/activitypub/deliver-manager.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { toDbReaction, decodeReaction } from '@/misc/reaction-lib.js';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { NoteReactions, Users, NoteWatchings, Notes, Emojis, Blockings } from '@/models/index.js';
 import { Not } from 'typeorm';
-import { perUserReactionsChart } from '@/services/chart/index';
-import { genId } from '@/misc/gen-id';
-import { createNotification } from '../../create-notification';
-import deleteReaction from './delete';
-import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
-import { NoteReaction } from '@/models/entities/note-reaction';
-import { IdentifiableError } from '@/misc/identifiable-error';
+import { perUserReactionsChart } from '@/services/chart/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { createNotification } from '../../create-notification.js';
+import deleteReaction from './delete.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
+import { NoteReaction } from '@/models/entities/note-reaction.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
 
 export default async (user: { id: User['id']; host: User['host']; }, note: Note, reaction?: string) => {
 	// Check blocking
diff --git a/packages/backend/src/services/note/reaction/delete.ts b/packages/backend/src/services/note/reaction/delete.ts
index 21af819532..62b00f56fd 100644
--- a/packages/backend/src/services/note/reaction/delete.ts
+++ b/packages/backend/src/services/note/reaction/delete.ts
@@ -1,13 +1,13 @@
-import { publishNoteStream } from '@/services/stream';
-import { renderLike } from '@/remote/activitypub/renderer/like';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import DeliverManager from '@/remote/activitypub/deliver-manager';
-import { IdentifiableError } from '@/misc/identifiable-error';
-import { User, IRemoteUser } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { NoteReactions, Users, Notes } from '@/models/index';
-import { decodeReaction } from '@/misc/reaction-lib';
+import { publishNoteStream } from '@/services/stream.js';
+import { renderLike } from '@/remote/activitypub/renderer/like.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import DeliverManager from '@/remote/activitypub/deliver-manager.js';
+import { IdentifiableError } from '@/misc/identifiable-error.js';
+import { User, IRemoteUser } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { NoteReactions, Users, Notes } from '@/models/index.js';
+import { decodeReaction } from '@/misc/reaction-lib.js';
 
 export default async (user: { id: User['id']; host: User['host']; }, note: Note) => {
 	// if already unreacted
diff --git a/packages/backend/src/services/note/read.ts b/packages/backend/src/services/note/read.ts
index 032f1e84e6..28827c5965 100644
--- a/packages/backend/src/services/note/read.ts
+++ b/packages/backend/src/services/note/read.ts
@@ -1,13 +1,13 @@
-import { publishMainStream } from '@/services/stream';
-import { Note } from '@/models/entities/note';
-import { User } from '@/models/entities/user';
-import { NoteUnreads, AntennaNotes, Users, Followings, ChannelFollowings } from '@/models/index';
+import { publishMainStream } from '@/services/stream.js';
+import { Note } from '@/models/entities/note.js';
+import { User } from '@/models/entities/user.js';
+import { NoteUnreads, AntennaNotes, Users, Followings, ChannelFollowings } from '@/models/index.js';
 import { Not, IsNull, In } from 'typeorm';
-import { Channel } from '@/models/entities/channel';
-import { checkHitAntenna } from '@/misc/check-hit-antenna';
-import { getAntennas } from '@/misc/antenna-cache';
-import { readNotificationByQuery } from '@/server/api/common/read-notification';
-import { Packed } from '@/misc/schema';
+import { Channel } from '@/models/entities/channel.js';
+import { checkHitAntenna } from '@/misc/check-hit-antenna.js';
+import { getAntennas } from '@/misc/antenna-cache.js';
+import { readNotificationByQuery } from '@/server/api/common/read-notification.js';
+import { Packed } from '@/misc/schema.js';
 
 /**
  * Mark notes as read
diff --git a/packages/backend/src/services/note/unread.ts b/packages/backend/src/services/note/unread.ts
index 0b2b5b8d75..ef95dc7e8c 100644
--- a/packages/backend/src/services/note/unread.ts
+++ b/packages/backend/src/services/note/unread.ts
@@ -1,8 +1,8 @@
-import { Note } from '@/models/entities/note';
-import { publishMainStream } from '@/services/stream';
-import { User } from '@/models/entities/user';
-import { Mutings, NoteThreadMutings, NoteUnreads } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import { Note } from '@/models/entities/note.js';
+import { publishMainStream } from '@/services/stream.js';
+import { User } from '@/models/entities/user.js';
+import { Mutings, NoteThreadMutings, NoteUnreads } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 export async function insertNoteUnread(userId: User['id'], note: Note, params: {
 	// NOTE: isSpecifiedがtrueならisMentionedは必ずfalse
diff --git a/packages/backend/src/services/note/unwatch.ts b/packages/backend/src/services/note/unwatch.ts
index befdb2aa77..3964b2ba5f 100644
--- a/packages/backend/src/services/note/unwatch.ts
+++ b/packages/backend/src/services/note/unwatch.ts
@@ -1,6 +1,6 @@
-import { User } from '@/models/entities/user';
-import { NoteWatchings } from '@/models/index';
-import { Note } from '@/models/entities/note';
+import { User } from '@/models/entities/user.js';
+import { NoteWatchings } from '@/models/index.js';
+import { Note } from '@/models/entities/note.js';
 
 export default async (me: User['id'], note: Note) => {
 	await NoteWatchings.delete({
diff --git a/packages/backend/src/services/note/watch.ts b/packages/backend/src/services/note/watch.ts
index ebaaf35936..2210c44a75 100644
--- a/packages/backend/src/services/note/watch.ts
+++ b/packages/backend/src/services/note/watch.ts
@@ -1,8 +1,8 @@
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { NoteWatchings } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { NoteWatching } from '@/models/entities/note-watching';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { NoteWatchings } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { NoteWatching } from '@/models/entities/note-watching.js';
 
 export default async (me: User['id'], note: Note) => {
 	// 自分の投稿はwatchできない
diff --git a/packages/backend/src/services/push-notification.ts b/packages/backend/src/services/push-notification.ts
index 2133768a96..2d73961290 100644
--- a/packages/backend/src/services/push-notification.ts
+++ b/packages/backend/src/services/push-notification.ts
@@ -1,9 +1,9 @@
 import * as push from 'web-push';
-import config from '@/config/index';
-import { SwSubscriptions } from '@/models/index';
-import { fetchMeta } from '@/misc/fetch-meta';
-import { Packed } from '@/misc/schema';
-import { getNoteSummary } from '@/misc/get-note-summary';
+import config from '@/config/index.js';
+import { SwSubscriptions } from '@/models/index.js';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import { Packed } from '@/misc/schema.js';
+import { getNoteSummary } from '@/misc/get-note-summary.js';
 
 type notificationType = 'notification' | 'unreadMessagingMessage';
 type notificationBody = Packed<'Notification'> | Packed<'MessagingMessage'>;
diff --git a/packages/backend/src/services/register-or-fetch-instance-doc.ts b/packages/backend/src/services/register-or-fetch-instance-doc.ts
index c42506a2ed..152930dbd9 100644
--- a/packages/backend/src/services/register-or-fetch-instance-doc.ts
+++ b/packages/backend/src/services/register-or-fetch-instance-doc.ts
@@ -1,8 +1,8 @@
-import { Instance } from '@/models/entities/instance';
-import { Instances } from '@/models/index';
-import { genId } from '@/misc/gen-id';
-import { toPuny } from '@/misc/convert-host';
-import { Cache } from '@/misc/cache';
+import { Instance } from '@/models/entities/instance.js';
+import { Instances } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { toPuny } from '@/misc/convert-host.js';
+import { Cache } from '@/misc/cache.js';
 
 const cache = new Cache<Instance>(1000 * 60 * 60);
 
diff --git a/packages/backend/src/services/relay.ts b/packages/backend/src/services/relay.ts
index 33a5ef7f9b..6f0da503fc 100644
--- a/packages/backend/src/services/relay.ts
+++ b/packages/backend/src/services/relay.ts
@@ -1,11 +1,11 @@
-import { createSystemUser } from './create-system-user';
-import { renderFollowRelay } from '@/remote/activitypub/renderer/follow-relay';
-import { renderActivity, attachLdSignature } from '@/remote/activitypub/renderer/index';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { deliver } from '@/queue/index';
-import { ILocalUser, User } from '@/models/entities/user';
-import { Users, Relays } from '@/models/index';
-import { genId } from '@/misc/gen-id';
+import { createSystemUser } from './create-system-user.js';
+import { renderFollowRelay } from '@/remote/activitypub/renderer/follow-relay.js';
+import { renderActivity, attachLdSignature } from '@/remote/activitypub/renderer/index.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { deliver } from '@/queue/index.js';
+import { ILocalUser, User } from '@/models/entities/user.js';
+import { Users, Relays } from '@/models/index.js';
+import { genId } from '@/misc/gen-id.js';
 
 const ACTOR_USERNAME = 'relay.actor' as const;
 
diff --git a/packages/backend/src/services/send-email-notification.ts b/packages/backend/src/services/send-email-notification.ts
index 157bacb46d..debaf3476d 100644
--- a/packages/backend/src/services/send-email-notification.ts
+++ b/packages/backend/src/services/send-email-notification.ts
@@ -1,28 +1,33 @@
-import { UserProfiles } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { sendEmail } from './send-email';
-import { I18n } from '@/misc/i18n';
-import * as Acct from 'misskey-js/built/acct';
-const locales = require('../../../../locales/index.js');
+import { UserProfiles } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { sendEmail } from './send-email.js';
+import { I18n } from '@/misc/i18n.js';
+import * as Acct from '@/misc/acct.js';
+// TODO
+//const locales = await import('../../../../locales/index.js');
 
 // TODO: locale ファイルをクライアント用とサーバー用で分けたい
 
 async function follow(userId: User['id'], follower: User) {
+	/*
 	const userProfile = await UserProfiles.findOneOrFail({ userId: userId });
 	if (!userProfile.email || !userProfile.emailNotificationTypes.includes('follow')) return;
 	const locale = locales[userProfile.lang || 'ja-JP'];
 	const i18n = new I18n(locale);
 	// TODO: render user information html
 	sendEmail(userProfile.email, i18n.t('_email._follow.title'), `${follower.name} (@${Acct.toString(follower)})`, `${follower.name} (@${Acct.toString(follower)})`);
+	*/
 }
 
 async function receiveFollowRequest(userId: User['id'], follower: User) {
+	/*
 	const userProfile = await UserProfiles.findOneOrFail({ userId: userId });
 	if (!userProfile.email || !userProfile.emailNotificationTypes.includes('receiveFollowRequest')) return;
 	const locale = locales[userProfile.lang || 'ja-JP'];
 	const i18n = new I18n(locale);
 	// TODO: render user information html
 	sendEmail(userProfile.email, i18n.t('_email._receiveFollowRequest.title'), `${follower.name} (@${Acct.toString(follower)})`, `${follower.name} (@${Acct.toString(follower)})`);
+	*/
 }
 
 export const sendEmailNotification = {
diff --git a/packages/backend/src/services/send-email.ts b/packages/backend/src/services/send-email.ts
index 1fd406cb68..b35d22548c 100644
--- a/packages/backend/src/services/send-email.ts
+++ b/packages/backend/src/services/send-email.ts
@@ -1,7 +1,7 @@
 import * as nodemailer from 'nodemailer';
-import { fetchMeta } from '@/misc/fetch-meta';
-import Logger from './logger';
-import config from '@/config/index';
+import { fetchMeta } from '@/misc/fetch-meta.js';
+import Logger from './logger.js';
+import config from '@/config/index.js';
 
 export const logger = new Logger('email');
 
diff --git a/packages/backend/src/services/stream.ts b/packages/backend/src/services/stream.ts
index c0cefe9af4..9fa2b97135 100644
--- a/packages/backend/src/services/stream.ts
+++ b/packages/backend/src/services/stream.ts
@@ -1,11 +1,11 @@
-import { redisClient } from '../db/redis';
-import { User } from '@/models/entities/user';
-import { Note } from '@/models/entities/note';
-import { UserList } from '@/models/entities/user-list';
-import { UserGroup } from '@/models/entities/user-group';
-import config from '@/config/index';
-import { Antenna } from '@/models/entities/antenna';
-import { Channel } from '@/models/entities/channel';
+import { redisClient } from '../db/redis.js';
+import { User } from '@/models/entities/user.js';
+import { Note } from '@/models/entities/note.js';
+import { UserList } from '@/models/entities/user-list.js';
+import { UserGroup } from '@/models/entities/user-group.js';
+import config from '@/config/index.js';
+import { Antenna } from '@/models/entities/antenna.js';
+import { Channel } from '@/models/entities/channel.js';
 import {
 	StreamChannels,
 	AdminStreamTypes,
@@ -21,8 +21,8 @@ import {
 	NoteStreamTypes,
 	UserListStreamTypes,
 	UserStreamTypes,
-} from '@/server/api/stream/types';
-import { Packed } from '@/misc/schema';
+} from '@/server/api/stream/types.js';
+import { Packed } from '@/misc/schema.js';
 
 class Publisher {
 	private publish = (channel: StreamChannels, type: string | null, value?: any): void => {
diff --git a/packages/backend/src/services/suspend-user.ts b/packages/backend/src/services/suspend-user.ts
index 262c8df5b2..033311a3cc 100644
--- a/packages/backend/src/services/suspend-user.ts
+++ b/packages/backend/src/services/suspend-user.ts
@@ -1,9 +1,9 @@
-import renderDelete from '@/remote/activitypub/renderer/delete';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { deliver } from '@/queue/index';
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { Users, Followings } from '@/models/index';
+import renderDelete from '@/remote/activitypub/renderer/delete.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { deliver } from '@/queue/index.js';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { Users, Followings } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
 
 export async function doPostSuspend(user: { id: User['id']; host: User['host'] }) {
diff --git a/packages/backend/src/services/unsuspend-user.ts b/packages/backend/src/services/unsuspend-user.ts
index 04ad65a361..3be081d0ed 100644
--- a/packages/backend/src/services/unsuspend-user.ts
+++ b/packages/backend/src/services/unsuspend-user.ts
@@ -1,10 +1,10 @@
-import renderDelete from '@/remote/activitypub/renderer/delete';
-import renderUndo from '@/remote/activitypub/renderer/undo';
-import { renderActivity } from '@/remote/activitypub/renderer/index';
-import { deliver } from '@/queue/index';
-import config from '@/config/index';
-import { User } from '@/models/entities/user';
-import { Users, Followings } from '@/models/index';
+import renderDelete from '@/remote/activitypub/renderer/delete.js';
+import renderUndo from '@/remote/activitypub/renderer/undo.js';
+import { renderActivity } from '@/remote/activitypub/renderer/index.js';
+import { deliver } from '@/queue/index.js';
+import config from '@/config/index.js';
+import { User } from '@/models/entities/user.js';
+import { Users, Followings } from '@/models/index.js';
 import { Not, IsNull } from 'typeorm';
 
 export async function doPostUnsuspend(user: User) {
diff --git a/packages/backend/src/services/update-hashtag.ts b/packages/backend/src/services/update-hashtag.ts
index e8504f6ff0..b6fb38bc5a 100644
--- a/packages/backend/src/services/update-hashtag.ts
+++ b/packages/backend/src/services/update-hashtag.ts
@@ -1,9 +1,9 @@
-import { User } from '@/models/entities/user';
-import { Hashtags, Users } from '@/models/index';
-import { hashtagChart } from '@/services/chart/index';
-import { genId } from '@/misc/gen-id';
-import { Hashtag } from '@/models/entities/hashtag';
-import { normalizeForSearch } from '@/misc/normalize-for-search';
+import { User } from '@/models/entities/user.js';
+import { Hashtags, Users } from '@/models/index.js';
+import { hashtagChart } from '@/services/chart/index.js';
+import { genId } from '@/misc/gen-id.js';
+import { Hashtag } from '@/models/entities/hashtag.js';
+import { normalizeForSearch } from '@/misc/normalize-for-search.js';
 
 export async function updateHashtags(user: { id: User['id']; host: User['host']; }, tags: string[]) {
 	for (const tag of tags) {
diff --git a/packages/backend/src/services/user-list/push.ts b/packages/backend/src/services/user-list/push.ts
index 2b862ca9cc..d073afcd3a 100644
--- a/packages/backend/src/services/user-list/push.ts
+++ b/packages/backend/src/services/user-list/push.ts
@@ -1,11 +1,11 @@
-import { publishUserListStream } from '@/services/stream';
-import { User } from '@/models/entities/user';
-import { UserList } from '@/models/entities/user-list';
-import { UserListJoinings, Users } from '@/models/index';
-import { UserListJoining } from '@/models/entities/user-list-joining';
-import { genId } from '@/misc/gen-id';
-import { fetchProxyAccount } from '@/misc/fetch-proxy-account';
-import createFollowing from '../following/create';
+import { publishUserListStream } from '@/services/stream.js';
+import { User } from '@/models/entities/user.js';
+import { UserList } from '@/models/entities/user-list.js';
+import { UserListJoinings, Users } from '@/models/index.js';
+import { UserListJoining } from '@/models/entities/user-list-joining.js';
+import { genId } from '@/misc/gen-id.js';
+import { fetchProxyAccount } from '@/misc/fetch-proxy-account.js';
+import createFollowing from '../following/create.js';
 
 export async function pushUserToUserList(target: User, list: UserList) {
 	await UserListJoinings.insert({
diff --git a/packages/backend/src/services/validate-email-for-account.ts b/packages/backend/src/services/validate-email-for-account.ts
index 1d039fb263..3c49d37eef 100644
--- a/packages/backend/src/services/validate-email-for-account.ts
+++ b/packages/backend/src/services/validate-email-for-account.ts
@@ -1,5 +1,5 @@
 import validateEmail from 'deep-email-validator';
-import { UserProfiles } from '@/models';
+import { UserProfiles } from '@/models/index.js';
 
 export async function validateEmailForAccount(emailAddress: string): Promise<{
 	available: boolean;
diff --git a/packages/backend/src/tools/accept-migration.ts b/packages/backend/src/tools/accept-migration.ts
index 2e54fc129f..adbfcdadf7 100644
--- a/packages/backend/src/tools/accept-migration.ts
+++ b/packages/backend/src/tools/accept-migration.ts
@@ -1,7 +1,7 @@
 // ex) node built/tools/accept-migration Yo 1000000000001
 
 import { createConnection } from 'typeorm';
-import config from '@/config/index';
+import config from '@/config/index.js';
 
 createConnection({
 	type: 'postgres',
diff --git a/packages/backend/src/tools/demote-admin.ts b/packages/backend/src/tools/demote-admin.ts
index 45e32b513c..7f67222473 100644
--- a/packages/backend/src/tools/demote-admin.ts
+++ b/packages/backend/src/tools/demote-admin.ts
@@ -1,4 +1,4 @@
-import { initDb } from '../db/postgre';
+import { initDb } from '../db/postgre.js';
 
 async function main(username: string) {
 	if (!username) throw `username required`;
diff --git a/packages/backend/src/tools/mark-admin.ts b/packages/backend/src/tools/mark-admin.ts
index 88d59518ab..630179e7ab 100644
--- a/packages/backend/src/tools/mark-admin.ts
+++ b/packages/backend/src/tools/mark-admin.ts
@@ -1,4 +1,4 @@
-import { initDb } from '../db/postgre';
+import { initDb } from '../db/postgre.js';
 
 async function main(username: string) {
 	if (!username) throw `username required`;
diff --git a/packages/backend/src/tools/refresh-question.ts b/packages/backend/src/tools/refresh-question.ts
index 3bbb781ae7..0111a2257a 100644
--- a/packages/backend/src/tools/refresh-question.ts
+++ b/packages/backend/src/tools/refresh-question.ts
@@ -1,4 +1,4 @@
-import { initDb } from '@/db/postgre';
+import { initDb } from '@/db/postgre.js';
 
 async function main(uri: string): Promise<any> {
 	await initDb();
diff --git a/packages/backend/src/tools/resync-remote-user.ts b/packages/backend/src/tools/resync-remote-user.ts
index 22d2f7c895..8c02ef7efc 100644
--- a/packages/backend/src/tools/resync-remote-user.ts
+++ b/packages/backend/src/tools/resync-remote-user.ts
@@ -1,5 +1,5 @@
-import { initDb } from '@/db/postgre';
-import * as Acct from 'misskey-js/built/acct';
+import { initDb } from '@/db/postgre.js';
+import * as Acct from '@/misc/acct.js';
 
 async function main(acct: string): Promise<any> {
 	await initDb();
diff --git a/packages/backend/src/tools/show-signin-history.ts b/packages/backend/src/tools/show-signin-history.ts
index 7db84ece02..c3388fd1b6 100644
--- a/packages/backend/src/tools/show-signin-history.ts
+++ b/packages/backend/src/tools/show-signin-history.ts
@@ -1,4 +1,4 @@
-import { initDb } from '@/db/postgre';
+import { initDb } from '@/db/postgre.js';
 
 // node built/tools/show-signin-history username
 //  => {Success} {Date} {IPAddrsss}
diff --git a/packages/backend/test/activitypub.ts b/packages/backend/test/activitypub.ts
index 777e7f355b..70f35cafd8 100644
--- a/packages/backend/test/activitypub.ts
+++ b/packages/backend/test/activitypub.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import rndstr from 'rndstr';
 import * as assert from 'assert';
-import { initTestDb } from './utils';
+import { initTestDb } from './utils.js';
 
 describe('ActivityPub', () => {
 	before(async () => {
@@ -33,8 +33,8 @@ describe('ActivityPub', () => {
 		};
 
 		it('Minimum Actor', async () => {
-			const { MockResolver } = await import('./misc/mock-resolver');
-			const { createPerson } = await import('../src/remote/activitypub/models/person');
+			const { MockResolver } = await import('./misc/mock-resolver.js');
+			const { createPerson } = await import('../src/remote/activitypub/models/person.js');
 
 			const resolver = new MockResolver();
 			resolver._register(actor.id, actor);
@@ -47,8 +47,8 @@ describe('ActivityPub', () => {
 		});
 
 		it('Minimum Note', async () => {
-			const { MockResolver } = await import('./misc/mock-resolver');
-			const { createNote } = await import('../src/remote/activitypub/models/note');
+			const { MockResolver } = await import('./misc/mock-resolver.js');
+			const { createNote } = await import('../src/remote/activitypub/models/note.js');
 
 			const resolver = new MockResolver();
 			resolver._register(actor.id, actor);
@@ -80,8 +80,8 @@ describe('ActivityPub', () => {
 		};
 
 		it('Actor', async () => {
-			const { MockResolver } = await import('./misc/mock-resolver');
-			const { createPerson } = await import('../src/remote/activitypub/models/person');
+			const { MockResolver } = await import('./misc/mock-resolver.js');
+			const { createPerson } = await import('../src/remote/activitypub/models/person.js');
 
 			const resolver = new MockResolver();
 			resolver._register(actor.id, actor);
diff --git a/packages/backend/test/ap-request.ts b/packages/backend/test/ap-request.ts
index 4a9799eb99..48f4fceb51 100644
--- a/packages/backend/test/ap-request.ts
+++ b/packages/backend/test/ap-request.ts
@@ -1,7 +1,7 @@
 import * as assert from 'assert';
-import { genRsaKeyPair } from '../src/misc/gen-key-pair';
-import { createSignedPost, createSignedGet } from '../src/remote/activitypub/ap-request';
-const httpSignature = require('http-signature');
+import { genRsaKeyPair } from '../src/misc/gen-key-pair.js';
+import { createSignedPost, createSignedGet } from '../src/remote/activitypub/ap-request.js';
+import httpSignature from 'http-signature';
 
 export const buildParsedSignature = (signingString: string, signature: string, algorithm: string) => {
 	return {
diff --git a/packages/backend/test/api-visibility.ts b/packages/backend/test/api-visibility.ts
index ade7b730b3..d946191be8 100644
--- a/packages/backend/test/api-visibility.ts
+++ b/packages/backend/test/api-visibility.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, startServer, shutdownServer } from './utils.js';
 
 describe('API visibility', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/api.ts b/packages/backend/test/api.ts
index c4802e224e..b1b2ecafc7 100644
--- a/packages/backend/test/api.ts
+++ b/packages/backend/test/api.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, react, uploadFile, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, react, uploadFile, startServer, shutdownServer } from './utils.js';
 
 describe('API', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/block.ts b/packages/backend/test/block.ts
index 6d9efb77b7..103eec991d 100644
--- a/packages/backend/test/block.ts
+++ b/packages/backend/test/block.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, startServer, shutdownServer } from './utils.js';
 
 describe('Block', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/chart.ts b/packages/backend/test/chart.ts
index bd8d4c8171..c8cea874f0 100644
--- a/packages/backend/test/chart.ts
+++ b/packages/backend/test/chart.ts
@@ -2,15 +2,15 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as lolex from '@sinonjs/fake-timers';
-import { async, initTestDb } from './utils';
-import TestChart from '../src/services/chart/charts/test';
-import TestGroupedChart from '../src/services/chart/charts/test-grouped';
-import TestUniqueChart from '../src/services/chart/charts/test-unique';
-import TestIntersectionChart from '../src/services/chart/charts/test-intersection';
-import * as _TestChart from '../src/services/chart/charts/entities/test';
-import * as _TestGroupedChart from '../src/services/chart/charts/entities/test-grouped';
-import * as _TestUniqueChart from '../src/services/chart/charts/entities/test-unique';
-import * as _TestIntersectionChart from '../src/services/chart/charts/entities/test-intersection';
+import { async, initTestDb } from './utils.js';
+import TestChart from '../src/services/chart/charts/test.js';
+import TestGroupedChart from '../src/services/chart/charts/test-grouped.js';
+import TestUniqueChart from '../src/services/chart/charts/test-unique.js';
+import TestIntersectionChart from '../src/services/chart/charts/test-intersection.js';
+import * as _TestChart from '../src/services/chart/charts/entities/test.js';
+import * as _TestGroupedChart from '../src/services/chart/charts/entities/test-grouped.js';
+import * as _TestUniqueChart from '../src/services/chart/charts/entities/test-unique.js';
+import * as _TestIntersectionChart from '../src/services/chart/charts/entities/test-intersection.js';
 
 describe('Chart', () => {
 	let testChart: TestChart;
diff --git a/packages/backend/test/endpoints.ts b/packages/backend/test/endpoints.ts
index 4df080030a..1331cf77c3 100644
--- a/packages/backend/test/endpoints.ts
+++ b/packages/backend/test/endpoints.ts
@@ -3,7 +3,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, react, uploadFile, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, react, uploadFile, startServer, shutdownServer } from './utils.js';
 
 describe('API: Endpoints', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/extract-mentions.ts b/packages/backend/test/extract-mentions.ts
index 9e6d041906..9bfbc4192a 100644
--- a/packages/backend/test/extract-mentions.ts
+++ b/packages/backend/test/extract-mentions.ts
@@ -1,6 +1,6 @@
 import * as assert from 'assert';
 
-import { extractMentions } from '../src/misc/extract-mentions';
+import { extractMentions } from '../src/misc/extract-mentions.js';
 import { parse } from 'mfm-js';
 
 describe('Extract mentions', () => {
diff --git a/packages/backend/test/fetch-resource.ts b/packages/backend/test/fetch-resource.ts
index c403f4d395..4cb4b42562 100644
--- a/packages/backend/test/fetch-resource.ts
+++ b/packages/backend/test/fetch-resource.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, startServer, signup, post, request, simpleGet, port, shutdownServer } from './utils';
+import { async, startServer, signup, post, request, simpleGet, port, shutdownServer } from './utils.js';
 import * as openapi from '@redocly/openapi-core';
 
 // Request Accept
diff --git a/packages/backend/test/ff-visibility.ts b/packages/backend/test/ff-visibility.ts
index 295ab19335..4f6847be6d 100644
--- a/packages/backend/test/ff-visibility.ts
+++ b/packages/backend/test/ff-visibility.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, react, connectStream, startServer, shutdownServer, simpleGet } from './utils';
+import { async, signup, request, post, react, connectStream, startServer, shutdownServer, simpleGet } from './utils.js';
 
 describe('FF visibility', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/get-file-info.ts b/packages/backend/test/get-file-info.ts
index a0146bd815..20061b8708 100644
--- a/packages/backend/test/get-file-info.ts
+++ b/packages/backend/test/get-file-info.ts
@@ -1,6 +1,6 @@
 import * as assert from 'assert';
-import { async } from './utils';
-import { getFileInfo } from '../src/misc/get-file-info';
+import { async } from './utils.js';
+import { getFileInfo } from '../src/misc/get-file-info.js';
 
 describe('Get file info', () => {
 	it('Empty file', async (async () => {
diff --git a/packages/backend/test/loader.js b/packages/backend/test/loader.js
new file mode 100644
index 0000000000..016f32f1a8
--- /dev/null
+++ b/packages/backend/test/loader.js
@@ -0,0 +1,37 @@
+import path from 'path'
+import typescript from 'typescript'
+import { createMatchPath } from 'tsconfig-paths'
+import { resolve as BaseResolve, getFormat, transformSource } from 'ts-node/esm'
+
+const { readConfigFile, parseJsonConfigFileContent, sys } = typescript
+
+const __dirname = path.dirname(new URL(import.meta.url).pathname)
+
+const configFile = readConfigFile('./test/tsconfig.json', sys.readFile)
+if (typeof configFile.error !== 'undefined') {
+  throw new Error(`Failed to load tsconfig: ${configFile.error}`)
+}
+
+const { options } = parseJsonConfigFileContent(
+  configFile.config,
+  {
+    fileExists: sys.fileExists,
+    readFile: sys.readFile,
+    readDirectory: sys.readDirectory,
+    useCaseSensitiveFileNames: true,
+  },
+  __dirname
+)
+
+export { getFormat, transformSource }  // こいつらはそのまま使ってほしいので re-export する
+
+const matchPath = createMatchPath(options.baseUrl, options.paths)
+
+export async function resolve(specifier, context, defaultResolve) {
+  const matchedSpecifier = matchPath(specifier.replace('.js', '.ts'))
+  return BaseResolve(  // ts-node/esm の resolve に tsconfig-paths で解決したパスを渡す
+    matchedSpecifier ? `${matchedSpecifier}.ts` : specifier,
+    context,
+    defaultResolve
+  )
+}
diff --git a/packages/backend/test/mfm.ts b/packages/backend/test/mfm.ts
index ecf886ad6c..5218942a5a 100644
--- a/packages/backend/test/mfm.ts
+++ b/packages/backend/test/mfm.ts
@@ -1,8 +1,8 @@
 import * as assert from 'assert';
 import * as mfm from 'mfm-js';
 
-import { toHtml } from '../src/mfm/to-html';
-import { fromHtml } from '../src/mfm/from-html';
+import { toHtml } from '../src/mfm/to-html.js';
+import { fromHtml } from '../src/mfm/from-html.js';
 
 describe('toHtml', () => {
 	it('br', () => {
diff --git a/packages/backend/test/misc/mock-resolver.ts b/packages/backend/test/misc/mock-resolver.ts
index c245c83bac..5a46daf49f 100644
--- a/packages/backend/test/misc/mock-resolver.ts
+++ b/packages/backend/test/misc/mock-resolver.ts
@@ -1,5 +1,5 @@
-import Resolver from '../../src/remote/activitypub/resolver';
-import { IObject } from '../../src/remote/activitypub/type';
+import Resolver from '../../src/remote/activitypub/resolver.js';
+import { IObject } from '../../src/remote/activitypub/type.js';
 
 type MockResponse = {
 	type: string;
diff --git a/packages/backend/test/mute.ts b/packages/backend/test/mute.ts
index ecac310758..288e8a8055 100644
--- a/packages/backend/test/mute.ts
+++ b/packages/backend/test/mute.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils.js';
 
 describe('Mute', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/note.ts b/packages/backend/test/note.ts
index ab8b6b1903..62cea5208b 100644
--- a/packages/backend/test/note.ts
+++ b/packages/backend/test/note.ts
@@ -2,8 +2,8 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, uploadFile, startServer, shutdownServer, initTestDb } from './utils';
-import { Note } from '../src/models/entities/note';
+import { async, signup, request, post, uploadFile, startServer, shutdownServer, initTestDb } from './utils.js';
+import { Note } from '../src/models/entities/note.js';
 
 describe('Note', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/prelude/maybe.ts b/packages/backend/test/prelude/maybe.ts
index 2687a739a0..0f4b00065f 100644
--- a/packages/backend/test/prelude/maybe.ts
+++ b/packages/backend/test/prelude/maybe.ts
@@ -1,5 +1,5 @@
 import * as assert from 'assert';
-import { just, nothing } from '../../src/prelude/maybe';
+import { just, nothing } from '../../src/prelude/maybe.js';
 
 describe('just', () => {
 	it('has a value', () => {
diff --git a/packages/backend/test/prelude/url.ts b/packages/backend/test/prelude/url.ts
index 1f814968a6..84e43d26c2 100644
--- a/packages/backend/test/prelude/url.ts
+++ b/packages/backend/test/prelude/url.ts
@@ -1,5 +1,5 @@
 import * as assert from 'assert';
-import { query } from '../../src/prelude/url';
+import { query } from '../../src/prelude/url.js';
 
 describe('url', () => {
 	it('query', () => {
diff --git a/packages/backend/test/reaction-lib.ts b/packages/backend/test/reaction-lib.ts
index 59c07de001..7c61dc76c2 100644
--- a/packages/backend/test/reaction-lib.ts
+++ b/packages/backend/test/reaction-lib.ts
@@ -1,7 +1,7 @@
 /*
 import * as assert from 'assert';
 
-import { toDbReaction } from '../src/misc/reaction-lib';
+import { toDbReaction } from '../src/misc/reaction-lib.js';
 
 describe('toDbReaction', async () => {
 	it('既存の文字列リアクションはそのまま', async () => {
diff --git a/packages/backend/test/streaming.ts b/packages/backend/test/streaming.ts
index e4b651aa9f..8d22b6d3d3 100644
--- a/packages/backend/test/streaming.ts
+++ b/packages/backend/test/streaming.ts
@@ -2,8 +2,8 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { connectStream, signup, request, post, startServer, shutdownServer, initTestDb } from './utils';
-import { Following } from '../src/models/entities/following';
+import { connectStream, signup, request, post, startServer, shutdownServer, initTestDb } from './utils.js';
+import { Following } from '../src/models/entities/following.js';
 
 describe('Streaming', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/thread-mute.ts b/packages/backend/test/thread-mute.ts
index 95601cd903..cd3e519394 100644
--- a/packages/backend/test/thread-mute.ts
+++ b/packages/backend/test/thread-mute.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils.js';
 
 describe('Note thread mute', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/tsconfig.json b/packages/backend/test/tsconfig.json
index 9f9e724ea2..3f9020d467 100644
--- a/packages/backend/test/tsconfig.json
+++ b/packages/backend/test/tsconfig.json
@@ -10,7 +10,7 @@
 		"declaration": false,
 		"sourceMap": true,
 		"target": "es2017",
-		"module": "commonjs",
+		"module": "es2020",
 		"moduleResolution": "node",
 		"allowSyntheticDefaultImports": true,
 		"removeComments": false,
diff --git a/packages/backend/test/user-notes.ts b/packages/backend/test/user-notes.ts
index c90c07d75f..25ffe04756 100644
--- a/packages/backend/test/user-notes.ts
+++ b/packages/backend/test/user-notes.ts
@@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test';
 
 import * as assert from 'assert';
 import * as childProcess from 'child_process';
-import { async, signup, request, post, uploadFile, startServer, shutdownServer } from './utils';
+import { async, signup, request, post, uploadFile, startServer, shutdownServer } from './utils.js';
 
 describe('users/notes', () => {
 	let p: childProcess.ChildProcess;
diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts
index b7f6cfbdac..994c098b7b 100644
--- a/packages/backend/test/utils.ts
+++ b/packages/backend/test/utils.ts
@@ -1,14 +1,14 @@
-import * as fs from 'fs';
+import * as fs from 'node:fs';
 import * as WebSocket from 'ws';
 import * as misskey from 'misskey-js';
 import fetch from 'node-fetch';
-const FormData = require('form-data');
+import FormData from 'form-data';
 import * as childProcess from 'child_process';
 import * as http from 'http';
-import loadConfig from '../src/config/load';
+import loadConfig from '../src/config/load.js';
 import { SIGKILL } from 'constants';
 import { createConnection, getConnection } from 'typeorm';
-import { entities } from '../src/db/postgre';
+import { entities } from '../src/db/postgre.js';
 
 const config = loadConfig();
 export const port = config.port;
diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json
index f3252b2860..3120851aae 100644
--- a/packages/backend/tsconfig.json
+++ b/packages/backend/tsconfig.json
@@ -10,7 +10,7 @@
 		"declaration": false,
 		"sourceMap": false,
 		"target": "es2017",
-		"module": "commonjs",
+		"module": "es2020",
 		"moduleResolution": "node",
 		"allowSyntheticDefaultImports": true,
 		"removeComments": false,
diff --git a/packages/backend/yarn.lock b/packages/backend/yarn.lock
index 70bba154ce..087e9011ca 100644
--- a/packages/backend/yarn.lock
+++ b/packages/backend/yarn.lock
@@ -128,10 +128,10 @@
   resolved "https://registry.yarnpkg.com/@koa/multer/-/multer-3.0.0.tgz#439777949f28097d7b329c0b4ce3048074c862f8"
   integrity sha512-y+OQBmex5D1jIl723gAEUYcAWPEicIXppaAKw/zCMfpllQ08ZNweDPwoCLxEoatqd5pCu2XG6V8dl67JRq3RJw==
 
-"@koa/router@9.0.1":
-  version "9.0.1"
-  resolved "https://registry.yarnpkg.com/@koa/router/-/router-9.0.1.tgz#4090a14223ea7e78aa13b632761209cba69acd95"
-  integrity sha512-OI+OU49CJV4px0WkIMmayBeqVXB/JS1ZMq7UoGlTZt6Y7ijK7kdeQ18+SEHHJPytmtI1y6Hf8XLrpxva3mhv5Q==
+"@koa/router@10.1.1":
+  version "10.1.1"
+  resolved "https://registry.yarnpkg.com/@koa/router/-/router-10.1.1.tgz#8e5a85c9b243e0bc776802c0de564561e57a5f78"
+  integrity sha512-ORNjq5z4EmQPriKbR0ER3k4Gh7YGNhWDL7JBW+8wXDrHLbWYKYSJaOJ9aN06npF5tbTxe2JBOsurpJDAvjiXKw==
   dependencies:
     debug "^4.1.1"
     http-errors "^1.7.3"
@@ -421,14 +421,6 @@
   dependencies:
     "@types/node" "*"
 
-"@types/glob@7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
-  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
-  dependencies:
-    "@types/minimatch" "*"
-    "@types/node" "*"
-
 "@types/http-assert@*":
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b"
@@ -612,11 +604,6 @@
   resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
   integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
 
-"@types/minimatch@*":
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
-  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-
 "@types/mocha@9.1.0":
   version "9.1.0"
   resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5"
@@ -1614,6 +1601,13 @@ chainsaw@~0.1.0:
   dependencies:
     traverse ">=0.3.0 <0.4"
 
+chalk-template@0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.3.1.tgz#9511cd31ec3c4911448410d49645526c1c7a3a22"
+  integrity sha512-sbWkBbb9Tfo81aTtQrfP9eBSVCTL8biVvZ0tA1rH9xqVrKoV2T9Y6Bp94wB+DRXtSGl/UXsgV83Np5hLhNRXww==
+  dependencies:
+    chalk "^4.1.2"
+
 chalk@4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
@@ -1622,13 +1616,10 @@ chalk@4.0.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
-chalk@4.1.2:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
-  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
+chalk@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832"
+  integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==
 
 chalk@^2.4.2:
   version "2.4.2"
@@ -1647,6 +1638,14 @@ chalk@^4.0.0, chalk@^4.1.0:
     ansi-styles "^4.1.0"
     supports-color "^7.1.0"
 
+chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
 char-regex@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -1783,6 +1782,13 @@ code-point-at@^1.0.0:
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
   integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
 
+color-convert@2.0.1, color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
 color-convert@^1.9.0:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -1790,13 +1796,6 @@ color-convert@^1.9.0:
   dependencies:
     color-name "1.1.3"
 
-color-convert@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
-  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
-  dependencies:
-    color-name "~1.1.4"
-
 color-name@1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
diff --git a/packages/client/package.json b/packages/client/package.json
index aac7750910..7c7bbbaf3e 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -98,7 +98,6 @@
 		"throttle-debounce": "3.0.1",
 		"tinycolor2": "1.4.2",
 		"ts-loader": "9.2.6",
-		"ts-node": "10.5.0",
 		"tsc-alias": "1.5.0",
 		"tsconfig-paths": "3.12.0",
 		"twemoji-parser": "13.1.0",
diff --git a/packages/client/yarn.lock b/packages/client/yarn.lock
index 347b84fc20..ff03cd7f74 100644
--- a/packages/client/yarn.lock
+++ b/packages/client/yarn.lock
@@ -56,18 +56,6 @@
     lodash "^4.17.19"
     to-fast-properties "^2.0.0"
 
-"@cspotcode/source-map-consumer@0.8.0":
-  version "0.8.0"
-  resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
-  integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
-
-"@cspotcode/source-map-support@0.7.0":
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5"
-  integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==
-  dependencies:
-    "@cspotcode/source-map-consumer" "0.8.0"
-
 "@cypress/request@^2.88.10":
   version "2.88.10"
   resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce"
@@ -215,26 +203,6 @@
   resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
   integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
 
-"@tsconfig/node10@^1.0.7":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606"
-  integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==
-
-"@tsconfig/node12@^1.0.7":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b"
-  integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==
-
-"@tsconfig/node14@^1.0.0":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e"
-  integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==
-
-"@tsconfig/node16@^1.0.2":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
-  integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
-
 "@types/anymatch@*":
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
@@ -1043,11 +1011,6 @@ acorn-jsx@^5.3.1:
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
   integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
 
-acorn-walk@^8.1.1:
-  version "8.1.1"
-  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc"
-  integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==
-
 acorn@^7.1.1:
   version "7.4.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
@@ -1153,11 +1116,6 @@ arch@^2.2.0:
   resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
   integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
 
-arg@^4.1.0:
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
-  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
-
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -1753,11 +1711,6 @@ cosmiconfig@^7.0.0:
     path-type "^4.0.0"
     yaml "^1.10.0"
 
-create-require@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
-  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-
 cross-env@7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
@@ -2078,11 +2031,6 @@ diff@5.0.0:
   resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
   integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
 
-diff@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
-  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
-
 dijkstrajs@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
@@ -3893,11 +3841,6 @@ magic-string@^0.25.7:
   dependencies:
     sourcemap-codec "^1.4.4"
 
-make-error@^1.1.1:
-  version "1.3.6"
-  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
-  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-
 map-stream@~0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
@@ -5649,25 +5592,6 @@ ts-loader@9.2.6:
     micromatch "^4.0.0"
     semver "^7.3.4"
 
-ts-node@10.5.0:
-  version "10.5.0"
-  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.5.0.tgz#618bef5854c1fbbedf5e31465cbb224a1d524ef9"
-  integrity sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==
-  dependencies:
-    "@cspotcode/source-map-support" "0.7.0"
-    "@tsconfig/node10" "^1.0.7"
-    "@tsconfig/node12" "^1.0.7"
-    "@tsconfig/node14" "^1.0.0"
-    "@tsconfig/node16" "^1.0.2"
-    acorn "^8.4.1"
-    acorn-walk "^8.1.1"
-    arg "^4.1.0"
-    create-require "^1.1.0"
-    diff "^4.0.1"
-    make-error "^1.1.1"
-    v8-compile-cache-lib "^3.0.0"
-    yn "3.1.1"
-
 tsc-alias@1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/tsc-alias/-/tsc-alias-1.5.0.tgz#bc26f8dccf96e4ea350adc3f64ad3d2325cad967"
@@ -5855,11 +5779,6 @@ v-debounce@0.1.2:
   resolved "https://registry.yarnpkg.com/v-debounce/-/v-debounce-0.1.2.tgz#cab75df7def2783215bf449ef85c69c2decf0a55"
   integrity sha1-yrdd997yeDIVv0Se+Fxpwt7PClU=
 
-v8-compile-cache-lib@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8"
-  integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==
-
 v8-compile-cache@^2.0.3:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
@@ -6283,11 +6202,6 @@ yauzl@^2.10.0:
     buffer-crc32 "~0.2.3"
     fd-slicer "~1.1.0"
 
-yn@3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
-  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
-
 yocto-queue@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"