Search Docs
Loading...
Skip to content

Version v1.78.0 Changelog July 6, 2026

Breaking Changes

Non Breaking Changes

  • Editor: Engine error dialogs across Web, iOS, Android, Flutter, and React Native now show customer-facing, localizable copy keyed off the structured engine error code, falling back to the engine’s English message when no copy is authored — so a dialog never shows a blank or a raw code. You can override this copy per error code and resolve it yourself in custom error handlers. See the Custom Error Messages guide for authoring copy and the Error Catalog for the full list of structured error codes.
  • Editor/iOS: EngineSettings(baseURL:) now accepts an optional URL and falls back to the default CE.SDK CDN when nil, so you can pass an optional base URL directly without branching.
  • Editor/Web: The color picker for line shapes now supports gradients.
  • Engine: Movement constraints now keep text on the page by its visible letters, not just its text box, so letters that stick out past the box no longer spill off the page when moving or resizing. On by default; toggle it with the features/movementConstraintsRespectTextOverhang setting.
  • Editor/Web: Added a Path control for text blocks to place text on a curve (Circle, Arch, Wave) with adjustable position, direction and offset, plus Edit Path for a custom baseline. Gated by the new ly.img.text.path feature (with per-control sub-features).
  • Plugins/Web: The AI generation “Generate” button now stays disabled until every required input is provided. Previously, filling a single required input (e.g. the prompt) enabled it even when another required input (e.g. an image) was still missing, which could trigger a failed generation request.
  • Engine/Android: Fixed a crash during export teardown when an engine event stream was collected after Engine.stop().
  • Engine: Fixed a crash (RuntimeError: unreachable) in block.saveToArchive when a text block referenced a font whose bytes were not yet resident (e.g. an unresolved remote font).
  • Engine: Fixed the editor freezing when importing large caption/subtitle (SRT/VTT) files or styling large caption tracks. Style changes now spread across a caption track in linear time instead of quadratic.
  • Engine: Fixed corner-handle resizing of blocks whose width or height is sized as a percent of their parent (for example captions on the video canvas).
  • Engine: Fixed content-aware resize emitting a degenerate “double-flip” transform (both scale axes negative combined with a multiple-of-2π rotation) for page-filling images. Such images now get a clean, axis-aligned transform, so cropping them after resizing no longer moves the crop frame off the canvas.
  • Editor/Flutter: Fixed an issue where effects applied to paused videos were not immediately visible when using TextureView.
  • Editor/iOS: The asset library now refreshes automatically when a source’s contents change via engine.asset.assetSourceContentsChanged(sourceID:). Any open library showing that source re-queries and updates in place, matching the web editor.
  • Editor/iOS: Fixed the sheet title bar and close button overlapping the content of compact effect sheets (Filter, Effect, Blur, Animation) when the iOS 26 Liquid Glass design is enabled.
  • Editor/Web: Keep the text being edited visible above the on-screen keyboard on mobile web. The canvas reserves the keyboard area and pans the camera to the text cursor.
  • Engine/Node: @cesdk/node now bundles the engine-level font-fallback files (fonts/) and emoji font (emoji/NotoColorEmoji.ttf) in the npm package, so default font fallback and emoji rendering work out of the box without reaching the IMG.LY CDN. The @cesdk/node self-hosting asset bundle (imgly-assets.zip) now also includes the fonts/ and emoji/ directories; previously they were missing, which broke the documented self-hosting path.
  • Engine/Web: Fixed video export freezing on Safari when the project contained an uploaded video. Safari treats OPFS read handles as exclusive per file, so the export worker could not read an upload the editor was already reading. OPFS is now disabled on Safari and uploads fall back to in-memory blob URLs.
  • Engine: Fixed movement constraint capping block resizing too early. The cap now follows the block’s axis-aligned bounding box in page space, so resizing — including rotated blocks — can grow to the size the constraint actually permits.
  • Engine: Fixed a crash when loading a scene or block archive whose fetched data is not a valid zip.
  • Editor/Web: Fixed the shape options dropdown in the inspector bar not being keyboard accessible. Opening it now moves focus into the panel, keeps focus contained while navigating its controls, restores focus to the trigger on close, and dismisses on Escape.
  • Editor/Web: Fixed snapping guides ignoring movement constraints when moving or resizing.
  • Engine: Fixed setEditMode('Text') so that setTextCursorRange and other text-cursor APIs work synchronously immediately after, without an intermediate engine update.
  • Engine/Web: Fixed an issue where the on-screen keyboard would not open on iOS when entering text edit mode programmatically inside a user gesture.
  • Engine: A text block placed on a path now returns to automatic sizing when the path is removed, instead of staying at the fixed size adopted for the curve.
  • Engine: A text block placed on a path now keeps a stable set of editable points when re-entering path editing, instead of re-subdividing the path each time.
  • Engine: Fixed a video fill whose source failed to load (for example because of a CORS or network error) being re-fetched on every render frame with no limit. A failed video load now keeps its error state like image fills do; use forceLoadResources/forceLoadAVResource to explicitly retry it.
  • Editor/Web: The typeface library now fetches font previews lazily as rows scroll into view and renders typeface names immediately in a fallback font, keeping the font picker responsive on slow networks and low-end devices. The live per-font preview is preserved and arrives progressively.