# Frequently Asked Questions

* How do I enable Impeller to try it out myself?
  * See the instructions in the README on how to [try Impeller in
    Flutter](https://github.com/flutter/engine/tree/main/impeller#try-impeller-in-flutter).
  * Support on some platforms is further along than on others. The current
    priority for the team is to support iOS, Android, Desktops, and Embedder API
    users (in that rough order).
* I am running into issues when Impeller is enabled, how do I report them?
  * Like any other Flutter issue, you can report them on the [GitHub issue
    tracker](https://github.com/flutter/flutter/issues/new/choose).
  * Please explicitly mention that this is an Impeller specific regression. You
    can quickly swap between the Impeller and Skia backends using the command
    line flag flag detailed in [section in the README on how to try
    Impeller](https://github.com/flutter/engine/tree/main/impeller#try-impeller-in-flutter).
  * Reduced test cases are the most useful.
  * Please also report any performance regressions.
* What does it mean for an Impeller platform to be "in preview". How long will
  be the preview last?
  * The team is focused on getting one platform right at a time. This includes
    ensuring all fidelity issues are fixed, performance issues addressed, and
    compatibility with plugins guaranteed.
  * When the team believes that the majority of Flutter applications will
    benefit from Impeller on a specific platform, the backend will be declared
    to be in preview.
  * During the preview, Flutter developers will need to opt in to using
    Impeller.
  * The top priority of the team will be to address issues reported by
    developers opting into the preview. The team wants the preview phase for a
    platform to be as short as possible.
  * Once major issues reported by platforms in preview become manageable, the
    preview ends and Impeller becomes the default rendering backend.
  * Besides working on fixing issues reported on platforms in preview, and
    working on supporting additional platforms, the team is also undertaking a
    high-touch exercise of migrating large existing Flutter applications to use
    Impeller. The team will find and fix any issues it encounters during this
    exercise.
  * The length of the preview will depend on the number and nature of the issues
    filed by developers and discovered by the team.
  * Even once the preview ends, the developer can opt into the legacy rendering
    backend for a short period of time. The legacy backend will be removed after
    this period.
* What can I expect when I opt in to using Impeller?
  * A high level overview of the status of project is [present on the
    wiki](https://github.com/flutter/flutter/wiki/Impeller#status).
  * All Impeller related work items are tracked on a [project specific dashboard
    on GitHub](https://github.com/orgs/flutter/projects/21).
  * The team tracks known platform specific issues in their own milestones:
    * [iOS](https://github.com/flutter/flutter/milestone/77)
    * [Android](https://github.com/flutter/flutter/milestone/76)
* Does Impeller use Skia for rendering?
  * No. Impeller has no direct dependencies on Skia.
  * When running with Impeller, Flutter does not create a Skia graphics context.
  * However, while Impeller still performs text rendering, text layout and
    shaping needs to be done by a separate component. This component happens to
    be SkParagraph which is part of Skia.
  * Similarly, Impeller does not perform image decompression. Flutter uses a
    standard set of codecs wrapped by Skia before querying the system supplied
    image formats.
  * So, while Impeller does not use nor is a wrapper for Skia, some Skia
    components are still used by Flutter when rendering using Impeller.
* Is Impeller going to be supported on the Web?
  * The current priority for Impeller is to be amazing on all platforms targeted
    by the C++ engine. This includes iOS, Android, desktops, and, all Embedder
    API users. This would be by building Metal, Open GL, Open GL ES, and, Vulkan
    rendering backends.
  * The Open GL ES backend ought to work fine to target WebGL/WebGL2 and the
    team can fix any issues found in such uses of the backend.
  * However, in Flutter, Impeller sits behind the Display List interface in the
    C++ engine. Display lists apply optimizations to the Flutter rendering
    intent. But, more importantly for Impeller, they also provide a generic
    interface with the ability to specify "dispatchers" to different rendering
    packages. Today, the engine has Skia and Impeller dispatchers for display
    lists.
  * The web engine is unique in that it doesn't use any C++ engine components.
    This includes the display lists mechanism. Instead, it interfaces directly
    with Skia via the CanvasKit package.
  * Updating the web engine to interface directly with Impeller is a non-goal at
    this time. It is a significant undertaking (compared to a flag to swap
    dispatchers that already exists) and also bypasses display list
    optimizations.
  * For this added implementation complexity, Web support has not been a
    priority at this time for the small team working on Impeller.
  * We are aware that these priorities might change in the future. There have
    been sanity checks to ensure that the Impeller API can be ported to WASM and
    also that Impeller shaders can be [compiled to
    WGSL](https://github.com/chinmaygarde/wgsl_sandbox) for eventual WebGPU
    support.
* How will Impeller affect the way in which Flutter applications are created and
  packaged?
  * It won't.
  * Impeller, like Skia, is an implementation detail of the Flutter Engine.
    Using a different rendering package will not affect the way in which the
    Flutter Engine is used.
  * Like with Skia today, none of Impellers symbols will be exposed from the
    Flutter Engine dynamic library.
  * The binary size overhead of Impeller is around 100 KB per architecture. This
    includes all precompiled shaders.
  * Impeller is compiled into the Flutter engine. It is currently behind a flag
    as development progresses.
* How do you run `impeller_unittests` with Playgrounds enabled?
  * Specify the `--enable_playground` command-line option.
