Search
Loading...
Skip to content

v1.54.0 Changelog

June 26, 2025

Breaking Changes

  • Editor/Web: Removed the “more” options menu from the inspector bar.
  • Editor/Web: Removed the ly.img.options feature key that was used to enable the “more” options menu in the inspector bar.
  • Engine/Swift: Fixed DesignUnit raw values not being aligned with the C++ enum.
  • Engine/Swift: Updated default asset sources configuration to include new crop and size preset sources. The sources ly.img.crop.presets and ly.img.page.presets are now part of the default assets served through the CDN. You must update your CDN configuration to include these new sources.

Non Breaking Changes

  • Engine: Added new getTextVisibleLineContent API to retrieve the text content of the visible lines in text blocks.
  • Editor/Android: Added “Select Group” button in canvas menu for design blocks that are in a group design block.
  • Engine: Skia is now used to parse SVG data instead of NanoSVG
  • Editor/Web: Introduced new feature keys to configure the transform controls via the feature API.
  • Editor/Web: Introduced the following UX improvements:
    • Centered the controls in the inspector bar.
    • Moved the stroke settings into a dropdown in the inspector bar.
    • Introduced the text style dropdown in the inspector bar.
    • Introduced the advanced text controls in the inspector bar.
    • Introduced a new dropdown in the canvas bar that contains the following actions:
      • Copy
      • Paste
      • Flip Horizontally
      • Flip Vertically
    • Moved the inspector toggle into the top level inspector.
  • Camera/Android: Fixed an issue where the permission request flow could break under certain conditions when the same permission was being requested elsewhere in the app.
  • Engine: The dashed outline of groups are now independent of zoom level.
  • Engine/Web: Deprecated the old export API signatures in favor of a new improved signatures to follow better API design practices. The following changes were made:
    • Simplified the exportVideo, export and exportWithColorMask APIs by making all parameters optional except for the page handle
    • Moved all optional parameters (including mimeType) into a single options object, which removes the requirement to pass undefined or empty objects for unused parameters
    • Removed enum usage for mime types in favor of string literals to align with the rest of our type definitions
    • These changes make the APIs more intuitive and easier to use, especially when only specific options need to be configured
    // Before
    engine.block.export(page, MimeType.Jpeg, {
    jpegQuality: 0.8,
    targetWidth: 1080,
    targetHeight: 1080
    });
    engine.block.export(page, undefined, {
    targetWidth: 1080,
    targetHeight: 1080
    });
    // After
    engine.block.export(page, {
    mimeType: 'image/jpeg',
    jpegQuality: 0.8,
    targetWidth: 1080,
    targetHeight: 1080
    });
    engine.block.export(page, {
    targetWidth: 1080,
    targetHeight: 1080
    });
    // Before
    engine.block.exportWithColorMask(page, MimeType.Png, 0.5, 0, 0, {
    pngCompressionLevel: 6
    });
    engine.block.exportWithColorMask(page, undefined, 0.5, 0, 0);
    // After
    engine.block.exportWithColorMask(page, 0.5, 0, 0, {
    mimeType: 'image/png',
    pngCompressionLevel: 6
    });
    engine.block.exportWithColorMask(page, 0.5, 0, 0);
    // Before
    engine.block.exportVideo(
    page,
    MimeType.Mp4,
    (
    numberOfRenderedFrames,
    numberOfEncodedFrames,
    totalNumberOfFrames: number
    ) => {
    console.log(
    `Rendered ${numberOfRenderedFrames} frames, encoded ${numberOfEncodedFrames} frames out of ${totalNumberOfFrames}`
    );
    },
    {
    targetWidth: 1080,
    targetHeight: 1080
    }
    );
    engine.block.exportVideo(page, undefined, undefined, {
    targetWidth: 1080,
    targetHeight: 1080
    });
    // After
    engine.block.exportVideo(page, {
    mimeType: 'video/mp4',
    onProgress: (
    numberOfRenderedFrames,
    numberOfEncodedFrames,
    totalNumberOfFrames: number
    ) => {
    console.log(
    `Rendered ${numberOfRenderedFrames} frames, encoded ${numberOfEncodedFrames} frames out of ${totalNumberOfFrames}`
    );
    },
    targetWidth: 1080,
    targetHeight: 1080
    });
    engine.block.exportVideo(page, {
    targetWidth: 1080,
    targetHeight: 1080
    });
  • Engine/iOS: Fixed export not continuing after app was returned from the background.
  • Engine: Use magic bytes primarily for determining the MIME type of a file during import.
  • Editor/iOS: Added a new dock button to open the page resize sheet, supporting both manual adjustments and predefined size presets.
  • Editor/iOS: Added predefined crop presets to the crop sheet.
  • Editor/iOS: Changed default of SheetType.crop.style to SheetStyle/only(detent:).
  • Editor/iOS: Fixed OS system photo camera permission handling to prevent black screen.
  • Editor/iOS: Fixed sheet dismissal behavior to ensure the sheet closes correctly when the event is triggered.