Documents
README
README
Type
External
Status
Published
Created
Mar 17, 2026
Updated
Mar 17, 2026

v0.11 Migration: ContentPart to MessagePart#

This migration automatically updates your codebase to use the new MessagePart naming convention instead of the deprecated ContentPart naming.

What this migration does#

1. Renames all ContentPart types to MessagePart types#

Before:

import {
  TextContentPart,
  ToolCallContentPart,
  ContentPartStatus,
  ThreadUserContentPart,
  ThreadAssistantContentPart
} from "@assistant-ui/react";

function processContent(part: TextContentPart): void {
  console.log(part.text);
}

const MyTool: ToolCallContentPartComponent = ({ toolName }) => {
  return <div>{toolName}</div>;
};

After:

import {
  TextMessagePart,
  ToolCallMessagePart,
  MessagePartStatus,
  ThreadUserMessagePart,
  ThreadAssistantMessagePart
} from "@assistant-ui/react";

function processContent(part: TextMessagePart): void {
  console.log(part.text);
}

const MyTool: ToolCallMessagePartComponent = ({ toolName }) => {
  return <div>{toolName}</div>;
};

2. Updates MessagePrimitive.Content to MessagePrimitive.Parts#

Before:

import { MessagePrimitive } from "@assistant-ui/react";

function MyComponent() {
  return <MessagePrimitive.Content components={{ Text: MyText }} />;
}

After:

import { MessagePrimitive } from "@assistant-ui/react";

function MyComponent() {
  return <MessagePrimitive.Parts components={{ Text: MyText }} />;
}

3. Renames ContentPart hooks to MessagePart hooks#

Before:

import {
  useContentPart,
  useContentPartText,
  useContentPartRuntime,
} from "@assistant-ui/react";

function MyComponent() {
  const part = useContentPart();
  const text = useContentPartText();
  const runtime = useContentPartRuntime();
  return null;
}

After:

import {
  useMessagePart,
  useMessagePartText,
  useMessagePartRuntime,
} from "@assistant-ui/react";

function MyComponent() {
  const part = useMessagePart();
  const text = useMessagePartText();
  const runtime = useMessagePartRuntime();
  return null;
}

4. Updates ContentPartPrimitive to MessagePartPrimitive#

Before:

import { ContentPartPrimitive } from "@assistant-ui/react";

function MyComponent() {
  return (
    <div>
      <ContentPartPrimitive.Text />
      <ContentPartPrimitive.Image />
    </div>
  );
}

After:

import { MessagePartPrimitive } from "@assistant-ui/react";

function MyComponent() {
  return (
    <div>
      <MessagePartPrimitive.Text />
      <MessagePartPrimitive.Image />
    </div>
  );
}

5. Renames provider components#

Before:

import { TextContentPartProvider } from "@assistant-ui/react";

function MyComponent() {
  return (
    <TextContentPartProvider text="Hello" isRunning={false}>
      <div>Content</div>
    </TextContentPartProvider>
  );
}

After:

import { TextMessagePartProvider } from "@assistant-ui/react";

function MyComponent() {
  return (
    <TextMessagePartProvider text="Hello" isRunning={false}>
      <div>Content</div>
    </TextMessagePartProvider>
  );
}

Complete type mapping#

Old NameNew Name
TextContentPartTextMessagePart
ReasoningContentPartReasoningMessagePart
SourceContentPartSourceMessagePart
ImageContentPartImageMessagePart
FileContentPartFileMessagePart
Unstable_AudioContentPartUnstable_AudioMessagePart
ToolCallContentPartToolCallMessagePart
ContentPartStatusMessagePartStatus
ToolCallContentPartStatusToolCallMessagePartStatus
ThreadUserContentPartThreadUserMessagePart
ThreadAssistantContentPartThreadAssistantMessagePart
ContentPartRuntimeMessagePartRuntime
ContentPartStateMessagePartState
useContentPartuseMessagePart
useContentPartRuntimeuseMessagePartRuntime
useContentPartTextuseMessagePartText
useContentPartReasoninguseMessagePartReasoning
useContentPartSourceuseMessagePartSource
useContentPartFileuseMessagePartFile
useContentPartImageuseMessagePartImage
ContentPartPrimitiveMessagePartPrimitive
TextContentPartProviderTextMessagePartProvider
MessagePrimitive.ContentMessagePrimitive.Parts

How to run this migration#

As part of the full upgrade#

npx @assistant-ui/cli upgrade

Run this specific migration only#

npx @assistant-ui/cli codemod v0-11/content-part-to-message-part <path>

Where <path> is the path to your source code directory (e.g., src/ or .).

Options#

  • --dry - Preview changes without applying them
  • --print - Print the transformed code to stdout
  • --verbose - Show detailed transformation logs

Example usage#

# Preview changes without applying them
npx @assistant-ui/cli codemod v0-11/content-part-to-message-part src/ --dry

# Apply the transformation to your src directory
npx @assistant-ui/cli codemod v0-11/content-part-to-message-part src/

# Apply to entire project
npx @assistant-ui/cli codemod v0-11/content-part-to-message-part .

What files are affected?#

This migration will process all .js, .jsx, .ts, and .tsx files that contain imports from @assistant-ui/* packages. It safely ignores:

  • Files in node_modules/
  • Built files in dist/, build/ directories
  • Minified files (*.min.js, *.bundle.js)
  • Files that don't import from assistant-ui packages

Notes#

  • This migration preserves all functionality - it's purely a naming change
  • The old ContentPart APIs are now deprecated and will be removed in a future version
  • The migration is safe to run multiple times
  • If you have custom code that extends these types, you may need to update your type definitions manually after running the migration