What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Keep Virtualization.framework in a native macOS host layer, and let Flutter drive it through a platform channel. Use an AppKit platform view only if the guest’s display has to sit inside your Flutter layout, and go in knowing that Flutter’s macOS platform-view support is incomplete, with gesture support not yet available. Most of the work is native: configuration, installation, lifecycle, and entitlements. Dart should send commands and receive state.
What Virtualization.framework gives you
Apple describes Virtualization.framework as a set of high-level APIs for creating and managing virtual machines on Apple silicon and Intel-based Mac computers. It supports running macOS and Linux guests. You describe a guest with a VZVirtualMachineConfiguration and its platform and device objects, and VZVirtualMachineView is Apple’s native view for showing and interacting with a guest’s graphical output (Apple Developer Documentation, Virtualization).
Flutter has no equivalent in Dart. Any VM operation therefore runs in Swift or Objective-C inside the macOS app target. Your Flutter code is a client of that native code.
Choose the integration shape first
Three shapes cover most products. They differ mainly in whether the guest display lives inside the Flutter window and how much input handling you need to build yourself.
#1 Best Overall
| Shape | What Flutter owns | Where the guest display appears | Input and layout risk | Fit |
|---|---|---|---|---|
| Control and status only | Start, stop, install, and state indicators | No display in Flutter; the guest runs in a separate native window or headless | Low; no gesture or clipping concerns | Dashboards, build or test VM managers, provisioning tools |
| Separate console window | Lifecycle controls plus a button that opens a native window | A native VZVirtualMachineView hosted in its own window |
Low to moderate; window lifecycle must be handled natively | Products that need a full interactive console without fitting it into a Flutter layout |
| In-layout platform view | Layout around a native view embedded in Flutter | Inside the Flutter widget tree via an AppKit platform view | Higher; mouse and trackpad gestures are not yet supported on macOS platform views, and transforms, clipping, and overlays need testing | Only when the console must be part of the Flutter screen and you can accept the current limits |
Start with the first two unless the embedded layout is a hard product requirement. Flutter’s platform-view guidance is clear that gesture support is a known gap on macOS (see Flutter, Hosting native macOS views in your Flutter app with Platform Views).
Build the native service before the Flutter UI
Flutter’s macOS platform-channel guide adds native code in MainFlutterWindow.swift and connects a FlutterMethodChannel to the Flutter engine’s binary messenger (Flutter, Writing custom platform-specific code). Keep the VM logic out of that window controller. Put it in a separate native class that the channel handler calls.
Rank #2
- Define one native service class that owns the VM configuration, the installation state, the running state, and the most recent error. Nothing else in the app should construct
VZVirtualMachineConfigurationobjects directly. - Expose a small set of named operations through the channel, such as
createGuest,installGuest,start,stop, andgetStatus. Each one should take explicit arguments and return a result or a structured error. - Push state changes from native to Dart when they occur, instead of making Dart poll. Installation and boot take time, so the UI needs to show progress rather than wait on a single call.
- Verify threading before you test end to end. Flutter notes that channel messages are asynchronous and that platform-thread requirements apply, so make sure your VM calls run on the thread Apple’s API expects and that replies reach Dart on the main thread.
Guest setup: Linux and macOS are different flows
Apple’s documentation separates the two guest types. Plan them as separate code paths that share the native service’s state model.
Linux guest
- Build a
VZVirtualMachineConfiguration. - Attach a
VZLinuxBootLoaderthat points at a kernel image. - Add the devices the guest needs, such as sound or keyboard configurations.
macOS guest on Apple silicon
Apple’s Virtualize macOS on a Mac guide describes the required pieces:
- A
VZMacPlatformConfiguration. - A compatible restore image.
- A
VZMacOSInstallerto install from that image. - Auxiliary storage and a macOS boot loader, which together make the VM bootable.
Your restore-image flow should validate compatibility before it starts an install, because an incompatible image fails late in the process. Surface that failure as a clear error in Flutter rather than a stuck progress bar.
Entitlements, sandboxing, and signing are part of the build
Apple lists com.apple.security.virtualization as a Boolean entitlement required to use the framework. Confirm its current availability and signing requirements in Apple’s documentation for the OS version and distribution route you target.
Rank #4
Flutter macOS apps are sandboxed by default, and capabilities are managed in the Runner entitlement files. Flutter’s Building macOS apps with Flutter guide says release builds can behave differently from debug and profile builds. Test the virtualization entitlement in a signed release build, not only in a debug run from Xcode. For distribution outside the Mac App Store, the app also needs notarization and the Hardened Runtime.
- Check the entitlement in the Runner file used by your release configuration.
- Run a signed, notarized release build and start a VM from it.
- Test on a machine where the app was not built, so a developer-only setting does not hide a missing entitlement.
Platform view limits for a VM console
Flutter’s guide describes platform views as a way to embed native views and apply transforms, clips, and opacity from Dart. Its macOS implementation uses hybrid composition, appending the native NSView into the view hierarchy. The same guide states that macOS platform-view support is not fully functional and that gesture support is not yet available.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Best Value
For a console, that means mouse and trackpad input is the main risk. Test pointer capture, keyboard focus, scrolling, and overlays on the Flutter version you ship before you commit the layout to an embedded view.
Hardware and host requirements
Apple’s overview names Apple silicon and Intel-based Mac computers as the platforms for the framework. The research behind this article did not establish a required model, memory size, or chip for any particular guest workload, so choose host hardware from your own guest sizes and the performance you measure.
The result of this is practical: a Mac is the only host the framework runs on, and anything beyond that is a sizing decision for your product.
Recommended order of work
- Build and sign a minimal macOS app with the virtualization entitlement, and confirm it can create a configuration.
- Implement the native service and the channel for start, stop, and status.
- Add one guest type end to end, then add the second.
- Decide on a separate console window or an embedded platform view based on the gesture tests you run.
- Test a signed, notarized release build on a clean machine.
Documentation for the framework and Flutter’s macOS platform views both change between releases, so check each step against the Xcode and Flutter versions you ship.
Quick Recap
“
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




