# Flutter Engine

> [!Important]
> This repostiory is archived. The engine was migrated to [flutter/flutter/engine](https://github.com/flutter/flutter/tree/master/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).
