diff --git a/keyserver/src/creators/role-creator.js b/keyserver/src/creators/role-creator.js
--- a/keyserver/src/creators/role-creator.js
+++ b/keyserver/src/creators/role-creator.js
@@ -15,7 +15,7 @@
   type ThreadType,
 } from 'lib/types/thread-types-enum.js';
 import type {
-  RoleInfo,
+  LegacyRoleInfo,
   RoleModificationRequest,
   RoleModificationResult,
 } from 'lib/types/thread-types.js';
@@ -34,8 +34,8 @@
 import { updateRole } from '../updaters/thread-updaters.js';
 
 type InitialRoles = {
-  +default: RoleInfo,
-  +creator: RoleInfo,
+  +default: LegacyRoleInfo,
+  +creator: LegacyRoleInfo,
 };
 async function createInitialRolesForNewThread(
   threadID: string,
diff --git a/keyserver/src/fetchers/role-fetchers.js b/keyserver/src/fetchers/role-fetchers.js
--- a/keyserver/src/fetchers/role-fetchers.js
+++ b/keyserver/src/fetchers/role-fetchers.js
@@ -1,11 +1,11 @@
 // @flow
 
 import { specialRoles } from 'lib/permissions/special-roles.js';
-import type { RoleInfo } from 'lib/types/thread-types.js';
+import type { LegacyRoleInfo } from 'lib/types/thread-types.js';
 
 import { dbQuery, SQL } from '../database/database.js';
 
-async function fetchRoles(threadID: string): Promise<RoleInfo[]> {
+async function fetchRoles(threadID: string): Promise<LegacyRoleInfo[]> {
   const query = SQL`
     SELECT id, name, permissions, 
       special_role = ${specialRoles.DEFAULT_ROLE} AS is_default
@@ -14,7 +14,7 @@
   `;
   const [result] = await dbQuery(query);
 
-  const roles: Array<RoleInfo> = [];
+  const roles: Array<LegacyRoleInfo> = [];
   for (const row of result) {
     roles.push({
       id: row.id.toString(),
diff --git a/lib/permissions/minimally-encoded-thread-permissions-validators.js b/lib/permissions/minimally-encoded-thread-permissions-validators.js
--- a/lib/permissions/minimally-encoded-thread-permissions-validators.js
+++ b/lib/permissions/minimally-encoded-thread-permissions-validators.js
@@ -17,7 +17,7 @@
 import {
   memberInfoValidator,
   rawThreadInfoValidator,
-  roleInfoValidator,
+  legacyRoleInfoValidator,
   threadCurrentUserInfoValidator,
   threadInfoValidator,
 } from '../types/thread-types.js';
@@ -25,7 +25,7 @@
 
 const minimallyEncodedRoleInfoValidator: TInterface<MinimallyEncodedRoleInfo> =
   tShape<MinimallyEncodedRoleInfo>({
-    ...roleInfoValidator.meta.props,
+    ...legacyRoleInfoValidator.meta.props,
     minimallyEncoded: tBool(true),
     permissions: t.list(tHexEncodedRolePermission),
   });
diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js
--- a/lib/shared/thread-utils.js
+++ b/lib/shared/thread-utils.js
@@ -89,7 +89,7 @@
   type ServerThreadInfo,
   type RelativeMemberInfo,
   type ThreadCurrentUserInfo,
-  type RoleInfo,
+  type LegacyRoleInfo,
   type ServerMemberInfo,
   type ClientNewThreadRequest,
   type NewThreadResult,
@@ -1171,7 +1171,7 @@
 }
 
 function roleIsAdminRole(
-  roleInfo: ?RoleInfo | ?MinimallyEncodedRoleInfo,
+  roleInfo: ?LegacyRoleInfo | ?MinimallyEncodedRoleInfo,
 ): boolean {
   return !!(roleInfo && !roleInfo.isDefault && roleInfo.name === 'Admins');
 }
diff --git a/lib/types/minimally-encoded-thread-permissions-types.js b/lib/types/minimally-encoded-thread-permissions-types.js
--- a/lib/types/minimally-encoded-thread-permissions-types.js
+++ b/lib/types/minimally-encoded-thread-permissions-types.js
@@ -6,7 +6,7 @@
   MemberInfo,
   RawThreadInfo,
   RelativeMemberInfo,
-  RoleInfo,
+  LegacyRoleInfo,
   ThreadCurrentUserInfo,
   ThreadInfo,
 } from './thread-types.js';
@@ -18,13 +18,13 @@
 } from '../permissions/minimally-encoded-thread-permissions.js';
 
 export type MinimallyEncodedRoleInfo = $ReadOnly<{
-  ...RoleInfo,
+  ...LegacyRoleInfo,
   +minimallyEncoded: true,
   +permissions: $ReadOnlyArray<string>,
 }>;
 
 const minimallyEncodeRoleInfo = (
-  roleInfo: RoleInfo,
+  roleInfo: LegacyRoleInfo,
 ): MinimallyEncodedRoleInfo => ({
   ...roleInfo,
   minimallyEncoded: true,
@@ -33,7 +33,7 @@
 
 const decodeMinimallyEncodedRoleInfo = (
   minimallyEncodedRoleInfo: MinimallyEncodedRoleInfo,
-): RoleInfo => {
+): LegacyRoleInfo => {
   const { minimallyEncoded, ...rest } = minimallyEncodedRoleInfo;
   return {
     ...rest,
diff --git a/lib/types/thread-types.js b/lib/types/thread-types.js
--- a/lib/types/thread-types.js
+++ b/lib/types/thread-types.js
@@ -59,18 +59,19 @@
   isViewer: t.Boolean,
 });
 
-export type RoleInfo = {
+export type LegacyRoleInfo = {
   +id: string,
   +name: string,
   +permissions: ThreadRolePermissionsBlob,
   +isDefault: boolean,
 };
-export const roleInfoValidator: TInterface<RoleInfo> = tShape<RoleInfo>({
-  id: tID,
-  name: t.String,
-  permissions: threadRolePermissionsBlobValidator,
-  isDefault: t.Boolean,
-});
+export const legacyRoleInfoValidator: TInterface<LegacyRoleInfo> =
+  tShape<LegacyRoleInfo>({
+    id: tID,
+    name: t.String,
+    permissions: threadRolePermissionsBlobValidator,
+    isDefault: t.Boolean,
+  });
 
 export type ThreadCurrentUserInfo = {
   +role: ?string,
@@ -98,7 +99,7 @@
   +containingThreadID: ?string,
   +community: ?string,
   +members: $ReadOnlyArray<MemberInfo>,
-  +roles: { +[id: string]: RoleInfo },
+  +roles: { +[id: string]: LegacyRoleInfo },
   +currentUser: ThreadCurrentUserInfo,
   +sourceMessageID?: string,
   +repliesCount: number,
@@ -120,7 +121,7 @@
     containingThreadID: t.maybe(tID),
     community: t.maybe(tID),
     members: t.list(memberInfoValidator),
-    roles: t.dict(tID, roleInfoValidator),
+    roles: t.dict(tID, legacyRoleInfoValidator),
     currentUser: threadCurrentUserInfoValidator,
     sourceMessageID: t.maybe(tID),
     repliesCount: t.Number,
@@ -140,7 +141,7 @@
   +containingThreadID: ?string,
   +community: ?string,
   +members: $ReadOnlyArray<RelativeMemberInfo>,
-  +roles: { +[id: string]: RoleInfo },
+  +roles: { +[id: string]: LegacyRoleInfo },
   +currentUser: ThreadCurrentUserInfo,
   +sourceMessageID?: string,
   +repliesCount: number,
@@ -159,7 +160,7 @@
   containingThreadID: t.maybe(tID),
   community: t.maybe(tID),
   members: t.list(relativeMemberInfoValidator),
-  roles: t.dict(tID, roleInfoValidator),
+  roles: t.dict(tID, legacyRoleInfoValidator),
   currentUser: threadCurrentUserInfoValidator,
   sourceMessageID: t.maybe(tID),
   repliesCount: t.Number,
@@ -179,7 +180,7 @@
   +containingThreadID: ?string,
   +community: ?string,
   +members: $ReadOnlyArray<RelativeMemberInfo>,
-  +roles: { +[id: string]: RoleInfo },
+  +roles: { +[id: string]: LegacyRoleInfo },
   +currentUser: ThreadCurrentUserInfo,
   +sourceMessageID?: string,
   +repliesCount: number,
@@ -208,7 +209,7 @@
   +community: ?string,
   +depth: number,
   +members: $ReadOnlyArray<ServerMemberInfo>,
-  +roles: { +[id: string]: RoleInfo },
+  +roles: { +[id: string]: LegacyRoleInfo },
   +sourceMessageID?: string,
   +repliesCount: number,
   +pinnedCount: number,
diff --git a/lib/utils/role-utils.js b/lib/utils/role-utils.js
--- a/lib/utils/role-utils.js
+++ b/lib/utils/role-utils.js
@@ -17,7 +17,7 @@
 import type {
   ThreadInfo,
   RelativeMemberInfo,
-  RoleInfo,
+  LegacyRoleInfo,
 } from '../types/thread-types';
 import { threadTypes } from '../types/thread-types-enum.js';
 
@@ -65,7 +65,7 @@
   memberInfos: $ReadOnlyArray<
     RelativeMemberInfo | MinimallyEncodedRelativeMemberInfo,
   >,
-): $ReadOnlyMap<string, ?RoleInfo | ?MinimallyEncodedRoleInfo> {
+): $ReadOnlyMap<string, ?LegacyRoleInfo | ?MinimallyEncodedRoleInfo> {
   // Our in-code system has chat-specific roles, while the
   // user-surfaced system has roles only for communities. We retrieve roles
   // from the top-level community thread for accuracy, with a rare fallback
@@ -80,7 +80,10 @@
     community ? threadInfoSelector(state)[community] : null,
   );
   const topMostThreadInfo = communityThreadInfo || threadInfo;
-  const roleMap = new Map<string, ?RoleInfo | ?MinimallyEncodedRoleInfo>();
+  const roleMap = new Map<
+    string,
+    ?LegacyRoleInfo | ?MinimallyEncodedRoleInfo,
+  >();
 
   if (topMostThreadInfo.type === threadTypes.GENESIS) {
     memberInfos.forEach(memberInfo =>
diff --git a/native/redux/edit-thread-permission-migration.js b/native/redux/edit-thread-permission-migration.js
--- a/native/redux/edit-thread-permission-migration.js
+++ b/native/redux/edit-thread-permission-migration.js
@@ -5,7 +5,7 @@
   MemberInfo,
   ThreadCurrentUserInfo,
   RawThreadInfo,
-  RoleInfo,
+  LegacyRoleInfo,
   RawThreadInfos,
 } from 'lib/types/thread-types.js';
 
@@ -36,9 +36,9 @@
 }
 
 function addDetailedThreadEditPermissionsToRole(
-  role: RoleInfo,
+  role: LegacyRoleInfo,
   threadType: number,
-): RoleInfo {
+): LegacyRoleInfo {
   let updatedPermissions = null;
   if (role.permissions['edit_thread']) {
     updatedPermissions = {
@@ -74,7 +74,7 @@
       threadID,
     );
 
-    const updatedRoles: { [string]: RoleInfo } = {};
+    const updatedRoles: { [string]: LegacyRoleInfo } = {};
     for (const roleID in threadInfo.roles) {
       updatedRoles[roleID] = addDetailedThreadEditPermissionsToRole(
         threadInfo.roles[roleID],
diff --git a/native/redux/manage-pins-permission-migration.js b/native/redux/manage-pins-permission-migration.js
--- a/native/redux/manage-pins-permission-migration.js
+++ b/native/redux/manage-pins-permission-migration.js
@@ -4,7 +4,7 @@
   RawThreadInfo,
   MemberInfo,
   ThreadCurrentUserInfo,
-  RoleInfo,
+  LegacyRoleInfo,
   RawThreadInfos,
 } from 'lib/types/thread-types.js';
 
@@ -37,7 +37,9 @@
     : member;
 }
 
-function addManagePinsThreadPermissionToRole(role: RoleInfo): RoleInfo {
+function addManagePinsThreadPermissionToRole(
+  role: LegacyRoleInfo,
+): LegacyRoleInfo {
   const isAdminRole = role.name === adminRoleName;
   let updatedPermissions;
 
@@ -70,7 +72,7 @@
       threadID,
     );
 
-    const updatedRoles: { [string]: RoleInfo } = {};
+    const updatedRoles: { [string]: LegacyRoleInfo } = {};
     for (const roleID in threadInfo.roles) {
       updatedRoles[roleID] = addManagePinsThreadPermissionToRole(
         threadInfo.roles[roleID],
diff --git a/native/redux/remove-select-role-permissions.js b/native/redux/remove-select-role-permissions.js
--- a/native/redux/remove-select-role-permissions.js
+++ b/native/redux/remove-select-role-permissions.js
@@ -3,7 +3,7 @@
 import type {
   RawThreadInfos,
   RawThreadInfo,
-  RoleInfo,
+  LegacyRoleInfo,
 } from 'lib/types/thread-types.js';
 import { permissionsToRemoveInMigration } from 'lib/utils/migration-utils.js';
 
@@ -22,7 +22,7 @@
     const threadInfo = rawThreadInfos[threadID];
     const { roles } = threadInfo;
 
-    const updatedRoles: { [string]: RoleInfo } = {};
+    const updatedRoles: { [string]: LegacyRoleInfo } = {};
     for (const roleID in roles) {
       const role = roles[roleID];
       const { permissions: rolePermissions } = role;