From 2d77ad52d8e4af75d576d8b5267a38005f004e64 Mon Sep 17 00:00:00 2001 From: "Shams Zakhour (ignore Sfshaza)" Date: Tue, 18 Aug 2026 15:48:25 -0700 Subject: [PATCH 01/14] An update of the FAQ - a first draft --- sites/docs/src/content/resources/faq.md | 1241 ++++++++--------------- 1 file changed, 401 insertions(+), 840 deletions(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index caa1f263e3..8066ee637c 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -6,167 +6,133 @@ showBreadcrumbs: false ## Introduction -This page collects some common questions asked about -Flutter. You might also check out the following -specialized FAQs: +This page collects common questions about Flutter. +You can also check out the following specialized FAQs: * [Web FAQ][] * [Performance FAQ][] -[Web FAQ]: /platform-integration/web/faq [Performance FAQ]: /perf/faq +[Web FAQ]: /platform-integration/web/faq ### What is Flutter? -Flutter is Google's portable UI toolkit for crafting beautiful, -natively compiled applications for mobile, web, -and desktop from a single codebase. +Flutter is Google's open source framework +for crafting beautiful, natively compiled applications +for mobile (iOS, Android), web, desktop (macOS, Windows, Linux), +and embedded devices from a single codebase. Flutter works with existing code, -is used by developers and organizations around -the world, and is free and open source. +is used by developers and organizations worldwide, +and is free and open source. ### Who is Flutter for? -For users, Flutter makes beautiful apps come to life. - -For developers, Flutter lowers the bar to entry for building apps. -It speeds app development and reduces the cost and complexity -of app production across platforms. +For developers, Flutter accelerates app development +and reduces the cost and complexity of building across platforms. -For designers, Flutter provides a canvas for -high-end user experiences. Fast Company described -Flutter as [one of the top design ideas of the decade][] for -its ability to turn concepts into production code -without the compromises imposed by typical frameworks. -It also acts as a productive prototyping tool -with drag-and-drop tools like [FlutterFlow][] -and web-based IDEs like [Zapp!][]. +For designers, Flutter provides a flexible canvas +for high-end user experiences. +It turns concepts into production code +without the compromises imposed by traditional cross-platform frameworks. For engineering managers and businesses, -Flutter allows the unification of app -developers into a single _mobile, web, -and desktop app team_, building branded -apps for multiple platforms out of a single codebase. -Flutter speeds feature development and synchronizes -release schedules across the entire customer base. - -[FlutterFlow]: https://flutterflow.io/ -[Zapp!]: https://zapp.run/ -[one of the top design ideas of the decade]: https://www.fastcompany.com/90442092/the-14-most-important-design-ideas-of-the-decade-according-to-the-experts +Flutter enables the unification of app developers into a single team, +building branded apps for multiple platforms from a single codebase. +Flutter speeds feature development and synchronizes release schedules +across your customer base. ### How much development experience do I need to use Flutter? -Flutter is approachable to programmers familiar with -object-oriented concepts (classes, methods, variables, -etc) and imperative programming concepts (loops, -conditionals, etc). - -We have seen people with very little programming -experience learn and use Flutter for prototyping -and app development. +Flutter is approachable to programmers familiar with object-oriented +and imperative or declarative programming concepts. +Experience with languages such as Java, Kotlin, Swift, TypeScript, +or C# helps you learn Dart and Flutter quickly. ### What kinds of apps can I build with Flutter? -Flutter is designed to support mobile apps that run -on both Android and iOS, as well as interactive apps -that you want to run on your web pages or on the desktop. +Flutter supports building mobile apps on Android and iOS, +web applications, desktop apps on macOS, Windows, and Linux, +and embedded device interfaces. -Apps that need to deliver highly branded designs -are particularly well suited for Flutter. -However, you can also create pixel-perfect experiences -that match the Android and iOS design languages with Flutter. +Apps that require custom, branded designs are well suited for Flutter. +You can also create pixel-perfect experiences that match +Android's Material Design and iOS's Cupertino design languages. -Flutter's [package ecosystem][] supports a wide -variety of hardware (such as camera, GPS, network, -and storage) and services (such as payments, cloud -storage, authentication, and [ads][]). +Flutter's [package ecosystem][] on pub.dev supports a wide variety of hardware +(such as camera, GPS, Bluetooth, network, and local storage) +and cloud services (such as authentication, notifications, payments, and storage). -[ads]: {{site.main-url}}/monetization [package ecosystem]: {{site.pub}}/flutter ### Who makes Flutter? -Flutter is an open source project, -with contributions from Google and other -companies and individuals. +Flutter is an open source project managed by Google, +with contributions from a global community of developers, +companies, and individuals. ### Who uses Flutter? -Developers inside and outside of Google use -Flutter to build beautiful natively-compiled -apps for iOS and Android. To learn about some -of these apps, visit the [showcase][]. +Developers and organizations worldwide use Flutter to build +natively compiled applications. +To explore apps built with Flutter, visit the [showcase][]. [showcase]: {{site.main-url}}/showcase ### What makes Flutter unique? -Flutter is different than most other options -for building mobile apps because it doesn't rely -on web browser technology nor the set of widgets -that ship with each device. Instead, Flutter uses -its own high-performance rendering engine to draw widgets. - -In addition, Flutter is different because it only -has a thin layer of C/C++ code. Flutter implements -most of its system (compositing, gestures, animation, -framework, widgets, etc) in [Dart][] (a modern, -concise, object-oriented language) that developers -can easily approach read, change, replace, or remove. -This gives developers tremendous control over the system, -as well as significantly lowers the bar to approachability -for the majority of the system. +Flutter differs from most cross-platform alternatives +because it does not rely on web browser views +or system-provided platform widgets. +Instead, Flutter renders its UI using its own high-performance +rendering engine ([Impeller][]). + +In addition, Flutter implements most of its framework +(including compositing, gestures, animation, and widgets) in [Dart][]. +This architecture gives you deep control over the UI, +high predictability, and the ability to inspect or modify +the framework at any level. [Dart]: {{site.dart-site}}/ +[Impeller]: /perf/impeller ### Should I build my next production app with Flutter? -[Flutter 1][] was launched on Dec 4th, 2018, -[Flutter 2][] on March 3rd, 2021, and -[Flutter 3][] on May 10th, 2023. -As of May 2023, over _one million_ apps have shipped using -Flutter to many hundreds of millions of devices. -Check out some sample apps in the [showcase][]. - -Flutter ships updates on a roughly-quarterly -cadence that improve stability and performance -and address commonly-requested user features. +Yes. Thousands of organizations, from early-stage startups +to large enterprises, deploy production Flutter apps +to hundreds of millions of users. +Explore real-world examples in the [showcase][]. -[Flutter 1]: {{site.google-blog}}/2018/12/flutter-10-googles-portable-ui-toolkit.html -[Flutter 2]: {{site.google-blog}}/2021/03/announcing-flutter-2.html -[Flutter 3]: {{site.google-blog}}/flutter/introducing-flutter-3-5eb69151622f +Flutter releases updates on a regular cadence, +bringing performance improvements, new features, +and platform updates to the stable channel. ## What does Flutter provide? ### What is inside the Flutter SDK? -Flutter includes: +The Flutter SDK includes: -* Heavily optimized, mobile-first 2D rendering engine - with excellent support for text -* Modern react-style framework -* Rich set of widgets implementing Material Design and iOS-style -* APIs for unit and integration tests -* Interop and plugin APIs to connect to the system and 3rd-party SDKs -* Headless test runner for running tests on Windows, Linux, and Mac -* [Flutter DevTools][] (also called Dart DevTools) - for testing, debugging, and profiling your app -* Command-line tools for creating, building, testing, and - compiling your apps +* High-performance 2D rendering engine ([Impeller][]) +* Modern, reactive framework written in Dart +* Rich set of widgets implementing Material Design 3 and Cupertino (iOS-style) +* APIs for unit, widget, and integration tests +* Interop and plugin APIs to connect to system features and native SDKs +* Headless test runner for running tests on Windows, Linux, and macOS +* [Flutter DevTools][] for profiling, debugging, and inspecting your app +* Command-line tools for creating, building, testing, and compiling apps + +[Flutter DevTools]: /tools/devtools ### Does Flutter work with any editors or IDEs? -We provide plugins for [VS Code][], -[Antigravity][] (an AI-assisted IDE), -[Android Studio][], and [IntelliJ IDEA][]. +Flutter provides plugins and extensions for [VS Code][], +[Antigravity][] (an AI-assisted IDE), [Android Studio][], +and [IntelliJ IDEA][]. See [editor configuration][] for setup details, -and [VS Code][] and [Android Studio/IntelliJ][] -for tips on how to use the plugins. - -Alternatively, you can use the `flutter` command -from a terminal, along with one -of the many editors that support [editing Dart][]. +and [VS Code][] and [Android Studio/IntelliJ][] for usage guidance. +You can also run the `flutter` command from a terminal +along with any editor that supports [editing Dart][]. [Android Studio]: {{site.android-dev}}/studio [Android Studio/IntelliJ]: /tools/android-studio @@ -178,640 +144,408 @@ of the many editors that support [editing Dart][]. ### Does Flutter come with a framework? -Yes! Flutter ships with a modern react-style framework. -Flutter's framework is designed to be layered and -customizable (and optional). Developers can choose to -use only parts of the framework, or even replace -upper layers of the framework entirely. +Yes. Flutter includes a modern, reactive framework. +The framework is layered and customizable, +allowing you to use high-level widgets or interact directly +with lower layers of the rendering pipeline. ### Does Flutter come with widgets? -Yes! Flutter ships with a set of -[high-quality Material Design and Cupertino -(iOS-style) widgets][widgets], layouts, and themes. -Of course, these widgets are only a starting point. -Flutter is designed to make it easy to create your own -widgets, or customize the existing widgets. +Yes. Flutter ships with a collection of high-quality +[Material Design and Cupertino (iOS-style) widgets][widgets], +layouts, and themes. +You can use these widgets as provided, +customize them, or create custom widgets. [widgets]: /ui/widgets ### Does Flutter support Material Design? -Yes! The Flutter and Material teams collaborate closely, -and Material is fully supported. For more information, -check out the Material 2 and Material 3 widgets -in the [widget catalog][]. +Yes. Flutter provides full support for [Material Design 3][widget catalog], +Google's design system. [widget catalog]: /ui/widgets/material ### Does Flutter come with a testing framework? -Yes, Flutter provides APIs for writing unit and -integration tests. Learn more about [testing with Flutter][]. - -We use our own testing capabilities to test our SDK, -and we measure our [test coverage][] on every commit. +Yes. Flutter provides built-in support for unit, widget, +and integration testing. +To learn more, see [Testing overview][]. -[test coverage]: https://coveralls.io/github/flutter/flutter?branch=master -[testing with Flutter]: /testing/overview +[Testing overview]: /testing/overview ### Does Flutter come with debugging tools? -Yes, Flutter comes with [Flutter DevTools][] (also -called Dart DevTools). For more information, see -[Debugging with Flutter][] and the [Flutter DevTools][] docs. +Yes. Flutter includes [Flutter DevTools][]. +For more information, see [Debugging Flutter apps][] +and the [Flutter DevTools][] documentation. -[Debugging with Flutter]: /testing/debugging -[Flutter DevTools]: /tools/devtools +[Debugging Flutter apps]: /testing/debugging ### Does Flutter come with a dependency injection framework? -We don't ship with an opinionated solution, -but there are a variety of packages that offer -dependency injection and service location, -such as [injectable][], [get_it][], [kiwi][], and [riverpod][]. - +Flutter does not require an opinionated dependency injection framework. +The Flutter ecosystem offers several packages for dependency injection +and service location, such as [Riverpod][], [get_it][], +[Provider][], and [injectable][]. [get_it]: {{site.pub}}/packages/get_it [injectable]: {{site.pub}}/packages/injectable -[kiwi]: {{site.pub}}/packages/kiwi -[riverpod]: {{site.pub}}/packages/riverpod +[Provider]: {{site.pub}}/packages/provider +[Riverpod]: {{site.pub}}/packages/riverpod ## Technology ### What technology is Flutter built with? -Flutter is built with C, C++, Dart, -Skia (a 2D rendering engine), -and [Impeller][] (the default rendering engine on iOS). -See this [architecture diagram][] -for a better picture of the main components. -For a more detailed description of the layered architecture -of Flutter, read the [architectural overview][]. +Flutter is built with C, C++, and Dart. +It uses [Impeller][] as its default rendering engine, +taking advantage of modern graphics APIs such as Metal on iOS and macOS, +and Vulkan on Android. +For a detailed description of Flutter's layered architecture, +read the [architectural overview][]. [architectural overview]: /resources/architectural-overview -[architecture diagram]: https://docs.google.com/presentation/d/1cw7A4HbvM_Abv320rVgPVGiUP2msVs7tfGbkgdrTy0I/edit#slide=id.gbb3c3233b_0_162 -[Impeller]: /perf/impeller ### How does Flutter run my code on Android? {:#run-android} -The engine's C and C++ code are compiled with Android's NDK. -The Dart code (both the SDK's and yours) -are ahead-of-time (AOT) compiled into native, ARM, and x86-64 -libraries. Those libraries are included in a "runner" -Android project, and the whole thing is built into an `.apk`. -When launched, the app loads the Flutter library. -Any rendering, input, or event handling, and so on, -is delegated to the compiled Flutter and app code. -This is similar to the way many game engines work. - -During debug mode, Flutter uses a virtual machine (VM) -to run its code in order to enable stateful hot reload, -a feature that lets you make changes to your running code -without recompilation. You'll see a "debug" banner in -the top right-hand corner of your app when running in this mode, -to remind you that performance is not characteristic of -the finished release app. +The engine's C and C++ code is compiled using Android's NDK. +The Dart code (both the framework and your application code) +is ahead-of-time (AOT) compiled into native ARM and x86-64 machine code. +These libraries are packaged into a runner Android project +and built into an APK or Android App Bundle (AAB). +When launched, the app loads the Flutter engine, +which executes the compiled code and renders the UI. + +During debug mode, Flutter runs inside the Dart VM +to enable stateful [hot reload][], +allowing you to make changes to your running code without recompiling. +A "debug" banner in the top right corner indicates +that the app is running in debug mode. ### How does Flutter run my code on iOS? {:#run-ios} -The engine's C and C++ code are compiled with LLVM. -The Dart code (both the SDK's and yours) -are ahead-of-time (AOT) compiled into a native, ARM library. -That library is included in a "runner" iOS project, -and the whole thing is built into an `.ipa`. -When launched, the app loads the Flutter library. -Any rendering, input or event handling, and so on, -are delegated to the compiled Flutter and app code. -This is similar to the way many game engines work. - -During debug mode, Flutter uses a virtual machine (VM) -to run its code in order to enable stateful hot reload, -a feature that lets you make changes to your -running code without recompilation. You'll see -a "debug" banner in the top right-hand corner of -your app when running in this mode, to remind you that -performance is not characteristic of the finished release app. +The engine's C and C++ code is compiled with LLVM. +The Dart code (both the framework and your application code) +is ahead-of-time (AOT) compiled into native ARM machine code. +The compiled code is packaged into a runner iOS project +and built into an `.ipa` bundle. +When launched, the app loads the Flutter engine, +which executes the compiled code and renders the UI using Impeller. + +During debug mode, Flutter runs inside the Dart VM +to enable stateful [hot reload][]. +A "debug" banner in the top right corner indicates +that the app is running in debug mode. ### Does Flutter use my operating system's built-in platform widgets? -No. Instead, Flutter provides a set of widgets -(including Material Design and Cupertino (iOS-styled) widgets), -managed and rendered by Flutter's framework and engine. -You can browse a [catalog of Flutter's widgets][]. - -We believe that the end result is higher quality apps. -If we reused the built-in platform widgets, -the quality and performance of Flutter apps would be limited -by the flexibility and quality of those widgets. - -In Android, for example, there's a hard-coded set -of gestures and fixed rules for disambiguating them. -In Flutter, you can write your own gesture recognizer -that is a first class participant in the [gesture system][]. -Moreover, two widgets authored by different people can -coordinate to disambiguate gestures. - -Modern app design trends point towards designers and -users wanting more motion-rich UIs and brand-first designs. -In order to achieve that level of customized, beautiful design, -Flutter is architectured to drive pixels instead -of the built-in widgets. - -By using the same renderer, framework, and set of widgets, -it's easier to publish for multiple platforms from the same -codebase, without having to do careful and costly planning -to align different feature sets and API characteristics. - -By using a single language, a single framework, -and a single set of libraries for all of your code -(regardless if your UI is different for each platform or not), -we also aim to help lower app development and maintenance costs. +No. Instead, Flutter renders widgets directly using its own engine, +providing implementations of Material Design and Cupertino (iOS-style) widgets. +You can explore the available widgets in the [widget catalog][catalog of Flutter's widgets]. + +By rendering pixels directly, Flutter avoids the performance constraints +and behavioral differences of platform widget abstractions. +This approach delivers consistent performance and appearance across platforms. + +For cases where you need a platform-native component +(such as Google Maps or a web view), +Flutter supports embedding [platform views][] directly into the widget tree. [catalog of Flutter's widgets]: /ui/widgets -[gesture system]: /ui/interactivity/gestures +[platform views]: /platform-integration/platform-views ### What happens when my mobile OS updates and introduces new widgets? -The Flutter team watches the adoption and demand for new mobile -widgets from iOS and Android, and aims to work with the community -to build support for new widgets. This work might come in the form -of lower-level framework features, new composable widgets, -or new widget implementations. - -Flutter's layered architecture is designed to support numerous -widget libraries, and we encourage and support the community in -building and maintaining widget libraries. +The Flutter team and community track new design guidelines +and platform widgets from Apple and Google, +updating Flutter's widget libraries accordingly. +Because Flutter widgets are written in Dart, +you can also build or adapt widgets immediately +without waiting for an OS or SDK update. ### What happens when my mobile OS updates and introduces new platform capabilities? -Flutter's interop and plugin system is designed to allow -developers to access new mobile OS features and capabilities -immediately. Developers don't have to wait for the Flutter team -to expose the new mobile OS capability. +Flutter's plugin architecture, [platform channels][], +and native interop tools (such as Dart FFI, `ffigen`, and `jnigen`) +allow you to access new OS APIs immediately. +You do not need to wait for a Flutter SDK release to integrate new platform capabilities. + +[platform channels]: /platform-integration/platform-channels ### Does Flutter support code push? -Code push, or the ability to push app updates directly to a -user's device, isn't directly supported by Flutter. -However, we are aware of a third party solution, -called [Shorebird][]. -Note that this is not an official endorsement or recommendation. +Flutter does not provide built-in code push functionality. +Third-party solutions, such as [Shorebird][], +provide code push support for Flutter applications. [Shorebird]: https://shorebird.dev/ ### What operating systems can I use to build a Flutter app? -Flutter supports development using Linux, macOS, ChromeOS, -and Windows. +Flutter supports development on macOS, Windows, Linux, and ChromeOS. +For details on system requirements, see the [install guide][install]. + +[install]: /install ### What language is Flutter written in? -[Dart][], a fast-growing modern language optimized -for client apps. The underlying graphics framework -and the Dart virtual machine are implemented in C/C++. +The Flutter framework is written in [Dart][]. +The underlying engine and graphics pipeline are implemented in C and C++. ### Why did Flutter choose to use Dart? -During the initial development phase, -the Flutter team looked at a lot of -languages and runtimes, and ultimately -adopted Dart for the framework and widgets. -Flutter used four primary dimensions for evaluation, -and considered the needs of framework authors, -developers, and end users. We found many languages -met some requirements, but Dart scored highly on -all of our evaluation dimensions and met all our -requirements and criteria. - -Dart runtimes and compilers support the combination of -two critical features for Flutter: a JIT-based fast -development cycle that allows for shape changing and -stateful hot reloads in a language with types, -plus an Ahead-of-Time compiler that emits efficient -ARM code for fast startup and predictable performance of -production deployments. - -In addition, we have the opportunity to work closely -with the Dart community, which is actively investing -resources in improving Dart for use in Flutter. For -example, when we adopted Dart, -the language didn't have an ahead-of-time -toolchain for producing native binaries, -which is instrumental in achieving predictable, -high performance, but now the language does because the Dart team -built it for Flutter. Similarly, the Dart VM has -previously been optimized for throughput but the -team is now optimizing the VM for latency, which is more -important for Flutter's workload. - -Dart scores highly for us on the following primary criteria: +During initial development, the Flutter team evaluated multiple languages +and runtimes before selecting Dart for the framework and widgets. +Dart scored highest across several key evaluation criteria: _Developer productivity_ -: One of Flutter's main value propositions is that it - saves engineering resources by letting developers - create apps for both iOS and Android with the same codebase. - Using a highly productive language accelerates - developers further and makes Flutter more attractive. - This was very important to both our framework team as - well as our developers. The majority of Flutter - is built in the same language we give to our users, - so we need to stay productive at 100k's lines of code, - without sacrificing approachability or - readability of the framework and widgets for our developers. - -_Object-orientation_ -: For Flutter, we want a language that's suited to - Flutter's problem domain: creating visual user experiences. - The industry has multiple decades of experience building - user interface frameworks in object-oriented languages. - While we could use a non-object-oriented language, - this would mean reinventing the wheel to solve several - hard problems. Plus, the vast majority of developers - have experience with object-oriented development, - making it easier to learn how to develop with Flutter. - -_Predictable, high performance_ -: With Flutter, we want to empower developers to create fast, - fluid user experiences. In order to achieve that, we need to - be able to run a significant amount of end-developer code - during every animation frame. That means we need a language - that both delivers high performance and predictable - performance, without periodic pauses that would cause - dropped frames. - -_Fast allocation_ -: The Flutter framework uses a functional-style flow that - depends heavily on the underlying memory allocator - efficiently handling small, short-lived allocations. - This style was developed in languages with this - property and doesn't work efficiently in languages - that lack this facility. - -### Can Flutter run any Dart code? +: Dart supports both JIT (Just-in-Time) compilation for fast development + with stateful hot reload, and AOT (Ahead-of-Time) compilation + for efficient native machine code in production. + Because the framework is written in Dart, + developers can inspect, debug, and modify the entire stack. -Flutter can run Dart code that doesn't directly or -transitively import `dart:mirrors` or `dart:html`. +_Object orientation and UI composition_ +: Dart's object-oriented structure matches the requirements + of building composable user interfaces without requiring a separate markup language. -### Can Flutter compile Dart to JavaScript? - -Flutter compiles Dart to JavaScript with the -[`js.dart`][] package. +_Predictable, high performance_ +: Dart compiles directly to native machine code without an interpreter or bridge, + delivering consistent frame rates without unpredictable runtime pauses. -[`js.dart`]: {{site.dart-site}}/tools/dart-compile#js +_Fast memory allocation_ +: Flutter's reactive framework creates many short-lived objects. + Dart's generational garbage collector is optimized + for fast allocation and cleanup of ephemeral objects. -### How big is the Flutter engine? +### Can Flutter run any Dart code? -In March 2021, we measured the download size of a -[minimal Flutter app][] (no Material Components, -just a single `Center` widget, built with `flutter build -apk --split-per-abi`), bundled and compressed as a release APK, -to be approximately 4.3 MB for ARM32, and 4.8 MB for ARM64. +Flutter can run any Dart code that does not depend on libraries +unavailable on the target platform. +For example, mobile and desktop apps cannot import web-specific libraries, +and web apps cannot use `dart:io`. -On ARM32, the core engine is approximately 3.4 MB -(compressed), the framework + app code is approximately -765 KB (compressed), the LICENSE file is 58 KB -(compressed), and necessary Java code (`classes.dex`) -is 120 KB (compressed). +### How does Flutter compile for the web? -In ARM64, the core engine is approximately 4.0 MB -(compressed), the framework + app code is approximately -659 KB (compressed), the LICENSE file is 58 KB -(compressed), and necessary Java code (`classes.dex`) -is 120 KB (compressed). +Flutter compiles Dart for the web to both JavaScript and WebAssembly (Wasm). +WebAssembly compilation (WasmGC) delivers high-performance rendering +comparable to native desktop and mobile apps. +For details, see the [Flutter web documentation][web]. -These numbers were measured using [apkanalyzer][], -which is also [built into Android Studio][]. +[web]: /platform-integration/web -On iOS, a release IPA of the same app has a download -size of 10.9 MB on an iPhone X, as reported by Apple's -App Store Connect. The IPA is larger than the APK mainly -because Apple encrypts binaries within the IPA, making the -compression less efficient (see the -[iOS App Store Specific Considerations][] -section of Apple's [QA1795][]). +### How big is the Flutter engine? {:#how-big-is-the-flutter-engine} -Of course, we recommend that you measure your own app. -To do that, see [Measuring your app's size][]. +A minimal release Flutter application includes the Flutter engine, +the framework, and your application code. +The engine adds a small baseline footprint (a few megabytes compressed), +which varies by target platform and architecture. +App size is largely determined by bundled assets, fonts, +and third-party packages. +To analyze and minimize the size of your application, +see [Measuring your app's size][]. -[apkanalyzer]: {{site.android-dev}}/studio/command-line/apkanalyzer -[built into Android Studio]: {{site.android-dev}}/studio/build/apk-analyzer -[iOS App Store Specific Considerations]: {{site.apple-dev}}/library/archive/qa/qa1795/_index.html#//apple_ref/doc/uid/DTS40014195-CH1-APP_STORE_CONSIDERATIONS [Measuring your app's size]: /perf/app-size -[minimal Flutter app]: {{site.repo.flutter}}/tree/75228a59dacc24f617272f7759677e242bbf74ec/examples/hello_world -[QA1795]: {{site.apple-dev}}/library/archive/qa/qa1795/_index.html ### How does Flutter define a pixel? Flutter uses logical pixels, -and often refers to them merely as "pixels". -Flutter's [`devicePixelRatio`][] expresses the ratio -between physical pixels and logical CSS pixels. +which correspond roughly to physical pixels on a standard-density display. +Flutter automatically maps logical pixels to physical device pixels +based on the view's [`devicePixelRatio`][]. -[`devicePixelRatio`]: {{site.api}}/flutter/dart-html/Window/devicePixelRatio.html +[`devicePixelRatio`]: {{site.api}}/flutter/dart-ui/FlutterView/devicePixelRatio.html ## Capabilities ### What kind of app performance can I expect? -In general, you can expect excellent performance. Flutter is designed to help -developers easily achieve a constant 60fps. Flutter apps run using natively -compiled code, so no interpreters are involved. This means that Flutter apps -start quickly. - -Flutter's performance when using native code depends on your -[app's architecture][]. For optimal performance, familiarize yourself with Flutter's -[platform channels][]. These channels provide an asynchronous message-passing -system for communicating with native code. - -To learn more about performance and Flutter, see the [Performance FAQ][]. - -[platform channels]: /platform-integration/platform-channels -[app's architecture]: /app-architecture -[Performance FAQ]: /perf/faq +Flutter is designed to deliver smooth 60fps and 120fps animations. +Flutter apps compile directly to native machine code or WebAssembly, +eliminating interpreter overhead. +To learn more about performance optimization, see the [Performance FAQ][]. ### What kind of developer cycles can I expect? How long between edit and refresh? {:#hot-reload} -Flutter implements a _hot reload_ developer cycle. You can expect -sub-second reload times, on a device or an emulator/simulator. +Flutter implements a stateful _hot reload_ developer cycle. +You can expect sub-second reload times on physical devices, +emulators, and simulators. -Flutter's hot reload is _stateful_ so the app state -is retained after a reload. This means you can quickly iterate -on a screen deeply nested in your app, without starting -from the home screen after every reload. +Hot reload preserves your application state, +allowing you to iterate rapidly without navigating back +to the current screen after every code change. -### How is _hot reload_ different from _hot restart_? +### How is hot reload different from hot restart? -Hot reload works by injecting updated source code files -into the running Dart VM (Virtual Machine). This doesn't -only add new classes, but also adds methods and fields -to existing classes, and changes existing functions. -Hot restart resets the state to the app's initial state. +Hot reload injects updated source code files into the running Dart VM +without clearing the application state. +Hot restart resets the application state and re-executes `main()`, +which takes slightly longer than hot reload but remains faster +than a full recompile. For more information, see [Hot reload][]. - [Hot reload]: /tools/hot-reload ### Where can I deploy my Flutter app? -You can compile and deploy your Flutter app to iOS, Android, -[web][], and [desktop][]. - +You can compile and deploy Flutter apps to iOS, Android, +[web][], [desktop][] (macOS, Windows, Linux), and embedded devices. [desktop]: /platform-integration/desktop -[web]: /platform-integration/web - -### What devices and OS versions does Flutter run on? -* We support and test running Flutter on a variety - of low-end to high-end platforms. For a detailed list - of the platforms on which we test, see - the list of [supported platforms][]. +### What devices and OS versions does Flutter run on? {:#what-devices-and-os-versions-does-flutter-run-on} -* Flutter supports building ahead-of-time (AOT) compiled libraries - for `x86-64`, `armeabi-v7a`, and `arm64-v8a`. +Flutter supports a broad range of operating systems and hardware platforms: -* Apps built for ARMv7 or ARM64 run fine (using ARM emulation) - on many x86-64 Android devices. +* Mobile: Android (ARM32, ARM64, x86_64) and iOS (ARM64). +* Desktop: macOS (x86_64, ARM64), Windows (x86_64, ARM64), and Linux (x86_64, ARM64). +* Web: Modern browsers supporting WebAssembly or JavaScript. -* We support developing Flutter apps on a range of platforms. - See the system requirements listed under each - [development operating system][install]. +For the complete list of supported OS versions, +see [Supported platforms][]. - -[install]: /install -[supported platforms]: /reference/supported-platforms +[Supported platforms]: /reference/supported-platforms ### Does Flutter run on the web? -Yes, web support is available in the stable channel. -For more details, check out the [web instructions][]. - -[web instructions]: /platform-integration/web/building +Yes. Flutter web support is available on the stable channel +and supports compilation to both WebAssembly (Wasm) and JavaScript. +For more details, see [Web support for Flutter][web]. ### Can I use Flutter to build desktop apps? -Yes, desktop support is in stable for Windows, -macOS, and Linux. +Yes. Desktop support is available on the stable channel +for macOS, Windows, and Linux. +For details, see [Desktop support for Flutter][desktop]. ### Can I use Flutter inside of my existing native app? -Yes, learn more in the [add-to-app][] section of our website. +Yes. You can integrate Flutter into existing Android and iOS applications +using [Add-to-App][add-to-app]. [add-to-app]: /add-to-app ### Can I access platform services and APIs like sensors and local storage? -Yes. Flutter gives developers out-of-the-box access to _some_ -platform-specific services and APIs from the operating system. -However, we want to avoid the "lowest common denominator" problem -with most cross-platform APIs, so we don't intend to build -cross-platform APIs for all native services and APIs. +Yes. Flutter provides access to platform-specific APIs and hardware +through plugins available on [pub.dev][ready-made packages]. +You can also create custom integrations using [platform channels][] +or native interop (Dart FFI). -A number of platform services and APIs have -[ready-made packages][] available on pub.dev. -Using an existing package [is easy][]. - -Finally, we encourage developers to use Flutter's -asynchronous message passing system to create your -own integrations with [platform and third-party APIs][]. -Developers can expose as much or as little of the -platform APIs as they need, and build layers of -abstractions that are a best fit for their project. - - -[is easy]: /packages-and-plugins/using-packages -[platform and third-party APIs]: /platform-integration/platform-channels [ready-made packages]: {{site.pub}}/flutter/ ### Can I extend and customize the bundled widgets? -Absolutely. Flutter's widget system was designed -to be easily customizable. - -Rather than having each widget provide a large number of parameters, -Flutter embraces composition. Widgets are built out of smaller -widgets that you can reuse and combine in novel ways to make -custom widgets. For example, rather than subclassing a generic -button widget, `ElevatedButton` combines a Material widget with a -`GestureDetector` widget. The Material widget provides the visual -design and the `GestureDetector` widget provides the -interaction design. - -To create a button with a custom visual design, you can combine -widgets that implement your visual design with a `GestureDetector`, -which provides the interaction design. For example, -`CupertinoButton` follows this approach and combines a -`GestureDetector` with several other widgets that implement its -visual design. - -Composition gives you maximum control over the visual and -interaction design of your widgets while also allowing a -large amount of code reuse. In the framework, we've decomposed -complex widgets to pieces that separately implement -the visual, interaction, and motion design. You can remix -these widgets however you like to make your own custom -widgets that have full range of expression. +Yes. Flutter's widget system is built around composition. +Instead of subclassing complex widgets, +you compose smaller, single-purpose widgets to create custom designs. +This architecture provides control over layout, painting, +and gesture handling. ### Why would I want to share layout code across iOS and Android? -You can choose to implement different app layouts for -iOS and Android. Developers are free to check the mobile OS -at runtime and render different layouts, -though we find this practice to be rare. - -More and more, we see mobile app layouts and designs evolving -to be more brand-driven and unified across platforms. -This implies a strong motivation to share layout and UI -code across iOS and Android. - -The brand identity and customization of the app's -aesthetic design is now becoming more important than -strictly adhering to traditional platform aesthetics. -For example, app designs often require custom fonts, colors, -shapes, motion, and more in order to clearly convey their -brand identity. - -We also see common layout patterns deployed across -iOS and Android. For example, the "bottom nav bar" -pattern can now be naturally found across iOS and Android. -There seems to be a convergence of design ideas -across mobile platforms. +Sharing layout and UI code reduces engineering effort, +keeps feature releases synchronized, +and ensures a consistent brand experience across platforms. +When you want platform-specific behavior or styling, +you can adapt the UI using platform checks or responsive layouts. ### Can I interop with my mobile platform's default programming language? -Yes, Flutter supports calling into the platform, -including integrating with Java or Kotlin code on Android, -and Swift or Objective-C code on iOS. -This is enabled by a flexible message passing style -where a Flutter app might send and receive messages -to the mobile platform using a [`BasicMessageChannel`][]. - -Learn more about accessing platform and third-party services -in Flutter with [platform channels][]. - -Here is an [example project][] that shows how to use a -platform channel to access battery state information on -iOS and Android. +Yes. Flutter supports calling native code on all supported platforms: +* On Android: Kotlin and Java via [platform channels][] and [JNI interop][] (`jnigen`). +* On iOS and macOS: Swift and Objective-C via [platform channels][] and [Objective-C/Swift interop][] (`ffigen`). +* On desktop and mobile: C and C++ via Dart FFI ([`dart:ffi`][]). -[`BasicMessageChannel`]: {{site.api}}/flutter/services/BasicMessageChannel-class.html -[example project]: {{site.repo.flutter}}/tree/main/examples/platform_channel -[platform channels]: /platform-integration/platform-channels +[JNI interop]: {{site.dart-site}}/interop/java-interop +[Objective-C/Swift interop]: {{site.dart-site}}/interop/objective-c-interop +[`dart:ffi`]: {{site.dart-site}}/interop/c-interop ### Does Flutter come with a reflection / mirrors system? -No. Dart includes `dart:mirrors`, -which provides type reflection. But since -Flutter apps are pre-compiled for production, -and binary size is always a concern with mobile apps, -this library is unavailable for Flutter apps. - -Using static analysis we can strip out anything that isn't -used ("tree shaking"). If you import a huge Dart library -but only use a self-contained two-line method, -then you only pay the cost of the two-line method, -even if that Dart library itself imports dozens and -dozens of other libraries. This guarantee is only secure -if Dart can identify the code path at compile time. -To date, we've found other approaches for specific needs -that offer a better trade-off, such as code generation. +No. Dart disables `dart:mirrors` in Flutter to enable aggressive +ahead-of-time (AOT) compilation and dead-code elimination (tree shaking). +This keeps binary sizes small and startup times fast. +For metadata inspection and serialization, +Flutter applications use compile-time code generation. ### Are internationalization and localization supported? -Yes, Flutter supports internationalization (i18n) and localization (l10n) so -that your apps are adaptable to different languages and cultures. You can -learn more in the [internationalization documentation][]. +Yes. Flutter provides built-in internationalization (i18n) +and localization (l10n) support, +including pluralization, bidirectional text, and date formatting. +To learn more, see [Internationalizing Flutter apps][internationalization documentation]. [internationalization documentation]: /ui/internationalization ### What accessibility is supported? -Flutter supports strict accessibility requirements (a11y). For example, -screen readers, large text, color contrast, and hardware switch control are -all supported. To learn more, see the [accessibility documentation][]. +Flutter supports standard accessibility features (a11y), +including screen readers (TalkBack, VoiceOver), large text scaling, +high-contrast themes, and hardware switch access. +For details, see [Accessibility][accessibility documentation]. [accessibility documentation]: /ui/accessibility ### How do I write parallel and/or concurrent apps for Flutter? -Flutter supports isolates. Isolates are separate heaps in -Flutter's VM, and they are able to run in parallel -(usually implemented as separate threads). Isolates -communicate by sending and receiving asynchronous messages. - -Check out an [example of using isolates with Flutter][]. +Dart uses an event loop for asynchronous operations (`Future` and `Stream`). +For CPU-intensive tasks, Flutter supports isolates—isolated execution +threads with independent memory heaps that communicate through message passing. +You can use [`Isolate.run()`][] or the [`compute()`][] function +to run heavy computations in the background. -[example of using isolates with Flutter]: {{site.repo.flutter}}/blob/main/examples/layers/services/isolate.dart +[`Isolate.run()`]: {{site.api}}/flutter/dart-isolate/Isolate/run.html +[`compute()`]: {{site.api}}/flutter/foundation/compute-constant.html ### Can I run Dart code in the background of a Flutter app? -Yes, you can run Dart code in a background process on both -iOS and Android. For more information, see the Flutter blog post -[Executing Dart in the Background with Flutter Plugins and Geofencing][backgnd]. - -[backgnd]: {{site.flutter-blog}}/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124 +Yes. You can execute Dart code in background processes on Android and iOS +using background execution packages and platform service integrations. -### Can I use JSON/XML/Protobufs (and so on) with Flutter? +### Can I use JSON, XML, or Protocol Buffers with Flutter? -Absolutely. There are libraries on -[pub.dev][] for JSON, XML, protobufs, -and many other utilities and formats. - -For a detailed writeup on using JSON with Flutter, -check out the [JSON tutorial][]. +Yes. The Dart ecosystem provides packages on [pub.dev][] +for JSON serialization, XML parsing, Protocol Buffers, +and other data formats. +For details on working with JSON, see [JSON and serialization][JSON tutorial]. [JSON tutorial]: /data-and-backend/serialization/json [pub.dev]: {{site.pub}} -### Can I build 3D (OpenGL) apps with Flutter? +### Can I build 3D apps with Flutter? -Today we don't support 3D using OpenGL ES or similar. -We have long-term plans to expose an optimized 3D API, -but right now we're focused on 2D. +Yes. Flutter supports 3D graphics through Flutter GPU +and packages such as `flutter_scene`, +which use the Impeller rendering backend to draw 3D scenes. +You can also embed third-party 3D views (such as Unity or native 3D engines) +using platform views. ### Why is my APK or IPA so big? -Usually, assets including images, sound files, fonts, and so on, -are the bulk of an APK or IPA. Various tools in the -Android and iOS ecosystems can help you understand -what's inside of your APK or IPA. - -Also, be sure to create a _release build_ -of your APK or IPA with the Flutter tools. -A release build is usually _much_ smaller -than a _debug build_. - -Learn more about creating a -[release build of your Android app][], -and creating a [release build of your iOS app][]. -Also, check out [Measuring your app's size][]. - - -[release build of your Android app]: /deployment/android -[release build of your iOS app]: /deployment/ios - -### Do Flutter apps run on Chromebooks? - -We have seen Flutter apps run on some Chromebooks. -We are tracking [issues related to running Flutter on -Chromebooks][]. - -[issues related to running Flutter on Chromebooks]: {{site.repo.flutter}}/labels/platform-arc +App bundle size includes the Flutter engine, framework code, +application logic, and bundled assets (such as images, fonts, and audio). +Always create a release build (`flutter build apk` or `flutter build appbundle` +for Android, and `flutter build ipa` for iOS), +which removes debug symbols and enables compiler optimizations. +To analyze and reduce app size, see [Measuring your app's size][]. ### Is Flutter ABI compatible? -Flutter and Dart don't offer application binary interface (ABI) -compatibility. Offering ABI compatibility is not a current -goal for Flutter or Dart. +Flutter and Dart do not provide application binary interface (ABI) +compatibility across different compiler releases. +Always compile your application using matching SDK versions. ### How does Flutter handle scrolling? -A custom scrolling implementation is used for each app platform so that -scrolling matches that platform's native scrolling look and feel. To learn -more about scrolling with Flutter, see the [scrolling][] documentation. +Flutter provides platform-specific scroll physics +that match the native scrolling behavior of each platform +(such as momentum scrolling on iOS and overscroll stretch on Android). +For more details, see the [scrolling][] documentation. [scrolling]: /ui/layout/scrolling @@ -819,383 +553,210 @@ more about scrolling with Flutter, see the [scrolling][] documentation. ### Why is the build() method on State, rather than StatefulWidget? -Putting a `Widget build(BuildContext context)` method on `State` -rather putting a `Widget build(BuildContext context, State state)` -method on `StatefulWidget` gives developers more flexibility when -subclassing `StatefulWidget`. You can read a more -[detailed discussion on the API docs for `State.build`][]. +Placing the `Widget build(BuildContext context)` method on `State` +rather than `StatefulWidget` provides greater flexibility +when subclassing `StatefulWidget` and managing lifecycle state. +For a detailed explanation, see the [API documentation for `State.build`][]. -[detailed discussion on the API docs for `State.build`]: {{site.api}}/flutter/widgets/State/build.html +[API documentation for `State.build`]: {{site.api}}/flutter/widgets/State/build.html ### Where is Flutter's markup language? Why doesn't Flutter have a markup syntax? -Flutter UIs are built with an imperative, object-oriented -language (Dart, the same language used to build Flutter's -framework). Flutter doesn't ship with a declarative markup. - -We found that UIs dynamically built with code allow for -more flexibility. For example, we have found it difficult -for a rigid markup system to express and produce -customized widgets with bespoke behaviors. - -We have also found that our "code-first" approach better allows -for features like hot reload and dynamic environment adaptations. - -It's possible to create a custom language that is then -converted to widgets on the fly. Because build methods -are "just code", they can do anything, -including interpreting markup and turning it into widgets. - -### My app has a Debug banner/ribbon in the upper right. Why am I seeing that? +Flutter UIs are defined in Dart code rather than a declarative markup language. +Defining UI in code enables: -By default, the `flutter run` command uses the -debug build configuration. +* Fast development with stateful hot reload. +* Full access to programming language features (loops, conditionals, functions). +* Strong type safety and compiler checks. +* Easy refactoring and code reuse across widgets. -The debug configuration runs your Dart code in a VM (Virtual Machine) -enabling a fast development cycle with [hot reload][] -(release builds are compiled using the standard [Android][] -and [iOS][] toolchains). +Because build methods are standard code, +you can also create widgets dynamically from data or external configurations. -The debug configuration also checks all asserts, which helps -you catch errors early during development, but imposes a -runtime cost. The "Debug" banner indicates that these checks -are enabled. You can run your app without these checks by -using either the `--profile` or `--release` flag to `flutter run`. +### My app has a Debug banner in the upper right. Why am I seeing that? -If your IDE uses the Flutter plugin, -you can launch the app in profile or release mode. -For VS Code, use the **Run > Start debugging** -or **Run > Run without debugging** menu entries. -For IntelliJ, use the menu entries -**Run > Flutter Run in Profile Mode** or **Release Mode**. +By default, `flutter run` launches the app in debug mode. +The debug build configuration runs code inside the Dart VM +to enable stateful [hot reload][], +and enables runtime assertions to catch errors early. +The "Debug" banner indicates that these checks are active. +To run without assertions and with optimized performance, +run the app in release mode using `flutter run --release` +or build a release binary. -[Android]: #run-android -[hot reload]: #hot-reload -[iOS]: #run-ios +### What programming paradigm does Flutter's framework use? {:#what-programming-paradigm-does-flutters-framework-use} -### What programming paradigm does Flutter's framework use? - -Flutter is a multi-paradigm programming environment. -Many programming techniques developed over the past few decades -are used in Flutter. We use each one where we believe -the strengths of the technique make it particularly well-suited. -In no particular order: +Flutter uses a combination of programming paradigms, +applying each where it is most effective: **Composition** -: The primary paradigm used by Flutter is that of using - small objects with narrow scopes of behavior, composed together to - obtain more complicated effects, sometimes called - _aggressive composition_. Most widgets in the Flutter widget - library are built in this way. For example, the Material - [`TextButton`][] class is built using +: The primary paradigm in Flutter is composing small, + single-purpose widgets into complex user interfaces. + For example, the Material [`TextButton`][] widget is composed of an [`IconTheme`][], an [`InkWell`][], a [`Padding`][], a [`Center`][], a [`Material`][], an [`AnimatedDefaultTextStyle`][], and a [`ConstrainedBox`][]. - The [`InkWell`][] is built using a [`GestureDetector`][]. - The [`Material`][] is built using an - [`AnimatedDefaultTextStyle`][], - a [`NotificationListener`][], and an [`AnimatedPhysicalModel`][]. - And so on. It's widgets all the way down. **Functional programming** -: Entire applications can be built with only - [`StatelessWidget`][]s, which are essentially functions that - describe how arguments map to other functions, bottoming out - in primitives that compute layouts or paint graphics. - (Such applications can't easily have state, - so are typically non-interactive.) For example, the [`Icon`][] - widget is essentially a function that maps its arguments - ([`color`][], [`icon`][], [`size`][]) into layout primitives. - Additionally, heavy use is made of immutable data structures, - including the entire [`Widget`][] class - hierarchy as well as numerous supporting classes such as - [`Rect`][] and [`TextStyle`][]. On a smaller scale, Dart's - [`Iterable`][] API, which makes heavy use of the functional - style (map, reduce, where, etc), is frequently used to process - lists of values in the framework. +: Applications can define UI using [`StatelessWidget`][] instances, + which act as functions mapping configuration inputs to child widgets. + Flutter uses immutable data structures across its widget hierarchy, + including [`Widget`][], [`TextStyle`][], and [`Rect`][]. **Event-driven programming** : User interactions are represented by event objects - that are dispatched to callbacks registered with event handlers. - Screen updates are triggered by a similar callback mechanism. The - [`Listenable`][] class, which is used as the basis of the - animation system, formalizes a subscription model for events - with multiple listeners. + dispatched to callbacks registered on widgets. + Classes like [`Listenable`][] formalize event subscription models. **Class-based object-oriented programming** -: Most of the APIs of the framework are built using classes - with inheritance. We use an approach whereby we define - very high-level APIs in our base classes, then specialize - them iteratively in subclasses. For example, - our render objects have a base class ([`RenderObject`][]) - that is agnostic regarding the coordinate system, - and then we have a subclass ([`RenderBox`][]) - that introduces the opinion that the geometry should be based - on the Cartesian coordinate system (x/width and y/height). +: The framework APIs use inheritance to specialize behavior. + For example, [`RenderBox`][] extends [`RenderObject`][] + to establish a Cartesian coordinate system for 2D layout. **Prototype-based object-oriented programming** : The [`ScrollPhysics`][] class chains instances to compose - the physics that apply to scrolling dynamically at runtime. - This lets the system compose, for example, paging physics - with platform-specific physics, without the platform having to be - selected at compile time. + scrolling physics dynamically at runtime. **Imperative programming** -: Straightforward imperative programming, usually - paired with state encapsulated within an object, - is used where it provides the most intuitive solution. - For example, tests are written in an imperative style, - first describing the situation under test, then listing - the invariants that the test must match, then advancing - the clock or inserting events as necessary for the test. +: Imperative code manages encapsulated state and test execution, + where step-by-step logic is clearest. **Reactive programming** -: The widget and element trees are sometimes described as - reactive, because new inputs provided in a widget's - constructor are immediately propagated as changes to - lower-level widgets by the widget's build method, and - changes made in the lower widgets (for example, - in response to user input) propagate back up the tree - using event handlers. Aspects of both functional-reactive and - imperative-reactive are present in the framework, - depending on the needs of the widgets. Widgets with build - methods that consist of just an expression describing how - the widget reacts to changes in its configuration are functional - reactive widgets (for example, the Material [`Divider`][] class). - Widgets whose build methods construct a list of children - over several statements, describing how the widget reacts - to changes in its configuration, are imperative reactive - widgets (for example, the [`Chip`][] class). +: Constructor parameters propagate changes down the widget tree, + and user interactions trigger updates back up the tree through callbacks. + State changes schedule rebuilds of affected subtrees. **Declarative programming** -: The build methods of widgets are often a single - expression with multiple levels of nested constructors, - written using a strictly declarative subset of Dart. - Such nested expressions could be mechanically transformed - to or from any suitably expressive markup language. - For example, the [`UserAccountsDrawerHeader`][] - widget has a long build method (20+ lines), - consisting of a single nested expression. - This can also be combined with the imperative style to build UIs - that would be harder to describe in a pure-declarative approach. +: Widget `build` methods describe the desired UI state declaratively, + leaving layout and rendering updates to the framework. **Generic programming** -: Types can be used to help developers catch programming - errors early. The Flutter framework uses generic programming to - help in this regard. For example, the [`State`][] - class is parameterized in terms of the type of its - associated widget, so that the Dart analyzer can catch - mismatches of states and widgets. Similarly, the - [`GlobalKey`][] class takes a type parameter so that it - can access a remote widget's state in a type-safe manner - (using runtime checking), the [`Route`][] interface is - parameterized with the type that it is expected to use when - [popped][], and collections such as [`List`][]s, [`Map`][]s, - and [`Set`][]s are all parameterized so that mismatched - elements can be caught early either during analysis or at - runtime during debugging. +: Generic types enforce type safety across the framework, + such as parameterizing [`State`][] with its widget type + and [`GlobalKey`][] with its state type. **Concurrent programming** -: Flutter makes heavy use of [`Future`][]s and other - asynchronous APIs. For example, the animation system reports - when an animation is finished by completing a future. - The image loading system similarly uses futures to report - when a load is complete. +: Flutter uses [`Future`][] and [`Stream`][] for asynchronous operations, + and isolates for parallel background computation. **Constraint programming** -: The layout system in Flutter uses a weak form of - constraint programming to determine the geometry of a scene. - Constraints (for example, for cartesian boxes, a minimum and - maximum width and a minimum and maximum height) - are passed from parent to child, and the child selects a resulting - geometry (for example, for cartesian boxes, a size, - specifically a width and a height) that fulfills those constraints. - By using this technique, Flutter can usually - lay out an entire scene with a single pass. - +: The layout system uses box constraints (minimum and maximum width and height) + passed down from parent to child to compute geometry in a single pass. [`AnimatedDefaultTextStyle`]: {{site.api}}/flutter/widgets/AnimatedDefaultTextStyle-class.html -[`AnimatedPhysicalModel`]: {{site.api}}/flutter/widgets/AnimatedPhysicalModel-class.html [`Center`]: {{site.api}}/flutter/widgets/Center-class.html -[`Chip`]: {{site.api}}/flutter/material/Chip-class.html -[`color`]: {{site.api}}/flutter/widgets/Icon/color.html [`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html -[`Divider`]: {{site.api}}/flutter/material/Divider-class.html [`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`GestureDetector`]: {{site.api}}/flutter/widgets/GestureDetector-class.html -[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html -[`icon`]: {{site.api}}/flutter/widgets/Icon/icon.html -[`Icon`]: {{site.api}}/flutter/widgets/Icon-class.html +[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html [`IconTheme`]: {{site.api}}/flutter/widgets/IconTheme-class.html [`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html -[`Iterable`]: {{site.api}}/flutter/dart-core/Iterable-class.html -[`List`]: {{site.api}}/flutter/dart-core/List-class.html [`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html -[`Map`]: {{site.api}}/flutter/dart-core/Map-class.html [`Material`]: {{site.api}}/flutter/material/Material-class.html -[`NotificationListener`]: {{site.api}}/flutter/widgets/NotificationListener-class.html [`Padding`]: {{site.api}}/flutter/widgets/Padding-class.html -[popped]: {{site.api}}/flutter/widgets/Navigator/pop.html [`Rect`]: {{site.api}}/flutter/dart-ui/Rect-class.html [`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html [`RenderObject`]: {{site.api}}/flutter/rendering/RenderObject-class.html -[`Route`]: {{site.api}}/flutter/widgets/Route-class.html [`ScrollPhysics`]: {{site.api}}/flutter/widgets/ScrollPhysics-class.html -[`Set`]: {{site.api}}/flutter/dart-core/Set-class.html -[`size`]: {{site.api}}/flutter/widgets/Icon/size.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[`State`]: {{site.api}}/flutter/widgets/State-class.html [`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html +[`Stream`]: {{site.api}}/flutter/dart-async/Stream-class.html [`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html [`TextStyle`]: {{site.api}}/flutter/painting/TextStyle-class.html -[`UserAccountsDrawerHeader`]: {{site.api}}/flutter/material/UserAccountsDrawerHeader-class.html [`Widget`]: {{site.api}}/flutter/widgets/Widget-class.html ## Project ### Where can I get support? -If you think you've encountered a bug, file it in our -[issue tracker][]. You might also use -[Stack Overflow][] for "HOWTO" type questions. -For discussions, join our mailing list at -[flutter-dev@googlegroups.com][] or seek us out on [Discord][]. +To report bugs or request features, file an issue in the +[Flutter issue tracker][issue tracker]. -For more information, see our [Community][] page. +For community discussion, troubleshooting, and advice: +* Join the [Flutter Discord][Discord]. +* Ask questions on [Stack Overflow][] using the `flutter` tag. +* Participate in discussions on [Reddit r/FlutterDev][Reddit]. +* Visit the [Community][] page for additional resources. [Community]: {{site.main-url}}/community [Discord]: https://discord.com/invite/rflutterdev [issue tracker]: {{site.repo.flutter}}/issues -[flutter-dev@googlegroups.com]: mailto:flutter-dev@googlegroups.com +[Reddit]: https://www.reddit.com/r/FlutterDev/ [Stack Overflow]: {{site.so}}/tags/flutter ### How do I get involved? -Flutter is open source, and we encourage you to contribute. -You can start by simply filing issues for feature requests -and bugs in our [issue tracker][]. - -We recommend that you join our mailing list at -[flutter-dev@googlegroups.com][] and let us know how you're -using Flutter and what you'd like to do with it. - -If you're interested in contributing code, you can start -by reading our [Contributing guide][], and check out our -list of [easy starter issues][]. - -Finally, you can connect with helpful Flutter communities. -For more information, see the [Community][] page. +Flutter is open source, and contributions are welcome. +You can help by: -You can also engage with other developers on the Flutter -[Discord][]. +* Reporting bugs and feature requests on the [issue tracker][]. +* Contributing code and documentation by following the [Contributing guide][]. +* Triaging issues or helping other developers on [Discord][] and [Stack Overflow][]. [Contributing guide]: {{site.repo.flutter}}/blob/main/CONTRIBUTING.md -[easy starter issues]: {{site.repo.flutter}}/issues?q=is%3Aopen+is%3Aissue+label%3A%22easy+fix%22 ### Is Flutter open source? -Yes, Flutter is open source technology. -You can find the project on [GitHub][]. +Yes. Flutter is open source and available under the +BSD 3-Clause License on [GitHub][]. [GitHub]: {{site.repo.flutter}} ### Which software license(s) apply to Flutter and its dependencies? -Flutter includes two components: an engine that ships as a -dynamically linked binary, and the Dart framework as a separate -binary that the engine loads. The engine uses multiple software -components with many dependencies; view the complete list -in its [license file][]. +Flutter includes two main components: +the engine (compiled binary with dependencies) +and the framework (Dart source code). -The framework is entirely self-contained and requires -[only one license][]. - -In addition, any Dart packages you use might have their -own license requirements. +* The framework is licensed under the [BSD 3-Clause License][only one license]. +* The engine uses open source dependencies listed in its [license file][]. +* Dart packages on pub.dev specify their own individual licenses. [license file]: {{site.repo.flutter}}/blob/main/engine/src/flutter/sky/packages/sky_engine/LICENSE [only one license]: {{site.repo.flutter}}/blob/main/LICENSE ### How can I determine the licenses my Flutter application needs to show? -There's an API to find the list of licenses you need to show: - -* If your application has a [`Drawer`][], add an - [`AboutListTile`][]. +Flutter provides built-in APIs to display open source licenses: -* If your application doesn't have a Drawer but does use the - Material Components library, call either [`showAboutDialog`][] +* If your application uses a `Drawer`, add an [`AboutListTile`][]. +* If your application uses Material Design, call [`showAboutDialog`][] or [`showLicensePage`][]. - -* For a more custom approach, you can get the raw licenses from the - [`LicenseRegistry`][]. - +* For custom presentations, access the raw licenses from the [`LicenseRegistry`][]. [`AboutListTile`]: {{site.api}}/flutter/material/AboutListTile-class.html -[`Drawer`]: {{site.api}}/flutter/material/Drawer-class.html [`LicenseRegistry`]: {{site.api}}/flutter/foundation/LicenseRegistry-class.html [`showAboutDialog`]: {{site.api}}/flutter/material/showAboutDialog.html [`showLicensePage`]: {{site.api}}/flutter/material/showLicensePage.html ### Who works on Flutter? -We all do! Flutter is an open source project. -Currently, the bulk of the development is done -by engineers at Google. If you're excited about Flutter, -we encourage you to join the community and -[contribute to Flutter][]! +Flutter is developed by engineers at Google along with +hundreds of open source contributors worldwide. +To join the community, see [contribute to Flutter][]. -[contribute to Flutter]: {{site.repo.flutter}}/blob/master/CONTRIBUTING.md +[contribute to Flutter]: {{site.repo.flutter}}/blob/main/CONTRIBUTING.md ### What are Flutter's guiding principles? -We believe the following: - -* In order to reach every potential user, - developers need to target multiple mobile platforms. -* HTML and WebViews as they exist today make it challenging to - consistently hit high frame rates and deliver - high-fidelity experiences, due to automatic behavior (scrolling, - layout) and legacy support. -* Today, it's too costly to build the same app multiple times: it - requires different teams, different code bases, - different workflows, different tools, etc. -* Developers want an easier, better way to use a single codebase to - build mobile apps for multiple target platforms, - and they don't want to sacrifice quality, control, or performance. - -We are focused on three things: +Flutter is built around three core principles: _Control_ -: Developers deserve access to, and control over, - all layers of the system. Which leads to: +: Developers have full access to and control over every layer of the system. _Performance_ -: Users deserve perfectly fluid, responsive, - jank-free apps. Which leads to: - -_Fidelity_: -: Everyone deserves precise, beautiful, delightful - app experiences. - -### Will Apple reject my Flutter app? - -We can't speak for Apple, but their App Store contains -many apps built with framework technologies such as Flutter. -Indeed, Flutter uses the same fundamental architectural -model as Unity, the engine that powers many of the -most popular games on the Apple store. +: Applications deliver smooth, responsive, jank-free experiences. -Apple has frequently featured well-designed apps -that are built with Flutter, -including [Hamilton][Hamilton for iOS] and [Reflectly][]. +_Fidelity_ +: Applications achieve pixel-perfect, beautiful user experiences on every platform. -As with any app submitted to the Apple store, -apps built with Flutter should follow Apple's -[guidelines][] for App Store submission. +### Will Apple or Google reject my Flutter app? +No. Thousands of Flutter apps are published, approved, and featured +in the Apple App Store and Google Play Store. +As with any application, ensure your app complies with +Apple's [App Store Review Guidelines][guidelines] +and Google Play's Developer Program Policies. [guidelines]: {{site.apple-dev}}/app-store/review/guidelines/ -[Hamilton for iOS]: https://itunes.apple.com/us/app/hamilton-the-official-app/id1255231054?mt=8 -[Reflectly]: https://apps.apple.com/us/app/reflectly-journal-ai-diary/id1241229134 From e98f9e764b9618258f288f1800e33b44ee4f78ed Mon Sep 17 00:00:00 2001 From: "Shams Zakhour (ignore Sfshaza)" Date: Tue, 18 Aug 2026 16:06:05 -0700 Subject: [PATCH 02/14] Applied more bot suggestions --- sites/docs/src/content/resources/faq.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 8066ee637c..d66b23b48e 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -633,8 +633,8 @@ applying each where it is most effective: **Generic programming** : Generic types enforce type safety across the framework, - such as parameterizing [`State`][] with its widget type - and [`GlobalKey`][] with its state type. + such as parameterizing [`State`][]`` with its widget type + and [`GlobalKey`][]`` with its state type. **Concurrent programming** : Flutter uses [`Future`][] and [`Stream`][] for asynchronous operations, @@ -648,7 +648,7 @@ applying each where it is most effective: [`Center`]: {{site.api}}/flutter/widgets/Center-class.html [`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html [`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html +[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html [`IconTheme`]: {{site.api}}/flutter/widgets/IconTheme-class.html [`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html [`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html @@ -658,7 +658,7 @@ applying each where it is most effective: [`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html [`RenderObject`]: {{site.api}}/flutter/rendering/RenderObject-class.html [`ScrollPhysics`]: {{site.api}}/flutter/widgets/ScrollPhysics-class.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[`State`]: {{site.api}}/flutter/widgets/State-class.html [`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html [`Stream`]: {{site.api}}/flutter/dart-async/Stream-class.html [`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html From 693ccbd6a60a00e750db42e9bdb2f488595be000 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:33:51 -0700 Subject: [PATCH 03/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 4b303af62e..174a282ddd 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -500,7 +500,7 @@ You can use [`Isolate.run()`][] or the [`compute()`][] function to run heavy computations in the background. [`Isolate.run()`]: {{site.api}}/flutter/dart-isolate/Isolate/run.html -[`compute()`]: {{site.api}}/flutter/foundation/compute-constant.html +[`compute()`]: {{site.api}}/flutter/foundation/compute.html ### Can I run Dart code in the background of a Flutter app? From 18d18fe7bc536b32cb09b16d1dabfdf4840fb9b6 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:05 -0700 Subject: [PATCH 04/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 174a282ddd..4ceba81555 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -536,7 +536,7 @@ To analyze and reduce app size, see [Measuring your app's size][]. ### Is Flutter ABI compatible? -Flutter and Dart do not provide application binary interface (ABI) +Flutter and Dart don't provide application binary interface (ABI) compatibility across different compiler releases. Always compile your application using matching SDK versions. From 1e8011d417d3046c457898039c1fdf4c197f98e2 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:19 -0700 Subject: [PATCH 05/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 4ceba81555..0818b3b63a 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -275,7 +275,7 @@ You do not need to wait for a Flutter SDK release to integrate new platform capa ### Does Flutter support code push? -Flutter does not provide built-in code push functionality. +Flutter doesn't provide built-in code push functionality. Third-party solutions, such as [Shorebird][], provide code push support for Flutter applications. From a99e5142e65391ced9e947439191f9319e0e5c6e Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:29 -0700 Subject: [PATCH 06/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 0818b3b63a..36c7e469e2 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -81,7 +81,7 @@ To explore apps built with Flutter, visit the [showcase][]. ### What makes Flutter unique? Flutter differs from most cross-platform alternatives -because it does not rely on web browser views +because it doesn't rely on web browser views or system-provided platform widgets. Instead, Flutter renders its UI using its own high-performance rendering engine ([Impeller][]). From 56ea4e904b8f2ca8a26811277f81d70aa69b5b2f Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:39 -0700 Subject: [PATCH 07/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 36c7e469e2..0dc19c2f0a 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -184,7 +184,7 @@ and the [Flutter DevTools][] documentation. ### Does Flutter come with a dependency injection framework? -Flutter does not require an opinionated dependency injection framework. +Flutter doesn't require an opinionated dependency injection framework. The Flutter ecosystem offers several packages for dependency injection and service location, such as [Riverpod][], [get_it][], [Provider][], and [injectable][]. From 32ccec31b47b7d5422f0676ed8edf15acac3b40a Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:48 -0700 Subject: [PATCH 08/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 0dc19c2f0a..3e4a7657d2 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -321,7 +321,7 @@ _Fast memory allocation_ ### Can Flutter run any Dart code? -Flutter can run any Dart code that does not depend on libraries +Flutter can run any Dart code that doesn't depend on libraries unavailable on the target platform. For example, mobile and desktop apps cannot import web-specific libraries, and web apps cannot use `dart:io`. From e1aa2b9f5aff1fa801ae9c9c8d4f51cdb468c5a8 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:34:57 -0700 Subject: [PATCH 09/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 3e4a7657d2..103eb115fc 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -323,8 +323,8 @@ _Fast memory allocation_ Flutter can run any Dart code that doesn't depend on libraries unavailable on the target platform. -For example, mobile and desktop apps cannot import web-specific libraries, -and web apps cannot use `dart:io`. +For example, mobile and desktop apps can't import web-specific libraries, +and web apps can't use `dart:io`. ### How does Flutter compile for the web? From 6fa4320d92291d9379b640876f2f8b7ebce0bcf8 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:35:09 -0700 Subject: [PATCH 10/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 103eb115fc..02e8195faf 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -211,7 +211,7 @@ read the [architectural overview][]. The engine's C and C++ code is compiled using Android's NDK. The Dart code (both the framework and your application code) -is ahead-of-time (AOT) compiled into native ARM and x86-64 machine code. +is ahead-of-time (AOT) compiled into native machine code. These libraries are packaged into a runner Android project and built into an APK or Android App Bundle (AAB). When launched, the app loads the Flutter engine, From 5a061cb219cbd3659b48bd8609c2c7893caa8fd2 Mon Sep 17 00:00:00 2001 From: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com> Date: Mon, 14 Sep 2026 09:35:22 -0700 Subject: [PATCH 11/14] Update sites/docs/src/content/resources/faq.md Co-authored-by: Parker Lougheed --- sites/docs/src/content/resources/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index 02e8195faf..f562eef133 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -269,7 +269,7 @@ without waiting for an OS or SDK update. Flutter's plugin architecture, [platform channels][], and native interop tools (such as Dart FFI, `ffigen`, and `jnigen`) allow you to access new OS APIs immediately. -You do not need to wait for a Flutter SDK release to integrate new platform capabilities. +You don't need to wait for a Flutter SDK release to integrate new platform capabilities. [platform channels]: /platform-integration/platform-channels From 4f51d00b4edf84fb7b90c561757569437fa50f8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2026 10:52:05 +0200 Subject: [PATCH 12/14] Bump the github-actions group with 3 updates (#13885) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the github-actions group with 3 updates: [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/autobuild](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action). Updates `github/codeql-action/init` from 4.37.9 to 4.38.0
Release notes

Sourced from github/codeql-action/init's releases.

v4.38.0

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129
Changelog

Sourced from github/codeql-action/init's changelog.

CodeQL Action Changelog

See the releases page for the relevant changes to the CodeQL CLI and language packs.

[UNRELEASED]

No user facing changes.

4.38.0 - 09 Sept 2026

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129

4.37.9 - 26 Aug 2026

  • Update default CodeQL bundle version to 2.26.4. #4106

4.37.8 - 21 Aug 2026

No user facing changes.

4.37.7 - 13 Aug 2026

  • Update default CodeQL bundle version to 2.26.3. #4085

4.37.6 - 04 Aug 2026

  • Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to .github/codeql-config.yml to align it with the suggested path that is used elsewhere. #4070

4.37.5 - 03 Aug 2026

  • Fixed a bug where a network error while streaming the download of the CodeQL bundle could terminate the init Action instead of falling back to downloading the bundle before extracting it. #4061

4.37.4 - 29 Jul 2026

  • This version of the CodeQL Action adds support for the tools input for the codeql-action/init step to be specified using a github-codeql-tools repository property. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to toolcache to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for tools in the workflow definition always takes precedence unless the value of the repository property starts with !. #4037
  • Update default CodeQL bundle version to 2.26.2. #4051

4.37.3 - 22 Jul 2026

No user facing changes.

4.37.2 - 21 Jul 2026

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

4.37.1 - 16 Jul 2026

... (truncated)

Commits
  • b96794f Merge pull request #4131 from github/update-v4.38.0-7e08580a9
  • 02d5093 Update changelog for v4.38.0
  • 7e08580 Merge pull request #4130 from github/henrymercer/workflow-runner-sizing
  • bfcc52b Run slow macOS checks on larger runners
  • 8c251e7 Merge pull request #4129 from github/update-bundle/codeql-bundle-v2.27.0
  • 0b7ca40 Add changelog note
  • 40484b3 Update default bundle to codeql-bundle-v2.27.0
  • 977e6ce Merge pull request #4124 from github/henrymercer/toolcache-bundle-cleanup
  • 40a6b38 Address toolcache cleanup review feedback
  • deece8f Apply suggestion from @​henrymercer
  • Additional commits viewable in compare view

Updates `github/codeql-action/autobuild` from 4.37.9 to 4.38.0
Release notes

Sourced from github/codeql-action/autobuild's releases.

v4.38.0

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129
Changelog

Sourced from github/codeql-action/autobuild's changelog.

CodeQL Action Changelog

See the releases page for the relevant changes to the CodeQL CLI and language packs.

[UNRELEASED]

No user facing changes.

4.38.0 - 09 Sept 2026

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129

4.37.9 - 26 Aug 2026

  • Update default CodeQL bundle version to 2.26.4. #4106

4.37.8 - 21 Aug 2026

No user facing changes.

4.37.7 - 13 Aug 2026

  • Update default CodeQL bundle version to 2.26.3. #4085

4.37.6 - 04 Aug 2026

  • Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to .github/codeql-config.yml to align it with the suggested path that is used elsewhere. #4070

4.37.5 - 03 Aug 2026

  • Fixed a bug where a network error while streaming the download of the CodeQL bundle could terminate the init Action instead of falling back to downloading the bundle before extracting it. #4061

4.37.4 - 29 Jul 2026

  • This version of the CodeQL Action adds support for the tools input for the codeql-action/init step to be specified using a github-codeql-tools repository property. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to toolcache to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for tools in the workflow definition always takes precedence unless the value of the repository property starts with !. #4037
  • Update default CodeQL bundle version to 2.26.2. #4051

4.37.3 - 22 Jul 2026

No user facing changes.

4.37.2 - 21 Jul 2026

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

4.37.1 - 16 Jul 2026

... (truncated)

Commits
  • b96794f Merge pull request #4131 from github/update-v4.38.0-7e08580a9
  • 02d5093 Update changelog for v4.38.0
  • 7e08580 Merge pull request #4130 from github/henrymercer/workflow-runner-sizing
  • bfcc52b Run slow macOS checks on larger runners
  • 8c251e7 Merge pull request #4129 from github/update-bundle/codeql-bundle-v2.27.0
  • 0b7ca40 Add changelog note
  • 40484b3 Update default bundle to codeql-bundle-v2.27.0
  • 977e6ce Merge pull request #4124 from github/henrymercer/toolcache-bundle-cleanup
  • 40a6b38 Address toolcache cleanup review feedback
  • deece8f Apply suggestion from @​henrymercer
  • Additional commits viewable in compare view

Updates `github/codeql-action/analyze` from 4.37.9 to 4.38.0
Release notes

Sourced from github/codeql-action/analyze's releases.

v4.38.0

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129
Changelog

Sourced from github/codeql-action/analyze's changelog.

CodeQL Action Changelog

See the releases page for the relevant changes to the CodeQL CLI and language packs.

[UNRELEASED]

No user facing changes.

4.38.0 - 09 Sept 2026

  • On GitHub-hosted runners, the CodeQL Action now deletes unused CodeQL bundles from the toolcache before downloading a different bundle, which frees up disk space for the analysis. We expect to roll this change out to everyone in September. #4124
  • The CodeQL Action now supports CodeQL releases that are compatible with Linux Arm64 and downloads the native linux-arm64 CodeQL bundle when available. #4072
  • Update default CodeQL bundle version to 2.27.0. #4129

4.37.9 - 26 Aug 2026

  • Update default CodeQL bundle version to 2.26.4. #4106

4.37.8 - 21 Aug 2026

No user facing changes.

4.37.7 - 13 Aug 2026

  • Update default CodeQL bundle version to 2.26.3. #4085

4.37.6 - 04 Aug 2026

  • Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to .github/codeql-config.yml to align it with the suggested path that is used elsewhere. #4070

4.37.5 - 03 Aug 2026

  • Fixed a bug where a network error while streaming the download of the CodeQL bundle could terminate the init Action instead of falling back to downloading the bundle before extracting it. #4061

4.37.4 - 29 Jul 2026

  • This version of the CodeQL Action adds support for the tools input for the codeql-action/init step to be specified using a github-codeql-tools repository property. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to toolcache to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for tools in the workflow definition always takes precedence unless the value of the repository property starts with !. #4037
  • Update default CodeQL bundle version to 2.26.2. #4051

4.37.3 - 22 Jul 2026

No user facing changes.

4.37.2 - 21 Jul 2026

  • The new address format for the config-file input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the remote= prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. #4023
  • The CodeQL Action can now make use of configured private registries in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. #4007

4.37.1 - 16 Jul 2026

... (truncated)

Commits
  • b96794f Merge pull request #4131 from github/update-v4.38.0-7e08580a9
  • 02d5093 Update changelog for v4.38.0
  • 7e08580 Merge pull request #4130 from github/henrymercer/workflow-runner-sizing
  • bfcc52b Run slow macOS checks on larger runners
  • 8c251e7 Merge pull request #4129 from github/update-bundle/codeql-bundle-v2.27.0
  • 0b7ca40 Add changelog note
  • 40484b3 Update default bundle to codeql-bundle-v2.27.0
  • 977e6ce Merge pull request #4124 from github/henrymercer/toolcache-bundle-cleanup
  • 40a6b38 Address toolcache cleanup review feedback
  • deece8f Apply suggestion from @​henrymercer
  • Additional commits viewable in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5676bd0476..6a45b08f69 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 + uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -47,7 +47,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@cdf488f595d80d6e07e03d4674febd5ab45fa938 + uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -61,4 +61,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 + uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 From 75fa412c823ad40a8c970c914938468372bcd2a6 Mon Sep 17 00:00:00 2001 From: Muthu Ganesh Date: Mon, 14 Sep 2026 16:29:31 +0000 Subject: [PATCH 13/14] Update documentation for iOS 27, macOS 27, and Xcode 27 support (#13872) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _Description of what this PR is changing or adding, and why:_ Updates documentation across `docs.flutter.dev` to support iOS 27, macOS 27 ("Golden Gate"), and Xcode 27: * **Supported platforms (`sites/docs/src/content/reference/supported-platforms.md`):** * Update iOS supported version range to `15 to 27`. * Update macOS supported version range to `Monterey (12) to Golden Gate (27)`. * **UIScene migration guide (`sites/docs/src/content/release/breaking-changes/uiscenedelegate.md`):** * Add a version note documenting that Xcode 27 (iOS 27 SDK) mandates `UIScene` and unmigrated UIKit apps fail to launch on startup. * Update the timeline section to reflect enforcement in Xcode 27. * **macOS building (`sites/docs/src/content/platform-integration/macos/building.md`):** * Add an informational warning note regarding the ongoing deprecation of macOS Intel (x64) hardware, linking to the deprecation strategy. * **iOS setup (`sites/docs/src/content/platform-integration/ios/setup.md`):** * Provide launch commands for both Xcode 27+ (`open -a DeviceHub`) and Xcode 26 (`open -a Simulator`). * Refine simulator recommendation phrasing per style guide and remove unused `[Flutter on latest iOS]` link definition. * **Retire outdated iOS latest tracker (`sites/docs/src/content/platform-integration/ios/ios-latest.md`):** * Remove outdated feature tracking page. * Remove corresponding entry from sidenav (`default.yml`) and landing card (`platform-integration/index.md`). * **Hosting redirects (`sites/docs/firebase.json`):** * Add 301 redirect from `/release/breaking-changes/uiscene-lifecycle-ios` to `/release/breaking-changes/uiscenedelegate` (resolves 404 from Flutter 3.47 release blog). * Add 301 redirect from `/platform-integration/ios/ios-latest` to `/platform-integration/ios` (gracefully handling existing references including past release notes). _Issues fixed by this PR (if any):_ b/540919760 _PRs or commits this PR depends on (if any):_ None ## Presubmit checklist - [x] If you are unwilling, or unable, to sign the CLA, even for a _tiny_, one-word PR, please file an issue instead of a PR. - [x] If this PR is not meant to land until a future stable release, mark it as draft with an explanation. - [x] This PR follows the [Google Developer Documentation Style Guidelines](https://developers.google.com/style)—for example, it doesn't use _i.e._ or _e.g._, and it avoids _I_ and _we_ (first-person pronouns). - [x] This PR uses [semantic line breaks](https://github.com/dart-lang/site-shared/blob/main/doc/writing-for-dart-and-flutter-websites.md#semantic-line-breaks) of 80 characters or fewer. --- sites/docs/firebase.json | 2 ++ .../src/content/platform-integration/index.md | 8 ----- .../platform-integration/ios/ios-latest.md | 35 ------------------- .../content/platform-integration/ios/setup.md | 14 +++----- .../platform-integration/macos/building.md | 9 +++++ .../content/reference/supported-platforms.md | 11 ++---- .../breaking-changes/uiscenedelegate.md | 17 ++++++--- sites/docs/src/data/sidenav/default.yml | 2 -- 8 files changed, 31 insertions(+), 67 deletions(-) delete mode 100644 sites/docs/src/content/platform-integration/ios/ios-latest.md diff --git a/sites/docs/firebase.json b/sites/docs/firebase.json index 41303c04e8..32c1fc37df 100644 --- a/sites/docs/firebase.json +++ b/sites/docs/firebase.json @@ -202,6 +202,7 @@ { "source": "/platform-integration/ios/install-ios", "destination": "/platform-integration/ios/setup", "type": 301 }, { "source": "/platform-integration/ios/install-ios/:rest*", "destination": "/platform-integration/ios/setup", "type": 301 }, { "source": "/platform-integration/ios/splash-screen", "destination": "/platform-integration/ios/launch-screen", "type": 301 }, + { "source": "/platform-integration/ios/ios-latest", "destination": "/platform-integration/ios", "type": 301 }, { "source": "/platform-integration/linux/install-linux", "destination": "/platform-integration/linux/setup", "type": 301 }, { "source": "/platform-integration/linux/install-linux/:rest*", "destination": "/platform-integration/linux/setup", "type": 301 }, { "source": "/platform-integration/macos/c-interop", "destination": "/platform-integration/legacy-ffi-plugin", "type": 301 }, @@ -226,6 +227,7 @@ { "source": "/release/release-notes/supported-platforms", "destination": "/reference/supported-platforms", "type": 301 }, { "source": "/release/breaking-changes/can-request-focus", "destination": "https://github.com/flutter/flutter/issues/149067", "type": 301 }, { "source": "/release/breaking-changes/scrollable_alert_dialog", "destination": "/release/breaking-changes/scrollable-alert-dialog", "type": 301 }, + { "source": "/release/breaking-changes/uiscene-lifecycle-ios", "destination": "/release/breaking-changes/uiscenedelegate", "type": 301 }, { "source": "/release/breaking-changes/win_lifecycle_process_function", "destination": "/release/breaking-changes/win-lifecycle-process-function", "type": 301 }, { "source": "/release/archive", "destination": "/install/archive", "type": 301 }, { "source": "/release/upgrade", "destination": "/install/upgrade", "type": 301 }, diff --git a/sites/docs/src/content/platform-integration/index.md b/sites/docs/src/content/platform-integration/index.md index aee1e3d8b9..b2818eeb42 100644 --- a/sites/docs/src/content/platform-integration/index.md +++ b/sites/docs/src/content/platform-integration/index.md @@ -220,14 +220,6 @@ Learn how to add custom integrations with iOS to your Flutter app.

Learn how to add an iOS app extension to your app.

- -
- Support new iOS features -
-
-

Learn about Flutter's support for new or upcoming iOS features.

-
-
### Integrate with the web {:#web} diff --git a/sites/docs/src/content/platform-integration/ios/ios-latest.md b/sites/docs/src/content/platform-integration/ios/ios-latest.md deleted file mode 100644 index 94a9f9cd00..0000000000 --- a/sites/docs/src/content/platform-integration/ios/ios-latest.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Flutter on latest iOS -description: >- - Learn about Flutter's support for and compatibility with - the latest releases of iOS. ---- - -Flutter supports iOS 26. - -For information on the status of specific iOS features -that Flutter hasn't yet fully implemented, -visit the following issues in the flutter/flutter repo. - -* Flutter support for liquid glass: [Issue 170310][] -* Eye tracking of a Flutter app: [Issue 153573][] -* Hover typing feature: [Issue 152715][] -* iOS formatting menu: [Issue 150068][] -* iOS-style zoom page transition: [Issue 150588][] -* iPad-style tab bar: [Issue 150590][] -* iPhone mirroring when viewing a Flutter app: [Issue 152711][] -* Large content viewer: [Issue 152715][] -* Add "Translate" button to the context edit menu: [Issue 150392][] -* Virtual trackpad feature: [Issue 152715][] -* Writing tools text input feature: [Issue 150965][], [Issue 150452][] - -[Issue 150068]: {{site.repo.flutter}}/issues/150068 -[Issue 150392]: {{site.repo.flutter}}/issues/150392 -[Issue 150452]: {{site.repo.flutter}}/issues/150452 -[Issue 150588]: {{site.repo.flutter}}/issues/150588 -[Issue 150590]: {{site.repo.flutter}}/issues/150590 -[Issue 150965]: {{site.repo.flutter}}/issues/150965 -[Issue 152711]: {{site.repo.flutter}}/issues/152711 -[Issue 152715]: {{site.repo.flutter}}/issues/152715 -[Issue 153573]: {{site.repo.flutter}}/issues/153573 -[Issue 170310]: {{site.repo.flutter}}/issues/170310 diff --git a/sites/docs/src/content/platform-integration/ios/setup.md b/sites/docs/src/content/platform-integration/ios/setup.md index 1fdd490116..211024297b 100644 --- a/sites/docs/src/content/platform-integration/ios/setup.md +++ b/sites/docs/src/content/platform-integration/ios/setup.md @@ -95,23 +95,19 @@ an iOS physical device or on the iOS Simulator. ## Set up an iOS device {: #set-up-devices} -We recommend starting with the iOS Simulator as -it's easier to get set up than a physical iOS device. -However, you should also test your app on an actual -physical device. +It's easiest to first set up the simulator, +but be sure to also test your app on a physical device. -To start the simulator, run the command for your Xcode version. - -If you're using Xcode 27 or later, start the Device Hub app: +Start the simulator (renamed to Device Hub on Xcode 27): ```console $ open -a DeviceHub ``` -If you're using Xcode 26 or earlier, start the Simulator app: +On Xcode 26 or earlier, start the Simulator app: ```console $ open -a Simulator @@ -126,8 +122,6 @@ on the Apple Developer site. -[Flutter on latest iOS]: /platform-integration/ios/ios-latest - Set up each iOS device on which you want to test. 1.

Configure your physical iOS device

diff --git a/sites/docs/src/content/platform-integration/macos/building.md b/sites/docs/src/content/platform-integration/macos/building.md index 385c16c997..2b5d1b764c 100644 --- a/sites/docs/src/content/platform-integration/macos/building.md +++ b/sites/docs/src/content/platform-integration/macos/building.md @@ -33,6 +33,15 @@ pop-up buttons, and modal dialogs. ## Building macOS apps +:::warning macOS Intel (x64) deprecation +As Apple phases out Intel-based Macs, +Flutter is phasing out support for Intel (x64) hardware. +For details on the timeline and impact, +refer to the [macOS Intel deprecation strategy][]. + +[macOS Intel deprecation strategy]: {{site.main-url}}/go/macos-intel-deprecation +::: + To distribute your macOS application, you can either [distribute it through the macOS App Store][], or you can distribute the `.app` itself, diff --git a/sites/docs/src/content/reference/supported-platforms.md b/sites/docs/src/content/reference/supported-platforms.md index f9d1e3c3c9..1198191e33 100644 --- a/sites/docs/src/content/reference/supported-platforms.md +++ b/sites/docs/src/content/reference/supported-platforms.md @@ -35,7 +35,7 @@ Flutter supports deploying to the following platforms. name="iOS" icon="mobile" arch="Arm64" - supported="15 to 26" + supported="15 to 27" ci-tested="18 and 26" unsupported="14 and earlier" deploy-to-link="/deployment/ios" @@ -48,14 +48,9 @@ Flutter supports deploying to the following platforms. As Apple phases out Intel-based Macs, Flutter is phasing out support for Intel (x64) hardware. For details on the timeline and impact, -check out the [macOS Intel deprecation strategy][]. - -If you can't migrate to an [Apple Silicon Mac][], -you can continue using older Flutter releases from the [SDK archive][]. +refer to the [macOS Intel deprecation strategy][]. [macOS Intel deprecation strategy]: {{site.main-url}}/go/macos-intel-deprecation -[Apple Silicon Mac]: https://support.apple.com/en-us/116943 -[SDK archive]: /install/archive ::: @@ -72,7 +67,7 @@ you can continue using older Flutter releases from the [SDK archive][]. name="macOS" icon="laptop_mac" arch="x64, Arm64" - supported="Monterey (12) to Tahoe (26)" + supported="Monterey (12) to Golden Gate (27)" ci-tested="Sequoia (15)" unsupported="Big Sur (11) and earlier" deploy-to-link="/deployment/macos" diff --git a/sites/docs/src/content/release/breaking-changes/uiscenedelegate.md b/sites/docs/src/content/release/breaking-changes/uiscenedelegate.md index e57ef86a33..d4c99a9bb3 100644 --- a/sites/docs/src/content/release/breaking-changes/uiscenedelegate.md +++ b/sites/docs/src/content/release/breaking-changes/uiscenedelegate.md @@ -13,6 +13,17 @@ As of the Flutter 3.41 release, eligible apps are migrated automatically. ::: +:::version-note +Beginning with Xcode 27 (iOS 27 SDK), Apple mandates the `UIScene` +lifecycle for UIKit apps. Flutter apps built with Xcode 27 that +do not adopt `UIScene` fail to launch on startup. + +In Flutter 3.41 and later, if your project uses an unmodified `AppDelegate`, +Flutter migrates it automatically. If your project uses a custom `AppDelegate` +or a Flutter version earlier than 3.41, complete the following manual +migration steps. +::: + ## Summary Apple now requires iOS developers to adopt the `UIScene` lifecycle. @@ -1088,10 +1099,8 @@ When you're ready to re-enable `UIScene` support, remove the underscore. Landed in version: 3.38.0-0.1.pre
In stable release: 3.38 -Apple hasn't yet announced when it will enforce the `UIScene` requirement. -Once Apple changes its warning to an assertion, -Flutter apps that haven't adopted the `UIScene` lifecycle will -crash on startup when built with the latest SDK. +Flutter apps that haven't adopted the `UIScene` lifecycle +will crash on startup when built with Xcode 27 (iOS 27 SDK). ## References diff --git a/sites/docs/src/data/sidenav/default.yml b/sites/docs/src/data/sidenav/default.yml index 31cec95cd1..ad5decd077 100644 --- a/sites/docs/src/data/sidenav/default.yml +++ b/sites/docs/src/data/sidenav/default.yml @@ -401,8 +401,6 @@ children: - title: Set up iOS development permalink: /platform-integration/ios/setup - - title: Flutter on latest iOS - permalink: /platform-integration/ios/ios-latest - title: Leverage Apple's system libraries permalink: /platform-integration/ios/apple-frameworks - title: Add a launch screen From a29be4590f4f332cea405707d8c05124e7ca1e06 Mon Sep 17 00:00:00 2001 From: "Shams Zakhour (ignore Sfshaza)" Date: Mon, 14 Sep 2026 09:39:25 -0700 Subject: [PATCH 14/14] incorporating feedback --- sites/docs/src/content/resources/faq.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sites/docs/src/content/resources/faq.md b/sites/docs/src/content/resources/faq.md index f562eef133..2aa5aac04e 100644 --- a/sites/docs/src/content/resources/faq.md +++ b/sites/docs/src/content/resources/faq.md @@ -633,8 +633,8 @@ applying each where it is most effective: **Generic programming** : Generic types enforce type safety across the framework, - such as parameterizing [`State`][]`` with its widget type - and [`GlobalKey`][]`` with its state type. + such as parameterizing [`State`][] with its widget type + and [`GlobalKey`][] with its state type. **Concurrent programming** : Flutter uses [`Future`][] and [`Stream`][] for asynchronous operations, @@ -648,7 +648,7 @@ applying each where it is most effective: [`Center`]: {{site.api}}/flutter/widgets/Center-class.html [`ConstrainedBox`]: {{site.api}}/flutter/widgets/ConstrainedBox-class.html [`Future`]: {{site.api}}/flutter/dart-async/Future-class.html -[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html +[`GlobalKey`]: {{site.api}}/flutter/widgets/GlobalKey-class.html [`IconTheme`]: {{site.api}}/flutter/widgets/IconTheme-class.html [`InkWell`]: {{site.api}}/flutter/material/InkWell-class.html [`Listenable`]: {{site.api}}/flutter/foundation/Listenable-class.html @@ -658,7 +658,7 @@ applying each where it is most effective: [`RenderBox`]: {{site.api}}/flutter/rendering/RenderBox-class.html [`RenderObject`]: {{site.api}}/flutter/rendering/RenderObject-class.html [`ScrollPhysics`]: {{site.api}}/flutter/widgets/ScrollPhysics-class.html -[`State`]: {{site.api}}/flutter/widgets/State-class.html +[`State`]: {{site.api}}/flutter/widgets/State-class.html [`StatelessWidget`]: {{site.api}}/flutter/widgets/StatelessWidget-class.html [`Stream`]: {{site.api}}/flutter/dart-async/Stream-class.html [`TextButton`]: {{site.api}}/flutter/material/TextButton-class.html