Skip to content
Blog

Extending Flutter Beyond Desktop and Mobile: Out-of-Tree Embedders and Custom Platforms

How Flutter Engine Embedder API allows developers to bring Flutter to custom hardware, TV OSs, automotive dashboards, and IoT devices.

Published on • October 24, 2026

RedLineSoft Team

While Flutter officially targets six main operating systems — iOS, Android, Web, Windows, macOS, and Linux — the underlying Flutter Engine is modular and platform-agnostic. Through its C-based Embedder API, developers and hardware vendors can run Flutter on “out-of-tree” targets.

From automotive infotainment systems (Toyota RAV4) to smart TVs (LG webOS) and embedded Linux industrial controllers, out-of-tree embedders expand Flutter’s reach across the hardware ecosystem.

Anatomy of the Flutter Engine Architecture

Flutter’s architecture is divided into three distinct layers:

  1. Framework Layer (Dart): High-level UI widgets, rendering pipelines, gestures, animations, and state management.
  2. Engine Layer (C/C++): Impeller/Skia rendering, Dart runtime, text layout (LibTxt/HarfBuzz), event loop, and platform view channels.
  3. Embedder Layer (Platform Specific): Platform entry points, surface setup (EGL, Vulkan, Metal, Direct3D), input dispatching (touch, mouse, CAN bus), and accessibility integrations.
+-------------------------------------------------------------+
|             Flutter Framework (Dart Code)                   |
+-------------------------------------------------------------+
                               | (Engine Bindings)
+-------------------------------------------------------------+
|          Flutter Engine (C/C++ Rendering & Dart VM)         |
+-------------------------------------------------------------+
                               | (C Embedder API)
+-------------------------------------------------------------+
|   Custom Embedder (Toyota / LG webOS / Raspberry Pi / QNX)  |
+-------------------------------------------------------------+

How Out-of-Tree Embedders Work

To create an out-of-tree embedder for custom embedded hardware (e.g. Raspberry Pi, QNX, or custom Linux DRM/KMS boards), the embedder implements the C-based FlutterEngine API:

1. Rendering Surface Provider

The embedder creates an OpenGL ES context or Vulkan surface and passes render function callbacks to the Flutter Engine (FlutterRendererConfig):

// C Embedder initialization callback for OpenGL ES rendering
FlutterRendererConfig config = {};
config.type = kOpenGL;
config.open_gl.struct_size = sizeof(FlutterOpenGLRendererConfig);
config.open_gl.make_current = OnMakeCurrent;
config.open_gl.clear_current = OnClearCurrent;
config.open_gl.present = OnPresent;
config.open_gl.fbo_callback = OnGetFBO;

2. Input Event Dispatching

Hardware touch screen controllers or keyboard drivers emit input events to the engine using FlutterPointerEvent:

FlutterPointerEvent event = {};
event.struct_size = sizeof(FlutterPointerEvent);
event.phase = kDown;
event.x = touch_x;
event.y = touch_y;
event.timestamp = GetMicroseconds();

FlutterEngineSendPointerEvent(engine, &event, 1);

3. Task Runner Loop

The embedder schedules main isolate task execution on the host OS thread manager.

Real-World Out-of-Tree Success Stories

  • Toyota Automotive: Powers dashboard head units and digital instrument clusters in vehicles.
  • LG webOS: Powers smart TV application UIs with TV remote navigation.
  • Canonical Ubuntu Embedded: Powers custom Linux IoT interfaces.

Conclusion

The C Embedder API provides the flexibility needed to port Flutter’s modern UI capabilities to any hardware architecture with graphics and input drivers.

References & Further Reading