# Flutter Engine

[![Flutter CI Status](https://flutter-dashboard.appspot.com/api/public/build-status-badge?repo=engine)](https://flutter-dashboard.appspot.com/#/build?repo=engine)

Flutter is Google's SDK for crafting beautiful, fast user experiences for
mobile, web, and desktop from a single codebase. Flutter works with existing
code, is used by developers and organizations around the world, and is free
and open source.

The Flutter Engine is a portable runtime for hosting
[Flutter](https://flutter.dev) 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 compile
toolchain. Most developers will interact with Flutter via the [Flutter
Framework](https://github.com/flutter/flutter), which provides a modern,
reactive framework, and a rich set of platform, layout and foundation widgets.

If you want to run/contribute to Flutter Web engine, more tooling can be
found at [felt](https://github.com/flutter/engine/tree/main/lib/web_ui#using-felt).
This is a tool written to make web engine development experience easy.

If you are new to Flutter, then you will find more general information
on the Flutter project, including tutorials and samples, on our Web
site at [Flutter.dev](https://flutter.dev). For specific information
about Flutter's APIs, consider our API reference which can be found at
the [docs.flutter.dev](https://docs.flutter.dev/).

Flutter is a fully open source project, and we welcome contributions.
Information on how to get started can be found at our
[contributor guide](CONTRIBUTING.md).
