UI TV builds streaming apps for mobile, consoles, smart TVs, and set-top boxes using a C++ rendering engine. Customers struggled to find developers for C++ apps, so the team explored JavaScript and chose React Native’s APIs and ecosystem. They aimed to make their engine another React Native platform.
Erik Uggeldahl & Andrew Emmons
Speakers
Andrew Emmons, CTO, and Erik Uggeldahl, developer relations manager, at UI TV explain how they brought React Native to their C++ UI engine at React Native EU 2019, presented by Callstack.
The team found useful foundations in React Native’s C++ bridge, Yoga layout, and Folly Dynamic for handling JavaScript data. C++ JavaScript interpreters also gave them choices for platform compatibility and app size. By late 2016, they had a prototype rendering React Native components through their engine.
Uggeldahl describes C++ as a systems language that offers control over memory and performance, while requiring developers to manage complexity. UI TV drew on game engine practices, where teams target different hardware and aim to render at 60 frames per second, or about 16 milliseconds per frame. Its engine organizes rendering around scene trees and views, with platform bridges for shared services.
UI TV launched its React Native interface with engine version 5.0 on August 28, 2018, and continued monthly releases. It also built an optional After Effects plugin for designers, using Protocol Buffers to serialize and compress designs. The team recommends measuring bottlenecks: profiling revealed a background image that used 20 MB on the GPU, which they reduced to 100 KB.
Because Roku requires BrightScript and does not offer the usual C++ route, UI TV ran the React Native app in the cloud and sent a higher-level scene graph to a Roku thin client. The client rendered interface elements locally, avoiding streamed pixels and reducing interaction latency. Custom JSX tags also let developers connect React Native business logic to After Effects layouts and animations.
Takeaways
- A C++ engine can provide a shared rendering foundation while React Native gives app developers a familiar JavaScript interface.
- Inspect the framework’s existing native components, such as its bridge and layout system, before designing an integration.
- Targeting many platforms means accounting for differences in hardware, SDKs, rendering APIs, and JavaScript engines.
- Profile before optimizing: UI TV traced a large GPU memory cost to a background gradient and cut it from 20 MB to 100 KB.
- For platforms without native C++ support, a local thin client can render a higher-level UI model sent from a cloud-hosted app.
Mentioned in this talk
Search inside this talk
What was claimed 11
- role atErik Uggeldahl is developer relations manager at UI TV
“our developer relations manager”
YouTube Unverified1 source· Talk
- role atAndrew Emmons is CTO at UI TV
“I'm the CTO of UI TV”
YouTube Unverified1 source· Talk
- built
“we help them do that with a C++ engine”
YouTube Unverified1 source· Talk
- featureUI TV: renders interfaces across platforms using a common codebaserenders interfaces across platforms using a common codebase
“a unified UI across any platform, with a common codebase”
YouTube Unverified1 source· Talk
- integrates withUI TV integrates with React Native
“we started looking at React Native”
YouTube Unverified1 source· Talk
- integrates with
“we had the Flex engine interacting with our system”
YouTube Unverified1 source· Talk
- uses
“Folly Dynamic, a dynamic data type implemented in C++”
YouTube Unverified1 source· Talk
- launchedUI TV launched React NativeUI TV React Native interface with engine version 5.0
“We launched the React Native interface with our 5.0 engine on August 28, 2018”
YouTube Unverified1 source· Talk









