diff --git a/apps/mobile/src/features/home/HomeRouteScreen.tsx b/apps/mobile/src/features/home/HomeRouteScreen.tsx
index 8061b1d1e85b..508ac8141f2a 100644
--- a/apps/mobile/src/features/home/HomeRouteScreen.tsx
+++ b/apps/mobile/src/features/home/HomeRouteScreen.tsx
@@ -85,10 +85,12 @@ export function HomeRouteScreen() {
projects,
environmentId: selectedEnvironmentId,
projectGroupingMode: listOptions.projectGroupingMode,
- }).map((scope) => ({
- key: scope.key,
- label: scope.title,
- })),
+ })
+ .map((scope) => ({
+ key: scope.key,
+ label: scope.title,
+ }))
+ .toSorted((left, right) => left.label.localeCompare(right.label)),
[listOptions.projectGroupingMode, projects, selectedEnvironmentId],
);
useEffect(() => {
diff --git a/apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx b/apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx
index 2e8186fa8e25..2b7164e64560 100644
--- a/apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx
+++ b/apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx
@@ -281,10 +281,12 @@ function ThreadNavigationSidebarPane(
);
const projectFilterOptions = useMemo(
() =>
- projectScopes.map((scope) => ({
- key: scope.key,
- label: scope.title,
- })),
+ projectScopes
+ .map((scope) => ({
+ key: scope.key,
+ label: scope.title,
+ }))
+ .toSorted((left, right) => left.label.localeCompare(right.label)),
[projectScopes],
);
const projectTitleByProjectKey = useMemo(
diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx
index a88bc9ce4bb7..9c6b6ac76791 100644
--- a/apps/web/src/components/Sidebar.tsx
+++ b/apps/web/src/components/Sidebar.tsx
@@ -1864,6 +1864,11 @@ export default function Sidebar() {
() => sortLogicalProjectsForSidebar(unsortedProjectGroups, threads, sidebarProjectSortOrder),
[sidebarProjectSortOrder, threads, unsortedProjectGroups],
);
+ const projectScopeMenuGroups = useMemo(
+ () =>
+ projectGroups.toSorted((left, right) => left.displayName.localeCompare(right.displayName)),
+ [projectGroups],
+ );
const serverConfigs = useAtomValue(environmentServerConfigsAtom);
// Threads on non-primary environments (T3 Connect, hosted) resolve their
// provider entry from their own environment's config: default instance ids
@@ -3513,7 +3518,7 @@ export default function Sidebar() {
All projects
- {projectGroups.map((project) => {
+ {projectScopeMenuGroups.map((project) => {
const scopeKey = project.projectKey;
return (