Version 1.69 introduces Starter Kits, a new asset source plugin system, and consolidated asset naming conventions. This guide walks you through the breaking changes and migration steps.
TL;DR#
Key changes:
- Editor now initializes with a blank canvas by default
addDefaultAssetSources()andaddDemoAssetSources()are deprecatedcreateDesignScene()andcreateVideoScene()are deprecated- Asset source IDs have been renamed and consolidated (v5 naming)
- UI configuration options moved from
create()to runtime APIs - New plugin-based system for loading assets
- Unified
scene.createaction for scene creation
Migration time: ~15-30 minutes for most projects
What’s New in v1.69#
Starter Kits#
Starter Kits are complete project templates with editable configuration files. Each kit provides a ready-to-run project with a well-defined architecture:
- A
config/folder containing all editor configuration - Separate files for UI layout, features, settings, and translations
- A configuration plugin class that wires everything together
- Clean separation between your app code and editor config
Asset Restructuring#
Version 1.69 introduces v5 assets and demo-v4 assets with updated naming conventions. This restructuring consolidates asset sources, establishes consistent naming patterns for asset source and asset IDs, and improves the developer experience when working with assets.
Step-by-Step Migration#
Step 1: Adopt Starter Kit Configuration#
Extract a Starter Kit config folder into your project:
npx degit imgly/starterkit-design-editor-ts-web/src/imgly/config ./src/confignpx degit imgly/starterkit-design-editor-ts-web/src/imgly/config ./src/configgit clone https://github.com/imgly/starterkit-design-editor-ts-web.git
cp -r starterkit-design-editor-ts-web/src/imgly/config ./src/config
rm -rf starterkit-design-editor-ts-webgit clone https://github.com/imgly/starterkit-design-editor-ts-web.git
cp -r starterkit-design-editor-ts-web/src/imgly/config ./src/config
rm -rf starterkit-design-editor-ts-webWhich Starter Kit Should I Use?#
Choose based on your previous editor setup:
- Design Editor — You used
createDesignScene()for multi-page designs (social posts, flyers, presentations) - Video Editor — You used
createVideoScene()for video timeline editing - Advanced Design Editor — You used
createDesignScene()with the advanced inspector enabled to author design templates with placeholders for end-users to customize - Advanced Video Editor — You used
createVideoScene()with the advanced inspector enabled to author video templates with placeholders for end-users to customize
Available Starter Kits#
| Starter Kit | Repository | Use Case |
|---|---|---|
| Design Editor | imgly/starterkit-design-editor-ts-web | Multi-page design creation |
| Photo Editor | imgly/starterkit-photo-editor-ts-web | Single-image editing |
| Video Editor | imgly/starterkit-video-editor-ts-web | Video timeline editing |
| Advanced Design Editor | imgly/starterkit-advanced-design-editor-ts-web | Full-featured design editor |
| Advanced Video Editor | imgly/starterkit-advanced-video-editor-ts-web | Full-featured video editor |
| Design Viewer | imgly/starterkit-design-viewer-ts-web | Read-only design viewing |
| Video Player | imgly/starterkit-video-player-ts-web | Read-only video playback |
Repository Structure#
The config/ folder contains all configuration files you can modify:
config/├── index.ts # Exports configuration class├── plugin.ts # Main plugin class, orchestrates all setup├── features.ts # Feature flags (text, stickers, audio, etc.)├── settings.ts # Engine settings (page size, margins, etc.)├── i18n.ts # Custom translations and labels├── actions.ts # Export, save, and share button handlers└── ui/ ├── index.ts # UI setup entry point ├── canvas.ts # Canvas behavior (zoom, pan, selection) ├── components.ts # Custom UI components ├── dock.ts # Left dock panel order and items ├── inspectorBar.ts # Right inspector panel configuration ├── navigationBar.ts # Top navigation bar buttons └── panel.ts # Panel settings and behaviorStep 2: Use the Configuration Plugin#
import CreativeEditorSDK from '@cesdk/cesdk-js';import { DesignEditorConfig } from './config/plugin';
const cesdk = await CreativeEditorSDK.create('#editor', { license: 'YOUR_CESDK_LICENSE_KEY', baseURL: `https://cdn.img.ly/packages/imgly/cesdk-js/${CreativeEditorSDK.version}/assets`});
// Add plugin first (resets configuration to clean slate)await cesdk.addPlugin(new DesignEditorConfig());
// Apply custom configuration on top// ...
// Create the sceneawait cesdk.actions.run('scene.create');Step 3: Replace Deprecated Asset Loading Methods#
Replace calls to addDefaultAssetSources() and addDemoAssetSources() with the new plugin-based approach.
Replacing addDefaultAssetSources()#
Before (deprecated):
await cesdk.addDefaultAssetSources();After (v1.69+):
The snippets below show the asset sources that addDefaultAssetSources() previously loaded by default. Include only the plugins your application requires:
import { BlurAssetSource, ColorPaletteAssetSource, CropPresetsAssetSource, EffectsAssetSource, FiltersAssetSource, PagePresetsAssetSource, StickerAssetSource, TextAssetSource, TextComponentAssetSource, TypefaceAssetSource, VectorShapeAssetSource} from '@cesdk/cesdk-js/plugins';
await cesdk.addPlugin(new ColorPaletteAssetSource());await cesdk.addPlugin(new TypefaceAssetSource());await cesdk.addPlugin(new TextAssetSource());await cesdk.addPlugin(new TextComponentAssetSource());await cesdk.addPlugin(new VectorShapeAssetSource());await cesdk.addPlugin(new StickerAssetSource());await cesdk.addPlugin(new EffectsAssetSource());await cesdk.addPlugin(new FiltersAssetSource());await cesdk.addPlugin(new BlurAssetSource());await cesdk.addPlugin(new PagePresetsAssetSource());await cesdk.addPlugin(new CropPresetsAssetSource());import { BlurAssetSource, CaptionPresetsAssetSource, ColorPaletteAssetSource, CropPresetsAssetSource, EffectsAssetSource, FiltersAssetSource, PagePresetsAssetSource, StickerAssetSource, TextAssetSource, TextComponentAssetSource, TypefaceAssetSource, VectorShapeAssetSource} from '@cesdk/cesdk-js/plugins';
await cesdk.addPlugin(new ColorPaletteAssetSource());await cesdk.addPlugin(new TypefaceAssetSource());await cesdk.addPlugin(new TextAssetSource());await cesdk.addPlugin(new TextComponentAssetSource());await cesdk.addPlugin(new VectorShapeAssetSource());await cesdk.addPlugin(new StickerAssetSource());await cesdk.addPlugin(new EffectsAssetSource());await cesdk.addPlugin(new FiltersAssetSource());await cesdk.addPlugin(new BlurAssetSource());await cesdk.addPlugin(new CaptionPresetsAssetSource());await cesdk.addPlugin(new PagePresetsAssetSource({ include: [ 'ly.img.page.presets.facebook.*', 'ly.img.page.presets.instagram.*', 'ly.img.page.presets.linkedin.*', 'ly.img.page.presets.pinterest.*', 'ly.img.page.presets.tiktok.*', 'ly.img.page.presets.video.*', 'ly.img.page.presets.x.*', 'ly.img.page.presets.youtube.*' ]}));await cesdk.addPlugin(new CropPresetsAssetSource());Replacing addDemoAssetSources()#
Before (deprecated):
await cesdk.addDemoAssetSources();After (v1.69+):
The snippets below show the demo assets and upload sources that addDemoAssetSources() previously loaded by default. Include only the plugins your application requires:
import { DemoAssetSources, UploadAssetSources } from '@cesdk/cesdk-js/plugins';
await cesdk.addPlugin( new UploadAssetSources({ include: ['ly.img.image.upload'] }));await cesdk.addPlugin( new DemoAssetSources({ include: [ 'ly.img.image.*', 'ly.img.templates.blank.*', 'ly.img.templates.presentation.*', 'ly.img.templates.print.*', 'ly.img.templates.social.*' ] }));import { DemoAssetSources, UploadAssetSources } from '@cesdk/cesdk-js/plugins';
await cesdk.addPlugin( new UploadAssetSources({ include: ['ly.img.image.upload', 'ly.img.video.upload', 'ly.img.audio.upload'] }));await cesdk.addPlugin( new DemoAssetSources({ include: [ 'ly.img.audio.*', 'ly.img.image.*', 'ly.img.templates.video.*', 'ly.img.video.*' ] }));Asset Source Plugins Reference#
All plugins are imported from @cesdk/cesdk-js/plugins:
| Plugin | Asset Source ID | Description |
|---|---|---|
BlurAssetSource | ly.img.blur | Blur effects |
CaptionPresetsAssetSource | ly.img.caption.presets | Caption text presets (video) |
ColorPaletteAssetSource | ly.img.color.palette | Color palettes |
CropPresetsAssetSource | ly.img.crop.presets | Crop aspect ratios |
EffectsAssetSource | ly.img.effect | Visual effects |
FiltersAssetSource | ly.img.filter | LUT and duotone filters |
PagePresetsAssetSource | ly.img.page.presets | Page size presets |
StickerAssetSource | ly.img.sticker | Stickers and decorations |
TextAssetSource | ly.img.text | Text presets |
TextComponentAssetSource | ly.img.text.components | Styled text components |
TypefaceAssetSource | ly.img.typeface | Fonts and typefaces |
VectorShapeAssetSource | ly.img.vector.shape | Vector shapes |
UploadAssetSources | ly.img.*.upload | User upload sources |
DemoAssetSources | Various | Demo content for testing |
Each plugin accepts an optional configuration object with:
baseURL: Custom base URL for loading assetsinclude: GLOB patterns to filter which assets to loadassetLibraryEntries: Map asset source IDs to UI library entry IDs
Demo Asset Sources#
The DemoAssetSources plugin provides sample content for development and testing:
| Pattern | Description |
|---|---|
ly.img.templates.* | All template categories |
ly.img.templates.blank.* | Blank templates |
ly.img.templates.social.* | Social media templates |
ly.img.templates.print.* | Print templates |
ly.img.templates.presentation.* | Presentation templates |
ly.img.templates.video.* | Video templates |
ly.img.image.* | Demo images |
ly.img.video.* | Demo videos |
ly.img.audio.* | Demo audio |
Upload Asset Sources#
The UploadAssetSources plugin enables file uploads:
| ID | Default MIME Types |
|---|---|
ly.img.image.upload | image/jpeg, image/png, image/webp, image/svg+xml, image/bmp, image/gif |
ly.img.video.upload | video/mp4, video/quicktime, video/webm, video/matroska, image/gif |
ly.img.audio.upload | audio/mpeg, audio/mp3, audio/x-m4a, audio/wav |
Breaking Changes#
Asset Source ID Renames#
The following asset source IDs have been renamed to align with v5 naming conventions:
| Old ID (deprecated) | New ID (v1.69+) |
|---|---|
ly.img.captionPresets | ly.img.caption.presets |
ly.img.colors.defaultPalette | ly.img.color.palette |
ly.img.vectorpath | ly.img.vector.shape |
ly.img.textComponents | ly.img.text.components |
Merged Asset Sources#
The following asset sources have been consolidated:
| Old IDs (deprecated) | New ID (v1.69+) | Notes |
|---|---|---|
ly.img.filter.lut + ly.img.filter.duotone | ly.img.filter | Single source for all filters |
ly.img.page.presets + ly.img.page.presets.video | ly.img.page.presets | Unified page presets |
ly.img.template + ly.img.video.template | ly.img.templates | Unified template assets |
Merged Feature API Identifiers#
The following Feature API identifiers have been consolidated:
| Old IDs (deprecated) | New ID (v1.69+) | Notes |
|---|---|---|
ly.img.filter.lut + ly.img.filter.duotone | ly.img.filter | Controls all filter types |
Translation Key Updates#
Translation keys have been updated to match the new asset source naming:
- Keys containing
captionPresets→caption.presets - Keys containing
colors.defaultPalette→color.palette - Keys containing
vectorpath→vector.shape - Keys containing
textComponents→text.components - Keys containing
filter.lutorfilter.duotone→filter
Scene Creation Methods#
The createDesignScene() and createVideoScene() methods are deprecated. Use the unified scene.create action instead.
Before (deprecated):
await cesdk.createDesignScene();After (v1.69+):
await cesdk.actions.run('scene.create');Before (deprecated):
await cesdk.createVideoScene();After (v1.69+):
await cesdk.actions.run('scene.create', { mode: 'Video' });The new action provides a single entry point for scene creation with flexible configuration:
// Create a scene with specific page dimensionsawait cesdk.actions.run('scene.create', { page: { width: 1080, height: 1920, unit: 'Pixel' }});
// Create a scene from a page preset assetawait cesdk.actions.run('scene.create', { page: { sourceId: 'ly.img.page.presets', assetId: 'ly.img.page.presets.instagram.story' }});
// Create multiple pages at onceawait cesdk.actions.run('scene.create', { page: { width: 1080, height: 1080, unit: 'Pixel' }, pageCount: 3});await cesdk.actions.run('scene.create', { page: { sourceId: 'ly.img.page.presets', assetId: 'ly.img.page.presets.instagram.story' }});Migration Checklist#
Use this checklist to ensure a complete migration:
- Adopt a Starter Kit configuration for your editor type
- Replace
addDefaultAssetSources()andaddDemoAssetSources()calls with individual asset source plugins - Update any hardcoded asset source IDs to use the new v5 naming conventions (see Breaking Changes)
- Test asset loading and UI configuration
Want a Complete, Ready-to-Run App?#
Extracting the configuration folder is ideal for existing projects where you need full control over editor setup. If you’re starting fresh and want a complete application scaffold with build tooling, asset management, and framework integration already configured, explore our Starter Kits instead.
Starter Kits provide complete applications with everything wired together—clone, install, and start building.