Text replacement

Replace selected text elements with custom content.

Running this example

To run this example locally:

  1. If you haven't already, create a new app in the Developer Portal(opens in a new tab or window). For more information, refer to our Quickstart guide.

  2. In your app's configuration on the Developer Portal(opens in a new tab or window), ensure the "Development URL" is set to http://localhost:8080.

  3. Clone the starter kit:

    git clone https://github.com/canva-sdks/canva-apps-sdk-starter-kit.git
    cd canva-apps-sdk-starter-kit
    SHELL
  4. Install dependencies:

    npm install
    SHELL
  5. Run the example:

    npm run start text_replacement
    SHELL
  6. Click the Preview URL link shown in the terminal to open the example in the Canva editor.

Example app source code

// For usage information, see the README.md file.
import { Button, Rows, Text } from "@canva/app-ui-kit";
import { useSelection } from "utils/use_selection_hook";
import * as styles from "styles/components.css";
export const App = () => {
const selection = useSelection("plaintext");
const updateText = async () => {
const draft = await selection.read();
draft.contents.forEach((s) => (s.text = `${s.text}!`));
await draft.save();
};
return (
<div className={styles.scrollContainer}>
<Rows spacing="2u">
<Text>
This example demonstrates how apps can replace the selected text.
Select a text in the editor to begin.
</Text>
<Button
variant="primary"
onClick={updateText}
disabled={selection.count === 0}
>
Append '!'
</Button>
</Rows>
</div>
);
};
TYPESCRIPT
import { createRoot } from "react-dom/client";
import { App } from "./app";
import "@canva/app-ui-kit/styles.css";
import { AppUiProvider } from "@canva/app-ui-kit";
const root = createRoot(document.getElementById("root") as Element);
function render() {
root.render(
<AppUiProvider>
<App />
</AppUiProvider>,
);
}
render();
if (module.hot) {
module.hot.accept("./app", render);
}
TYPESCRIPT
# Text replacement
Demonstrates how to replace selected plain text elements in a design with new text content. Shows simple text selection detection and text substitution patterns.
For API reference docs and instructions on running this example, see: https://www.canva.dev/docs/apps/examples/text-replacement/.
Related examples: See content_replacement/richtext_replacement for formatted text replacement, or content_replacement/text_translation for advanced text transformation.
NOTE: This example differs from what is expected for public apps to pass a Canva review:
- Text content is hardcoded for demonstration purposes only. Production apps should provide user input interfaces or dynamic content loading
- Text handling is simplified for demonstration. Production apps should handle various text formats and include undo functionality for better user experience
- Error handling is simplified for demonstration. Production apps must implement comprehensive error handling with clear user feedback and graceful failure modes
- Internationalization is not implemented. Production apps must support multiple languages using the `@canva/app-i18n-kit` package to pass Canva review requirements
MARKDOWN

API Reference

Need Help?