Chris Bracken edited this page Apr 13, 2018 · 12 revisions

Welcome to the Flutter engine wiki!

Flutter combines a Dart framework with a high-performance engine. This repository is where we develop Flutter's engine.

The Flutter Engine is a portable runtime for high-quality mobile applications. It implements Flutter's core libraries, including animation and graphics, file and network I/O, accessibility support, plugin architecture, and a Dart runtime and toolchain for developing, compiling, and running Flutter applications.

The links to the right list pages with information about the Engine and our engineering processes.

Architecture notes

Flutter's engine takes core technologies, Skia, a 2D graphics rendering library, and Dart, a VM for a garbage-collected object-oriented language, and hosts them in a shell. Different platforms have different shells, for example we have shells for Android and iOS. We also have an embedder API which allows Flutter's engine to be used as a library.

The shells implement platform-specific code such as communicating with IMEs (on-screen keyboards) and the system's application lifecycle events.

The Dart VM implements the normal Dart core libraries, plus an additional library called dart:ui to provide low-level access to Skia features and the shell. The shells can also communicate directly to Dart code via Platform Channels which bypass the engine.

Flutter has several threads; see threading in the Flutter Engine for details.

Text rendering

Our text rendering stack is as follows:

  • A minikin derivative we call libtxt (font selection, bidi, line breaking).
  • HarfBuzz (glyph selection, shaping).
  • Skia (rendering/GPU back-end), which uses FreeType for font rendering on Android and Fuchsia, and CoreGraphics for font rendering on iOS.

Architecture Diagram

Flutter Architecture Diagram

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.