diff --git a/packages/backend/migration/1636697408073-remove-via-mobile.js b/packages/backend/migration/1636697408073-remove-via-mobile.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb5157cf1dd98f18bed78c3159ae092036758542
--- /dev/null
+++ b/packages/backend/migration/1636697408073-remove-via-mobile.js
@@ -0,0 +1,13 @@
+const { MigrationInterface, QueryRunner } = require("typeorm");
+
+module.exports = class removeViaMobile1636697408073 {
+    name = 'removeViaMobile1636697408073'
+
+    async up(queryRunner) {
+        await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "viaMobile"`);
+    }
+
+    async down(queryRunner) {
+        await queryRunner.query(`ALTER TABLE "note" ADD "viaMobile" boolean NOT NULL DEFAULT false`);
+    }
+}
diff --git a/packages/backend/src/models/entities/note.ts b/packages/backend/src/models/entities/note.ts
index 4a5411f93dfcce519bb0234ad83492f6c8a0baa2..9dee25ea2ae752283268735807d9a587da8b2ddd 100644
--- a/packages/backend/src/models/entities/note.ts
+++ b/packages/backend/src/models/entities/note.ts
@@ -81,11 +81,6 @@ export class Note {
 	@JoinColumn()
 	public user: User | null;
 
-	@Column('boolean', {
-		default: false
-	})
-	public viaMobile: boolean;
-
 	@Column('boolean', {
 		default: false
 	})
diff --git a/packages/backend/src/models/repositories/note.ts b/packages/backend/src/models/repositories/note.ts
index 0f00c34c9cdbb0139d222b58e759aa5e80b9f3db..c076cb31e8c92c6db075d7c5426b7362e80995d7 100644
--- a/packages/backend/src/models/repositories/note.ts
+++ b/packages/backend/src/models/repositories/note.ts
@@ -230,7 +230,6 @@ export class NoteRepository extends Repository<Note> {
 			visibility: note.visibility,
 			localOnly: note.localOnly || undefined,
 			visibleUserIds: note.visibility === 'specified' ? note.visibleUserIds : undefined,
-			viaMobile: note.viaMobile || undefined,
 			renoteCount: note.renoteCount,
 			repliesCount: note.repliesCount,
 			reactions: convertLegacyReactions(note.reactions),
@@ -377,10 +376,6 @@ export const packedNoteSchema = {
 			optional: true as const, nullable: true as const,
 			ref: 'Note' as const,
 		},
-		viaMobile: {
-			type: 'boolean' as const,
-			optional: true as const, nullable: false as const,
-		},
 		isHidden: {
 			type: 'boolean' as const,
 			optional: true as const, nullable: false as const,
diff --git a/packages/backend/src/queue/processors/db/export-notes.ts b/packages/backend/src/queue/processors/db/export-notes.ts
index bd178556dfaf0f5b6d7ab72fd0b80c4d892bed29..761f4d827b98a93d5938af469603eb9eeb6a3117 100644
--- a/packages/backend/src/queue/processors/db/export-notes.ts
+++ b/packages/backend/src/queue/processors/db/export-notes.ts
@@ -125,7 +125,6 @@ function serialize(note: Note, poll: Poll | null = null): Record<string, unknown
 		renoteId: note.renoteId,
 		poll: poll,
 		cw: note.cw,
-		viaMobile: note.viaMobile,
 		visibility: note.visibility,
 		visibleUserIds: note.visibleUserIds,
 		localOnly: note.localOnly,
diff --git a/packages/backend/src/remote/activitypub/models/note.ts b/packages/backend/src/remote/activitypub/models/note.ts
index 492dc05248d0bc9dc3ab030ea2fa7be6f615caec..39efadc65b37dfa13602ba323f9b64d1f809653b 100644
--- a/packages/backend/src/remote/activitypub/models/note.ts
+++ b/packages/backend/src/remote/activitypub/models/note.ts
@@ -250,7 +250,6 @@ export async function createNote(value: string | IObject, resolver?: Resolver, s
 		name: note.name,
 		cw,
 		text,
-		viaMobile: false,
 		localOnly: false,
 		visibility,
 		visibleUsers,
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index 751673f95535e1c39cea995bada9ccf5efa4049e..8257ea1d0f3868b9a8f81d28462cf018fafa3258 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -57,11 +57,6 @@ export const meta = {
 			validator: $.optional.nullable.str.pipe(Notes.validateCw),
 		},
 
-		viaMobile: {
-			validator: $.optional.bool,
-			default: false,
-		},
-
 		localOnly: {
 			validator: $.optional.bool,
 			default: false,
@@ -283,7 +278,6 @@ export default define(meta, async (ps, user) => {
 		reply,
 		renote,
 		cw: ps.cw,
-		viaMobile: ps.viaMobile,
 		localOnly: ps.localOnly,
 		visibility: ps.visibility,
 		visibleUsers,
diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts
index 69d854ab1a45e033a8524fe0392758c1feea88d9..8f6c2fe3a5f25217f33257f908a6cd851523b452 100644
--- a/packages/backend/src/services/note/create.ts
+++ b/packages/backend/src/services/note/create.ts
@@ -98,7 +98,6 @@ type Option = {
 	renote?: Note | null;
 	files?: DriveFile[] | null;
 	poll?: IPoll | null;
-	viaMobile?: boolean | null;
 	localOnly?: boolean | null;
 	cw?: string | null;
 	visibility?: string;
@@ -131,7 +130,6 @@ export default async (user: { id: User['id']; username: User['username']; host:
 
 	if (data.createdAt == null) data.createdAt = new Date();
 	if (data.visibility == null) data.visibility = 'public';
-	if (data.viaMobile == null) data.viaMobile = false;
 	if (data.localOnly == null) data.localOnly = false;
 	if (data.channel != null) data.visibility = 'public';
 	if (data.channel != null) data.visibleUsers = [];
@@ -478,7 +476,6 @@ async function insertNote(user: { id: User['id']; host: User['host']; }, data: O
 		tags: tags.map(tag => normalizeForSearch(tag)),
 		emojis,
 		userId: user.id,
-		viaMobile: data.viaMobile!,
 		localOnly: data.localOnly!,
 		visibility: data.visibility as any,
 		visibleUserIds: data.visibility == 'specified'
diff --git a/packages/client/src/components/note-detailed.vue b/packages/client/src/components/note-detailed.vue
index 8b6905a0e4c8e785ac3b30f29cc3c8a531e77805..75501535211b3a766beae36b3d9fa8dcf04d650e 100644
--- a/packages/client/src/components/note-detailed.vue
+++ b/packages/client/src/components/note-detailed.vue
@@ -86,7 +86,6 @@
 			</div>
 			<footer class="footer">
 				<div class="info">
-					<span class="mobile" v-if="appearNote.viaMobile"><i class="fas fa-mobile-alt"></i></span>
 					<MkTime class="created-at" :time="appearNote.createdAt" mode="detail"/>
 				</div>
 				<XReactionsViewer :note="appearNote" ref="reactionsViewer"/>
diff --git a/packages/client/src/components/note-header.vue b/packages/client/src/components/note-header.vue
index c61ec41dd1b48731c3ed30c75faecc54505f3ff6..c228869039f619efb1411fabf9dbd34d7dcf9158 100644
--- a/packages/client/src/components/note-header.vue
+++ b/packages/client/src/components/note-header.vue
@@ -8,7 +8,6 @@
 	<div class="admin" v-if="note.user.isAdmin"><i class="fas fa-bookmark"></i></div>
 	<div class="moderator" v-if="!note.user.isAdmin && note.user.isModerator"><i class="far fa-bookmark"></i></div>
 	<div class="info">
-		<span class="mobile" v-if="note.viaMobile"><i class="fas fa-mobile-alt"></i></span>
 		<MkA class="created-at" :to="notePage(note)">
 			<MkTime :time="note.createdAt"/>
 		</MkA>
@@ -99,10 +98,6 @@ export default defineComponent({
 		margin-left: auto;
 		font-size: 0.9em;
 
-		> .mobile {
-			margin-right: 8px;
-		}
-
 		> .visibility {
 			margin-left: 8px;
 		}
diff --git a/packages/client/src/components/post-form.vue b/packages/client/src/components/post-form.vue
index ce6b7db3ee93efe5afdf7ff30a64cca8c4092105..6d3cae39b1e1997e0dab493bc02549481e131744 100644
--- a/packages/client/src/components/post-form.vue
+++ b/packages/client/src/components/post-form.vue
@@ -76,7 +76,6 @@ import { noteVisibilities } from 'misskey-js';
 import * as os from '@/os';
 import { selectFile } from '@/scripts/select-file';
 import { defaultStore, notePostInterruptors, postFormActions } from '@/store';
-import { isMobile } from '@/scripts/is-mobile';
 import { throttle } from 'throttle-debounce';
 import MkInfo from '@/components/ui/info.vue';
 import { defaultStore } from '@/store';
@@ -648,7 +647,6 @@ export default defineComponent({
 				localOnly: this.localOnly,
 				visibility: this.visibility,
 				visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined,
-				viaMobile: isMobile
 			};
 
 			if (this.withHashtags && this.hashtags && this.hashtags.trim() !== '') {
diff --git a/packages/client/src/ui/chat/note-header.vue b/packages/client/src/ui/chat/note-header.vue
index 8ab03501b2196e5a8185682e5e00d6531ec1ca23..f0c9adee35f2a7f262e8a40c0ff6719f09015f76 100644
--- a/packages/client/src/ui/chat/note-header.vue
+++ b/packages/client/src/ui/chat/note-header.vue
@@ -8,7 +8,6 @@
 	<span class="admin" v-if="note.user.isAdmin"><i class="fas fa-bookmark"></i></span>
 	<span class="moderator" v-if="!note.user.isAdmin && note.user.isModerator"><i class="far fa-bookmark"></i></span>
 	<div class="info">
-		<span class="mobile" v-if="note.viaMobile"><i class="fas fa-mobile-alt"></i></span>
 		<MkA class="created-at" :to="notePage(note)">
 			<MkTime :time="note.createdAt"/>
 		</MkA>
@@ -96,10 +95,6 @@ export default defineComponent({
 		font-size: 0.9em;
 		opacity: 0.7;
 
-		> .mobile {
-			margin-right: 8px;
-		}
-
 		> .visibility {
 			margin-left: 8px;
 		}
diff --git a/packages/client/src/ui/chat/post-form.vue b/packages/client/src/ui/chat/post-form.vue
index 44461c4a581bb70523e222b736d7c0feb9c400af..9debee2603aac558a434b010beae7006dccb7cc2 100644
--- a/packages/client/src/ui/chat/post-form.vue
+++ b/packages/client/src/ui/chat/post-form.vue
@@ -61,7 +61,6 @@ import { Autocomplete } from '@/scripts/autocomplete';
 import * as os from '@/os';
 import { selectFile } from '@/scripts/select-file';
 import { notePostInterruptors, postFormActions } from '@/store';
-import { isMobile } from '@/scripts/is-mobile';
 import { throttle } from 'throttle-debounce';
 
 export default defineComponent({
@@ -544,7 +543,6 @@ export default defineComponent({
 				localOnly: this.localOnly,
 				visibility: this.visibility,
 				visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined,
-				viaMobile: isMobile
 			};
 
 			// plugin