Repository navigation
[Windows] ☂️ Add support for Arm64 as a target #62597
Description
Activity
- addedc: new featureNothing broken; request for a new capabilityNothing broken; request for a new capabilityframeworkflutter/packages/flutter repository. See also f: labels.flutter/packages/flutter repository. See also f: labels.engineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.platform-windowsBuilding on or for Windows specificallyBuilding on or for Windows specificallya: desktopRunning on desktopRunning on desktopP3Issues that are less important to the Flutter projectIssues that are less important to the Flutter project
on Jul 30, 2020 - added 2 commits that reference this issue
on Jul 30, 2020 - addedplatform-target-armTargeting an ARM-based platformTargeting an ARM-based platform
on Oct 6, 2021 @stuartmorgan it seems like dart-lang/sdk#47824 was merged, so this is mostly technically unblocked? I do have a Surface Pro X, which is Arm64, so I want to help.
Interesting, I didn't realize that was on the Dart team's radar.
I played around with this quite a while ago and got a PoC of the Dart part compiling, but then ran into the issue that it would require cross-building support, or for the entire compilation of the Flutter engine to be on aarm64 (bullet point #2). Does cross-compilation work at the Dart level (i.e., can Dart AOT compilation be done for arm64, but from an x64 machine)?
If not you could experiment with getting flutter/engine building on arm64, but getting from there to
fluttertool support would require CI arm64 machines; I don't know if there's a good option for that available.(/cc @cbracken )
Doesn't seem like cross compilation is a thing yet (dart-lang/sdk#28617). I can try to start things on my Surface Pro X, but that seems challenging. I'll see how far I can get.
There are Azure machines that support Arm64, so maybe that is one solution, but not sure how the Flutter team would be able to leverage those.Aside from the compilation of the C++ bits, there's also gen_snapshot and the Dart compilation. Today we can generate a gen_snapshot binary that runs on x64 host and targets arm64, but it is not currently possible (without a significant amount of work from the Dart team) to build a gen_snapshot binary that runs on arm64 and targets x64 because there is no simx64 support in the Dart SDK.
On macOS, this isn't a huge problem since we can run x64 code on arm64 macs via Rosetta. It looks like this may be possible on Windows 11 and later. It also looks like there was a preview release for Windows 10 based on this Windows blog post but it's unclear if a final version will be available.
Reacted by Alexandre Zollinger ChohfiToday we can generate a gen_snapshot binary that runs on x64 host and targets arm64
Nice! Given the current distribution of machines, that's the most important thing for us to have to get something working end-to-end.
51 remaining items
#176385 was merged back in March and made it into the 3.44.0 stable release 🎉 This means that the arm64 Dart SDK and Flutter Engine are now built for every new Flutter release.
When you download the 3.44.0 SDK it still includes the x64 Dart SDK and Flutter Engine by default, but here's how you can force it to download the arm64 Dart SDK and Flutter Engine:
- Download the 3.44.0 SDK to your Windows machine. Let's say we put it in
C:\flutter. - Run
Remove-Item "C:\flutter\bin\cache\engine-dart-sdk.stamp" -Force, otherwiseupdate_dart_sdk.ps1won't notice it needs to download a fresh binary instead of using the stamped x64 version. - Run
dart --version. This will automatically download the Windows arm64 version:
> dart --version Checking Dart SDK version... Downloading Dart SDK from Flutter engine ... Expanding downloaded archive with PowerShell... Building flutter tool... Running pub upgrade... Resolving dependencies... Downloading packages... Got dependencies. Dart SDK version: 3.12.0 (stable) (Fri May 8 01:51:14 2026 -0700) on "windows_arm64"- Now run
flutter precache --windows. This will download the arm64 engine:
> flutter precache --windows [1/5] Flutter SDK ├─ [1/5] sky_engine (1.5MB in 0.5s) ├─ [2/5] flutter_gpu (0.0MB in 0.0s) ├─ [3/5] flutter_patched_sdk (3.8MB in 0.9s) ├─ [4/5] flutter_patched_sdk_product (3.8MB in 0.9s) └─ [5/5] windows-arm64 (32.1MB in 8.0s) [2/5] Windows SDK ├─ [1/4] windows-arm64-debug/windows-arm64-flutter (77.5MB in 18.3s) ├─ [2/4] windows-arm64/flutter-cpp-client-wrapper (0.1MB in 0.0s) ├─ [3/4] windows-arm64-profile/windows-arm64-flutter (65.0MB in 15.7s) └─ [4/4] windows-arm64-release/windows-arm64-flutter (63.1MB in 15.1s) [5/5] windows-arm64/font-subset (2.0MB in 0.5s)What ships inside the ZIPs (identical arch coverage)
3.41.9 3.44.0 Bundled Dart SDK x64, v3.11.5 x64, v3.12.0 Bundled engine artifacts windows-x64,-profile,-releaseonlywindows-x64,-profile,-releaseonlyEngine revision ( bin/cache/engine.stamp)42d3d75a56efe1a2e9902f52dc8006099c45d9374c525dac5ebe5971c5708ef73558ed8edcf4a362bin/internal/update_dart_sdk.ps1arm64 logicpresent (identical) present (identical) Both archives bundle only an x64 Dart + x64 engine, and ship a byte-identical
update_dart_sdk.ps1that already knows how to fetchdart-sdk-windows-arm64.zipwhenPROCESSOR_ARCHITECTURE=ARM64. So the tooling is not the gate; availability in the bucket is.Bucket availability, keyed by engine revision
Here we can see that 3.44.0 really is the first version that ships the necessary arm64 binaries.
Base URL:
https://storage.googleapis.com/flutter_infra_release/flutter/<engineRevision>/<path>Artifact ( <path>)3.41.9 ( 42d3d75a…)3.44.0 ( 4c525dac…)dart-sdk-windows-arm64.zip404 200 windows-arm64/artifacts.zip404 200 windows-arm64/windows-arm64-embedder.zip404 200 windows-arm64/flutter-cpp-client-wrapper.zip404 200 windows-arm64/impeller_sdk.zip404 200 windows-arm64/font-subset.zip404 200 windows-arm64-release/windows-arm64-flutter.zip404 200 windows-arm64-profile/windows-arm64-flutter.zip404 200 windows-arm64-debug/windows-arm64-flutter.zip404 200 dart-sdk-windows-x64.zip(control)200 200 windows-x64/artifacts.zip(control)200 200 Reacted by JHubi1, kjxbyz and deuteros-gex- Download the 3.44.0 SDK to your Windows machine. Let's say we put it in
So, when will I be able to package Windows applications that support the ARM64 architecture on a Windows ARM64 machine?
So, when will I be able to package Windows applications that support the ARM64 architecture on a Windows ARM64 machine?
@kjxbyz you should be able to do so with the instructions above. As of 3.44.0, you can switch between the Dart x64 and arm64 SDK on Windows. It still defaults to x64 though, so you need to explicitly pull in the arm64 version. The latter will build arm64 binaries by default. More details are here: #186730 (comment)
Reacted by kjxbyzMicrosoft, Qualcomm, Nvidia, and OEMs have invested heavily in Windows on ARM, hoping for significant progress in this feature.
- added a commit that references this issue
on Sep 27, 2026 - added 5 commits that reference this issue
on Oct 9, 2026
#53120 tracks supporting Windows arm64 as a development environment; this is for being able to build Flutter Windows applications that run on arm64.
This would require:
bringup--target-platformoption #129808