Developer Portal

5.4 Release Notes

5.4.0 is the first generally available release since the 5.3.0 release of You.i Engine One.


We have changed the Android target API version to API level 28 (Android 9) to meet Google Play's requirements, effective in August 2019. For more information, click here.

Resolved Issues

  • Fixed an issue which caused onCurrentTimeUpdated and onDurationChanged to be mandatory, resulting in an error screen if they were undefined.
  • Fixed an issue which caused Text to disappear from TextInputRef on Nvidia Shield devices.
  • Fixed an issue which caused the Networking module to return 0, even though the request was successfully taken from the cache.
  • Fixed an issue which caused the Input module to crash when pressing the function button on OSX.
  • Fixed an issue where all iOS devices returned 72 DPI for their DPI values.
  • Fixed an issue which caused an assertion when the requestSPCMessage signal is emitted and there is an error in the YiAVPlayer.
  • Fixed an issue where a single Text component with more than 20,000 characters would cause an app to crash.
  • Fixed an issue which caused the developer panel to close whenever a widget is turned on.
  • Fixed an issue which caused padding and margin values to reset in the After Effects property panel.
  • Fixed an issue which caused Android module resources to be searched for in the wrong directory.
  • Fixed an issue where Text on Cloud Solution was continuing beyond the InputProperties node.

Breaking Changes

You.i Engine React Native API Breaking Changes

  • You.i Engine React Native apps that use the Input module will need to update their use of the YI_KEY_ names. Because it will not show up as a compilation error, you need to do a search for YI_KEY_ in your .js files to investigate what needs to be updated.

You.i Engine C++ API Breaking Changes

Replaced our enum uses with enum class (strong enums):

  • Most enum types within the You.i Engine C++ have been changed from enum to enum class, and have had their names changed. For example, an enum value previously referenced as CYILinearLayout::ORIENTATION_VERTICAL is now referenced as CYILinearLayout::Orientation::Vertical. In some cases, globally-scoped enums have been moved into an associated class. For example, the enum YI_FONT_STYLE from YiTextEngine.h has been moved into the CYITextEngine class, and would be referenced as CYITextEngine::FontStyle.
  • You.i Engine C++ apps will need to update their use of the You.i Engine enums to reflect the new scopes and classes. This can simply be done by recompiling your application and fixing compilation errors as they appear.

Support conversions between YI_RECT, YI_RECT_REL, YI_FLOAT_RECT, and YI_FLOAT_RECT_REL:

  • Previously these classes used to hold pairs of points, or a point and dimension. However, some functions required values in a specific type, but converting between those types was cumbersome and error-prone.
  • The conversion support changes the constructor of the YI_RECT, YI_RECT_REL, YI_FLOAT_RECT, and YI_FLOAT_RECT_REL classes in a way that may cause compilation issues.
  • If you make use of these classes’ constructors, you may need to update your constructors to match the new arguments.
  • See documentation on these classes here: YI_RECT, YI_RECT_REL, YI_FLOAT_RECT, and YI_FLOAT_RECT_REL.

Changed the CYIHTTPRequest::AddHeader API.

  • Previously, AddHeader did not return a value and had a single argument:
    void CYIHTTPRequest::AddHeader(const CYIString &header )
  • Now, AddHeader returns a boolean and has two arguments: bool CYIHTTPRequest::AddHeader(const CYIString &name , const CYIString &value).
    • It will now return false when an empty header name is passed in.
    • The header will not be created if an empty header is passed in.
    • Existing headers will behave as they did before this change.

Changed the CYIHTTPRequest::GetHeader API.

  • Previously, GetHeaders was getting a vector of header strings, but now it gets a vector of header structs. The new vector is a copy. The struct consists of the header’s name and value.
  • Previously, GetHeaders was: const std::vector<CYIString> &CYIHTTPRequest::GetHeaders() const. Now, GetHeaders is: const std::vector<CYIHTTPRequest::Header> CYIHTTPRequest::GetHeaders() const.

You.i Engine Cloud Solution API Breaking Changes

  • Prior to 5.3, some APIs used CYICloudInterface::Bundle. These must be changed to use CYIBundle instead.
  • If an app is using any scrollTo APIs in React Native or scrollToPosition API in C++ for other non-cloud platforms, they may take effect on Cloud Solution now that scrollTo API support has been expanded. If your app employed custom solutions such as export hints or the scrollListToIndex, to achieve this functionality on Roku, this may no longer be necessary.
  • As of 5.4, the exportAsScrollingView method in the Cloud module has been removed. It should be replaced with exportAsComponentScrollingView. For more information, see exportAsComponentScrollingView and Roku List Development.

You.i Engine C++

Performance Improvements

Updating text atlases is now faster, which improves list scrolling performance.


  • Support for Widevine Modular DRM on Tizen.
  • Support for Widevine with a custom license acquisition handling on Android and Tizen:

    • Exposes APIs to give developers the ability to add data to the body of a POST request when communicating with the license server.
    • Expanding support for other platforms is planned for future releases.

For more information, see Widevine Custom Request DRM Handler.

You.i Engine React Native


React Native’s own WebView component will be deprecated, and they are planning to remove it. For more information, click here. If you are using React Native’s WebView component, you should replace it with You.i React Native’s WebView. To do this, import WebView from react-native-youi instead of react-native.

For more information, see the WebView documentation.


Support for React Native on Samsung’s Tizen platform is officially available.

  • The 5.4 release supports the native Tizen AVPlay media player. As with most players, there are some limitations and use cases that are not supported, such as closed captions which are controlled via the TV interface and not in the player. Please review encoding and DRM support against your specific media requirements.


Though the default Tizen player is preferred, we have seen other third-party players successfully implemented.


The JavaScript interpreter is now using a multi-threaded approach:

  • Previously, the interpreter was running on the main thread for our application, which is also the rendering thread. This could cause scenarios where the interpreter and renderer were competing for resources.
  • The multi-threaded approach increases the overall performance of the engine across all platforms, without having to change anything in your code.

Optimized loading of local assets:

  • Previously, the local image assets were loaded using the network service using file:// URLs.
  • Now, local assets use the asset loader and its decode thread pool.
  • Benchmark timing improved by over 50% in our JSX tests, and up to 40% in our After Effects tests.

Optimized prop application:

  • Changes have been made to how props are applied, with the goal to reduce the time it takes to apply props to their views.
  • Benchmark timing improved by up to 35% for application of the width prop over the course of the test.

Batched logic of prop application:

  • Some prop’s application, such as horizontal, snapToAlignment, and snapToInterval, caused other props to be reapplied with the same value within our engine.
  • Changes were made to ensure that these props don’t redundantly reapply props when their values have not changed.


Native Animation Support: Added support for useNativeDriver set to true with the following methods:

  • Animated.decay()
  • Animated.timing()
  • Animated.spring()
  • In this release, Animated.event() is not supported when used with useNativeDriver set to true. However, Animated.event() is supported when not using the Native Driver.
  • We plan to support Animated.event() with Native Driver in the future releases.

For more information, see Vanilla React Native Supported Components.

You.i Engine React Native Known Issues

Using the JS Debugger throws exceptions due to an issue related to the Timing module. This issue has been seen across multiple platforms.

::0: F/TimingModule: Assertion failed: Negative difference in time since timer created in JS. Are the clocks aligned?!

This issue is being investigated and planned to be addressed as soon as possible.

You.i Engine Cloud Solution

The Cloud team has continued to focus on feature and performance improvements.

New features and functions include:

  • Expanded React Native JSX support
    • TextInput properties
    • scrollTo APIs
    • backgroundColor: View, Image, TextInput
    • Image properties
  • Roku support for ScrollView's snapToInterval and snapToAlignment properties.
  • Implemented the ID3 TimedMetadataInterface tag support for Cloud Solution.
    • Allows the client to capture any desired timed metadata on the available stream.
  • ComponentScrollingView support for property, content, and animation updates.


  • Improved queuing of analytic events.
  • Improvements to React Native Animation support.
  • List focus improvements.
  • Resolved a Persistent Storage issue where an app's user upgrading from 5.2 to 5.3 may have been prompted to re-login on their client.
  • Fixed an issue where background life cycle events could disrupt the mobile experience.
  • Fixed an issue where the text continued beyond the InputProperties node.
  • Fixed an issue where an internet connection loss could result in an infinite spinner.
  • Fixed an issue where animations and transitions on other platforms may not have appeared as expected.
  • Reduced the severity of an issue where the aligned 9-12pt text was occasionally ellipsized.
  • Updated to comply with Roku certification requirements.
    • roInputEvent is used when deep linking for direct playback commands.
    • Signal beacons are added on app start and EPG launch.
  • Removed API: The exportAsScrollingView API has been removed from the Cloud module.

Expanded React Native JSX Support on Cloud

In 5.4, we have continued to expand our JSX capabilities for the You.i Engine Cloud Solution.

Support for React Native's scrollTo has been expanded to cover all APIs

  • FlatList: scrollToEnd, scrollToIndex, scrollToItem, and scrollToOffset
  • ScrollView: scrollTo and scrollToEnd
  • VirtualizedList: scrollToEnd, scrollToIndex, scrollToItem, and scrollToOffset
  • Corresponding methods for ListRef and ScrollRef You.i RN components
  • Support for React Native's scrollTo feature has following limitations and known issues:
    • Animated scrolling may not be smooth if scrolling across many items. It is recommended to use less than 10 items and to use non-animated scrolling in this case.
    • This feature will only work when exporting your list as a ComponentScrollingView on Roku.
    • For C++ apps, although the supported CYIScrollingView::ScrollToPosition method is part of CYIScrollingView, it will only work if used on a CYIListView.
    • The scrollTo functions do not work on carousel lists.
    • There is an issue, for both Roku and non-Roku builds, where scrolling may not work on lists that have magnets. It has only been observed when calling scrollTo multiple times in succession on the same list.

To know more, see Vanilla React Native Supported Components.

Dynamic support for TextInput properties

  • onFocus: It is called when TextInput is focused.
  • onEndEditing: It is called when the OK button is pressed on the keyboard or even if text has not changed. It is not called if the user abandons editing.
  • onSubmitEditing: It is called when the OK button is pressed on the keyboard or even if text has not changed. It is not called if the user abandons editing.
  • onChange: It is called if the OK button is pressed and text has changed.
  • onChangeText: It is called if the OK button is pressed and text has changed.
  • clearTextOnFocus: It is called when TextInput receives focus.
  • onKeyPress: It is not called on Roku.

To know more, see Vanilla React Native Supported Components.

Support for dynamically changing the attributes of view components at run-time

  • backgroundColor is implemented for the following components:
    • CYISceneView (related RN component: View)
    • CYIImageView (related RN component: Image)
    • CYITextEditView (related RN component: TextInput)

Dynamic support for additional Image properties

  • resizeMode is now partially supported:
    • CYIImageView::ScaleMode::Stretch (related RN property: cover)
    • CYIImageView::ScaleMode::Fit (related RN property: contain)
    • CYIImageView::ScaleMode::Fill (related RN property: stretch)
  • repeat and center are not supported.

Cloud Solution Known Issues

  • In 5.3, we noted that some text could be truncated, followed by an ellipsis. This issue has been addressed and is resolved in most cases. It still may occur in rare cases (depending on very specific font, font size, and character usage). In other cases, text nodes aligned by the alignItems property may not align exactly as expected.
  • As of 5.4, text overflow occurs in some cases with certain combinations of custom fonts and fontSizes. To avoid this behavior, test your app on multiple devices to ensure text is not set to a font and fontSize that causes overflow.


Due to technical limitations the Roku platform does NOT support all standard You.i Engine One features. Please review all Working With Roku documentation, and schedule a design review prior to project kick-off.

After Effects Workflow

Introducing experimental support for After Effects shape layer export. Supported Features are:

  • Parametric shapes: Rectangle and Ellipses
  • Paths
  • Paint Operations: Stroke, Fill, Gradient Stroke, and Gradient Fill
  • Shape Groups

To know more, see Working With Shapes.


This is an experimental feature that is not recommended for production use due to performance impact.


Fixed an issue which caused padding and margin values to reset in the After Effects property panel.