@canva/intents

中文文档
2.8.0发布于 2026/10/29SEE LICENSE IN LICENSE.md FILETypeScriptESM + CJS零依赖近 30 天下载 7.7万

The Canva Developers SDK Intents library for apps inside Canva

原始使用文档
文档目录11 节
  1. Table of contents
  2. Introduction
  3. Installation
  4. Usage
  5. Preparing an intent
  6. Data Connector example
  7. Design Editor example
  8. Content Publisher example
  9. Related packages
  10. Contributing
  11. License

@canva/intents

A Canva Developers SDK package for building apps inside Canva. Provides types and utilities for working with App Intents.

Table of contents

Introduction

@canva/intents is an npm package for building apps inside Canva with the Canva Developers SDK. It provides intent-specific types and helpers that allow apps to integrate with specific surfaces within the Canva editor — such as the data connector panel or the design editor.

An "intent" represents a specific user workflow an app can support. For example:

  • Users can select and import data from an app which implements the Data Connector intent.
  • An app is able to present interactive and creative tooling alongside the Canva design surface by implementing the Design Editor intent.
  • Users can publish their Canva designs directly to external platforms.

The @canva/intents package encompasses all available intents, exporting each intent's type information and prepare function, grouped by domain. This allows your app to prepare one or more intents while keeping each intent's implementation modular and type-safe.

Currently supported intents:

New intents will be added to this package in the future.

Note: To get up and running with the Canva Developers SDK, check out the quick start guide.

Installation

npm install @canva/intents

Usage

Preparing an intent

Each intent type has a corresponding prepare function in the @canva/intents package. You can implement any intent in your app code by calling the appropriate prepare function with the particular parameters it requires.

Data Connector example

Here’s a full example of preparing a data_connector intent, which allows users to import tabular data from an app:

import { createRoot } from 'react-dom/client';
import { AppUiProvider } from '@canva/app-ui-kit';
import { prepareDataConnector } from '@canva/intents/data';
import { DataSelectionUI } from './data_selection_ui';
import { fetchData } from './fetch_data';

prepareDataConnector({
  getDataTable: async (request) => {
    try {
      const dataTable = await fetchData(request); // your data fetching logic here
      return {
        status: 'completed',
        dataTable,
      };
    } catch {
      return {
        status: 'app_error',
        message: 'Failed to fetch data',
      };
    }
  },

  renderSelectionUi: (request) => {
    const root = createRoot(document.getElementById('root') as Element);
    root.render(
      <AppUiProvider>
        <DataSelectionUI {...request} />
      </AppUiProvider>
    );
  },
});

Design Editor example

import { prepareDesignEditor } from '@canva/intents/design';

prepareDesignEditor({
  render() {
    // render logic
  },
});

Content Publisher example

import { prepareContentPublisher } from "@canva/intents/content";

prepareContentPublisher({
  renderSettingsUi: ({
    updatePublishSettings,
    registerOnContextChange,
  }) => {
    root.render(
      <AppUiProvider>
        <SettingUi
          updatePublishSettings={updatePublishSettings}
          registerOnContextChange={registerOnContextChange}
        />
      </AppUiProvider>,
    );
  },

  renderPreviewUi: ({ registerOnPreviewChange }) => {
    root.render(
      <AppUiProvider>
        <PreviewUi registerOnPreviewChange={registerOnPreviewChange} />
      </AppUiProvider>,
    );
  },

  getPublishConfiguration: async () => {
    return {
      status: "completed",
      outputTypes: [
        {
          id: "post",
          displayName: "Post",
          mediaSlots: [
            {
              id: "media",
              displayName: "Media",
              fileCount: { exact: 1 },
              accepts: {
                image: {
                  format: "png",
                },
              },
            },
          ],
        },
      ],
    };
  },

  publishContent: async (request: PublishContentRequest) => {
    // logic to upload media to your platform here
    return {
      status: "completed",
      externalId: "1234567890",
      externalUrl: "https://example.com/posts/1234567890",
    };
  },
});

Apps inside Canva are built with the following Canva Developers SDK packages:

  • @canva/app-ui-kit - React-based component library for creating apps that mimic the look and feel of Canva.
  • @canva/asset - Provides methods for working with assets, such as image and video files.
  • @canva/design - Provides methods for interacting with the user's design, such as creating elements.
  • @canva/error - Provides a CanvaError class for handling errors.
  • @canva/platform - Provides utility methods, such as a method for opening external links.
  • @canva/user - Provides methods for accessing user data and authenticating users.

Contributing

We're actively developing this package but are not currently accepting third-party contributions. If you'd like to request any changes or additions to the package, submit a feature request via the Canva Developers Community.

License

See the LICENSE.md file.

版本与发布记录

@canva/intents 共发布 32 个版本,首次发布于 2025/05/16;过去 12 个月发布了 25 个版本。

版本发布日期距今
2.8.0latest2026/10/2911 天前
2.7.2-beta.0betapreview2026/09/231 个月前
2.7.12026/09/221 个月前
2.7.02026/08/192 个月前
2.6.1-beta.12026/07/243 个月前
2.6.1-beta.02026/06/194 个月前

关于 @canva/intents 的常见问题

@canva/intents 是什么?

The Canva Developers SDK Intents library for apps inside Canva

如何安装 @canva/intents?

在项目目录运行 npm install @canva/intents,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@canva/error(^2.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@canva/intents 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@canva/intents 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@canva/intents 可以商用吗?

@canva/intents 使用 SEE LICENSE IN LICENSE.md FILE 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@canva/intents 的下载量有多少?

根据 npm 官方下载统计,@canva/intents 在 2026/10/09 – 2026/11/07 这 30 天内被下载 77,155 次,日均约 2,572 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canva/intents 还在维护吗?

最新版本 2.8.0 发布于 2026/10/29(11 天前);至今共发布 32 个版本,其中过去 12 个月发布了 25 个;首次发布于 2025/05/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。