diff --git a/web/calendar/filter-panel.react.js b/web/calendar/filter-panel.react.js
--- a/web/calendar/filter-panel.react.js
+++ b/web/calendar/filter-panel.react.js
@@ -27,7 +27,7 @@
 import type { Dispatch } from 'lib/types/redux-types';
 
 import { useModalContext } from '../modals/modal-provider.react';
-import ThreadSettingsModal from '../modals/threads/thread-settings-modal.react';
+import ThreadSettingsModal from '../modals/threads/settings/thread-settings-modal.react';
 import { useSelector } from '../redux/redux-utils';
 import {
   webFilterThreadInfos,
diff --git a/web/chat/thread-menu.react.js b/web/chat/thread-menu.react.js
--- a/web/chat/thread-menu.react.js
+++ b/web/chat/thread-menu.react.js
@@ -31,8 +31,8 @@
 import ConfirmLeaveThreadModal from '../modals/threads/confirm-leave-thread-modal.react';
 import ThreadMembersModal from '../modals/threads/members/members-modal.react';
 import ThreadNotificationsModal from '../modals/threads/notifications/notifications-modal.react';
+import ThreadSettingsModal from '../modals/threads/settings/thread-settings-modal.react';
 import SubchannelsModal from '../modals/threads/subchannels/subchannels-modal.react';
-import ThreadSettingsModal from '../modals/threads/thread-settings-modal.react';
 import { useSelector } from '../redux/redux-utils';
 import SWMansionIcon from '../SWMansionIcon.react';
 import css from './thread-menu.css';
diff --git a/web/modals/threads/thread-settings-delete-tab.css b/web/modals/threads/settings/thread-settings-delete-tab.css
rename from web/modals/threads/thread-settings-delete-tab.css
rename to web/modals/threads/settings/thread-settings-delete-tab.css
diff --git a/web/modals/threads/thread-settings-delete-tab.react.js b/web/modals/threads/settings/thread-settings-delete-tab.react.js
rename from web/modals/threads/thread-settings-delete-tab.react.js
rename to web/modals/threads/settings/thread-settings-delete-tab.react.js
--- a/web/modals/threads/thread-settings-delete-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-delete-tab.react.js
@@ -6,17 +6,17 @@
   deleteThreadActionTypes,
   deleteThread,
 } from 'lib/actions/thread-actions';
-import { type SetState } from 'lib/types/hook-types.js';
+import { type SetState } from 'lib/types/hook-types';
 import { type ThreadInfo } from 'lib/types/thread-types';
 import {
   useDispatchActionPromise,
   useServerCall,
 } from 'lib/utils/action-utils';
 
-import Button from '../../components/button.react.js';
-import SWMansionIcon from '../../SWMansionIcon.react';
-import Input from '../input.react.js';
-import { useModalContext } from '../modal-provider.react.js';
+import Button from '../../../components/button.react';
+import SWMansionIcon from '../../../SWMansionIcon.react';
+import Input from '../../input.react';
+import { useModalContext } from '../../modal-provider.react';
 import css from './thread-settings-delete-tab.css';
 
 type ThreadSettingsDeleteTabProps = {
diff --git a/web/modals/threads/thread-settings-general-tab.css b/web/modals/threads/settings/thread-settings-general-tab.css
rename from web/modals/threads/thread-settings-general-tab.css
rename to web/modals/threads/settings/thread-settings-general-tab.css
diff --git a/web/modals/threads/thread-settings-general-tab.react.js b/web/modals/threads/settings/thread-settings-general-tab.react.js
rename from web/modals/threads/thread-settings-general-tab.react.js
rename to web/modals/threads/settings/thread-settings-general-tab.react.js
--- a/web/modals/threads/thread-settings-general-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-general-tab.react.js
@@ -6,7 +6,7 @@
   changeThreadSettingsActionTypes,
   changeThreadSettings,
 } from 'lib/actions/thread-actions';
-import { type SetState } from 'lib/types/hook-types.js';
+import { type SetState } from 'lib/types/hook-types';
 import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types';
 import {
   useDispatchActionPromise,
@@ -14,10 +14,10 @@
 } from 'lib/utils/action-utils';
 import { firstLine } from 'lib/utils/string-utils';
 
-import Button from '../../components/button.react';
-import Input from '../input.react.js';
-import { useModalContext } from '../modal-provider.react.js';
-import ColorSelector from './color-selector.react.js';
+import Button from '../../../components/button.react';
+import Input from '../../input.react';
+import { useModalContext } from '../../modal-provider.react';
+import ColorSelector from '../color-selector.react';
 import css from './thread-settings-general-tab.css';
 
 type ThreadSettingsGeneralTabProps = {
diff --git a/web/modals/threads/thread-settings-modal.css b/web/modals/threads/settings/thread-settings-modal.css
rename from web/modals/threads/thread-settings-modal.css
rename to web/modals/threads/settings/thread-settings-modal.css
diff --git a/web/modals/threads/thread-settings-modal.react.js b/web/modals/threads/settings/thread-settings-modal.react.js
rename from web/modals/threads/thread-settings-modal.react.js
rename to web/modals/threads/settings/thread-settings-modal.react.js
--- a/web/modals/threads/thread-settings-modal.react.js
+++ b/web/modals/threads/settings/thread-settings-modal.react.js
@@ -17,10 +17,10 @@
   type ThreadChanges,
 } from 'lib/types/thread-types';
 
-import Tabs from '../../components/tabs.react';
-import { useModalContext } from '../../modals/modal-provider.react';
-import { useSelector } from '../../redux/redux-utils';
-import Modal from '../modal.react';
+import Tabs from '../../../components/tabs.react';
+import { useSelector } from '../../../redux/redux-utils';
+import { useModalContext } from '../../modal-provider.react';
+import Modal from '../../modal.react';
 import ThreadSettingsDeleteTab from './thread-settings-delete-tab.react';
 import ThreadSettingsGeneralTab from './thread-settings-general-tab.react';
 import css from './thread-settings-modal.css';
diff --git a/web/modals/threads/thread-settings-privacy-tab.css b/web/modals/threads/settings/thread-settings-privacy-tab.css
rename from web/modals/threads/thread-settings-privacy-tab.css
rename to web/modals/threads/settings/thread-settings-privacy-tab.css
diff --git a/web/modals/threads/thread-settings-privacy-tab.react.js b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
rename from web/modals/threads/thread-settings-privacy-tab.react.js
rename to web/modals/threads/settings/thread-settings-privacy-tab.react.js
--- a/web/modals/threads/thread-settings-privacy-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
@@ -5,7 +5,7 @@
 import {
   changeThreadSettings,
   changeThreadSettingsActionTypes,
-} from 'lib/actions/thread-actions.js';
+} from 'lib/actions/thread-actions';
 import { threadTypeDescriptions } from 'lib/shared/thread-utils';
 import { type SetState } from 'lib/types/hook-types';
 import {
@@ -17,10 +17,10 @@
 import {
   useDispatchActionPromise,
   useServerCall,
-} from 'lib/utils/action-utils.js';
+} from 'lib/utils/action-utils';
 
-import Button from '../../components/button.react.js';
-import { useModalContext } from '../modal-provider.react.js';
+import Button from '../../../components/button.react';
+import { useModalContext } from '../../modal-provider.react';
 import css from './thread-settings-privacy-tab.css';
 
 const { COMMUNITY_OPEN_SUBTHREAD, COMMUNITY_SECRET_SUBTHREAD } = threadTypes;