Search Docs
Loading...
Skip to content

Version v1.69.0 Changelog February 23, 2026

Breaking Changes

  • Editor/Web: BREAKING: Updated asset source IDs to align with v5 naming conventions. The following asset source IDs have been renamed:

    • ly.img.captionPresetsly.img.caption.presets
    • ly.img.colors.defaultPalettely.img.color.palette
    • ly.img.vectorpathly.img.vector.shape
    • ly.img.textComponentsly.img.text.components

    The following asset sources have been merged:

    • ly.img.filter.lut + ly.img.filter.duotonely.img.filter
    • ly.img.page.presets + ly.img.page.presets.videoly.img.page.presets
    • ly.img.template + ly.img.video.templately.img.templates (note: plural)

    Migration Guide: If you are using custom asset configurations or referencing these asset source IDs in your code, you will need to update them to use the new IDs. Translation keys in i18n files have also been updated to match the new asset source naming. CDN URLs have been updated from v4/demo-v2 to v5/demo-v3.

  • Editor/Web: BREAKING Removed config.ui.elements.libraries.insert.entries configuration option. All default asset libraries (Templates, Uploads, Images, Videos, Audio, Text, Shapes, Stickers) are now automatically available. If you were customizing asset library entries through configuration, use the cesdk.ui.addAssetLibraryEntry() and cesdk.ui.updateAssetLibraryEntry() APIs after SDK initialization instead.

  • Editor/Web: BREAKING Removed config.ui.elements.libraries.replace.entries configuration option. The replace panel continues to work as before, showing relevant asset libraries based on the selected content. If you need to customize which libraries appear in the replace panel, use the cesdk.ui.setReplaceAssetLibraryEntries() API after SDK initialization.

  • Editor/Web: BREAKING Removed config.ui.elements.dock.groups and config.ui.elements.dock.defaultGroupId configuration options. The dock must now be configured programmatically using the cesdk.ui.setDockOrder() API after SDK initialization. If you were using the default dock configuration, you’ll need to explicitly configure it in your code.

  • Editor/Web: See our migration guide for step-by-step instructions and code examples.

  • Editor/Web: BREAKING: Introduced Starterkits - pre-configured editor templates that replace the previous built-in editor configuration. The editor now initializes with a blank canvas by default.

    Key changes:

    • The editor initializes a blank canvas with minimal configuration. Use one of our Starterkits to get started quickly based on your use case.
    • Asset sources can now be loaded using built-in plugins. See the Asset Source Plugins guide for details.

    Migration: See the Starterkits Migration Guide for step-by-step instructions.

  • Editor/Web: BREAKING: Removed ly.img.filter.lut and ly.img.filter.duotone from the Feature API. Use ly.img.filter instead, which controls all filter types.

  • Editor/Web: Moved the placeholder settings panel from the canvas menu into the advanced inspector. The placeholder settings are now accessed via a “Design” / “Placeholder” toggle in the inspector panel when a block is selected, instead of a dedicated canvas action button. The canvas-action-placeholder-settings button has been removed.

Non Breaking Changes

  • Editor/Web: Deprecated cesdk.addDefaultAssetSources() and cesdk.addDemoAssetSources() methods. These methods will continue to load v4 assets but will be removed in a future version.

    Migration options:

    • Use the new Asset Source Plugins (recommended)
    • Use engine.asset.addLocalAssetSourceFromJSONURI() or engine.asset.addLocalAssetSourceFromJSONString() for custom asset sources
  • Editor/Android: Allow adjusting speed for audio clips (up to 3x).

  • Editor/Android: Add a clip speed inspector for video clips.

  • Engine: The basePath setting now also controls where the engine loads font fallback files and the emoji font from. Previously, these were always loaded from https://cdn.img.ly/assets/v4, making it impossible to fully self-host all CE.SDK assets. When basePath is not set, the engine continues to load these assets from the default CDN URL. If self-hosting, set basePath via editor.setSettingString() to point to your server where you’ve extracted the fonts/ and emoji/ directories from imgly-assets.zip. See the Serve Assets guide for details.

  • Editor/Web: Added truncateLabel option to the Checkbox builder component, allowing long labels to be truncated with an ellipsis.

  • Editor/iOS: Add Clip Speed inspector sheet with speed and duration controls for video and audio clips (audio max 3x).

  • Editor/iOS: Improved timeline thumbnails for still content (images, stickers, shapes) by displaying a single representative thumbnail instead of repeating images.

  • Editor/iOS: Added text content display for text clips in the timeline, showing the actual text alongside the clip label.

  • Editor/iOS: Added pinning behavior for clip labels, thumbnails, and text content - elements now stay visible when clips are scrolled off-screen.

  • Editor/iOS: Fixed audio waveform stability during timeline trimming operations.

  • Engine: Added Auto option to touch/pinchAction setting. When enabled, pinch gestures will scale the selected element if the center point between the two fingers is inside the element’s bounding box, otherwise the camera zooms. Supports rotation during scaling when touch/rotateAction is set to Rotate.

  • Editor/Web: Added ability to replace the shape of graphic blocks via a new “Change Shape” option in the shape inspector controls.

  • Engine: Added support for SVG files containing embedded images.

  • Editor/Web: The video timeline now automatically expands when foreground tracks are added and collapses when they are removed. Manual height adjustment via drag is supported and users can double-click the resize handle to return to automatic height mode.

  • Editor/Web: Added unified component order APIs (setComponentOrder, getComponentOrder, insertOrderComponent, updateOrderComponent, removeOrderComponent) providing a cleaner, type-safe interface for customizing UI component ordering across all areas. The 30 area-specific methods (e.g., setDockOrder, insertInspectorBarOrderComponent) are now deprecated in favor of the new unified API.

  • Editor/Web: Improved video compatibility UX on unsupported browsers. Added warning dialogs that automatically appear when users attempt to use video features on browsers lacking required codec support. Added video.decode.checkSupport and video.encode.checkSupport actions to trigger these dialogs programmatically, and silent utilities cesdk.utils.supportsVideoDecode() and cesdk.utils.supportsVideoEncode() for detection without UI. Affected platforms include Linux browsers and Firefox, which lack H.264/AAC encoder support.

  • Plugins/Web: Fixed uploadMiddleware URLs being ignored in image quick actions, causing FILE_FETCH_FAILED errors during export when using custom storage backends.

  • Plugins/Web: Image quick actions no longer automatically re-upload generated images. Users who need to persist AI-generated images should configure uploadMiddleware to handle storage. This aligns quick action behavior with the panel flow.

  • Editor/Android: Updated Coil to 2.6.0, fixing a crash in Lazy Lists when pausable composition during prefetch is enabled.

  • Engine: Fixed a use-after-free in async resource callbacks when loading an archive from an invalid URL.

  • Engine/Web: Fixed static noise when playing audio files with low sample rates (e.g., 16kHz AAC audio).

  • Engine: Prevent audio from other pages mixing into export when exporting from a specific page in a multi-page scene.

  • Engine: Allow export duration to exceed page duration, producing silence after page content ends instead of truncating or repeating audio.

  • Editor/Web: Fixed dock buttons not showing tooltips when dock/hideLabels is enabled. Labels now appear as tooltips when hidden.

  • Editor/Flutter: Fixed an issue where effects applied to paused videos were not immediately visible when using TextureView.

  • Engine: Fixed incorrect rotation of grouped page children when flipping via crop changes with page.moveChildrenWhenCroppingFill enabled (Photo Editor UI).

  • Editor/Web: Improved group behavior in video mode - children now preserve their original durations and time offsets when grouped, and groups can no longer be trimmed

  • Editor/Web: Enabled groups by default in video mode

  • Engine/Web: Fixed archival in NodeJS environments.

  • Editor/Web: Removed the old drop layer overlay that displayed “Drag File Here” text with an icon when dragging files onto the canvas.

  • Engine: Fixed an issue where calling setTypeface multiple times would accumulate fonts in the document typefaces instead of replacing them. This caused text blocks to become unusable (displaying ‘x’ characters) after several archive save/load cycles with font changes.

  • Editor/Web: Fixed the timeline drop zone indicator moving out of view when scrolling the timeline.

  • Engine: Fixed an issue where unused document typefaces were incorrectly included in saved archives, causing missing font file references when the archive was loaded.

  • Engine: Fixed video export getting stuck at 99% when PendingState was not properly cleared for video fills after the resource finished loading.

  • Editor/Web: Added a unified scene.create action (cesdk.actions.run('scene.create', options?)) that replaces the deprecated cesdk.createDesignScene() and cesdk.createVideoScene() methods. The new action provides a single entry point for scene creation across all modes with flexible page configuration.

    Key features:

    • Supports both Design and Video modes via the mode option (defaults to 'Design').
    • Pages can be configured with inline dimensions ({ width, height, unit }), asset source references ({ sourceId, assetId }), or full asset objects.
    • Multiple pages can be created at once via the pages array or via page + pageCount.
    • Automatically configures scene DPI (72 for Pixel, 300 for print units) and design units.

    Migration:

    // Before
    await cesdk.createDesignScene();
    await cesdk.createVideoScene();
    // After
    await cesdk.actions.run('scene.create');
    await cesdk.actions.run('scene.create', { mode: 'Video' });
    // With page dimensions
    await cesdk.actions.run('scene.create', {
    page: { width: 1080, height: 1920, unit: 'Pixel' }
    });
    // With page presets from an asset source
    await cesdk.actions.run('scene.create', {
    page: {
    sourceId: 'ly.img.page.presets',
    assetId: 'ly.img.page.presets.instagram.story'
    }
    });
  • Editor/Web: Deprecated cesdk.createDesignScene() and cesdk.createVideoScene(). Both methods continue to work but log a deprecation warning. Use cesdk.actions.run('scene.create', ...) instead.

  • Editor/Android: Fixed a crash when launching a media picker on devices without an app to handle the intent.

  • Editor/Android: Fixed an IllegalStateException crash that could occur after process restoration when an activity result contract was pending.

  • Docs: Remove React Native platform flag from guide pages that have no React Native content, preventing empty pages from being rendered

  • Engine: Fixed basePath setting not being serialized.

  • Editor/Web: Fixed dropdown menu items not filling width and having broken spacing between icons, labels, and keyboard shortcuts.

  • Engine: Added clampTextBlockWidthToPageDimensionsDuringEditing feature flag that wraps auto-sized text at page edges instead of overflowing during editing.