There are two kinds of Power Automate cloud flows. Solution-aware flows live inside a Dataverse solution. Non-solution flows - loose flows - live outside of solutions entirely. The difference determines whether you can govern, deploy, and manage the flow, or whether it's a one-off artifact tied to a single person in a single environment.
TL;DR
Solution-aware Power Automate flows can be exported, version-tracked, and deployed across environments. Loose flows cannot. Enable the "Create in Dataverse solutions" tenant setting and migrate existing loose flows using PowerShell or the manual add-to-solution method. Loose flows are technical debt waiting to break.
Most citizen-developer flows are loose. The maker clicked "Create" from the Power Automate home page, built the flow, saved it, and moved on. It works. It runs. It does what they need. But it exists outside of any solution, which means it exists outside of your ALM pipeline, outside of your governance model, and outside of your ability to manage it at scale.
What Makes a Flow Solution-Aware in Power Automate?
A solution-aware flow is a cloud flow that exists inside a Dataverse solution. This means it participates in the standard Power Platform ALM lifecycle: export, import, version tracking, connection references, and environment variables. Any flow created outside a solution is considered "loose" and lacks these capabilities entirely.
Solution-Aware vs Non-Solution Flows
Here's what you gain when a flow is solution-aware, and what you lose when it's not:
| Capability | Solution-Aware Flow | Non-Solution (Loose) Flow |
|---|---|---|
| Export/import between environments | Yes, through solution transport | No. Must be manually recreated or use legacy zip export |
| Connection references | Yes. Connections abstracted for multi-environment deployment | No. Connections hardcoded to the maker's account |
| Environment variables | Yes. Config values change per environment | No. Values hardcoded in the flow definition |
| Managed solution deployment | Yes. Lock down the flow in production | Not available |
| Version history | Yes. Drafts and versioning GA since February 2025 | No version history |
| Save as draft | Yes. Save incomplete work without publishing | No. Every save is live |
| Source control via solutions | Yes. Export solution, commit to git or Azure DevOps | Not possible |
| Dataverse-backed run history | Yes. Run history stored in Dataverse for richer reporting | Run history in legacy storage only |
| Admin visibility | Visible in solution explorer, easier to inventory | Harder to track, must use admin APIs or PowerShell |
| Owner leaves the organization | Can be managed through solution ownership and sharing | Flow becomes orphaned. May stop running. |
The gap isn't subtle. A loose flow is a dead end for governance. You can't move it between environments through the standard ALM pipeline. You can't deploy it as part of a managed solution. You can't use connection references or environment variables. When the maker who built it leaves the organization, the flow becomes an orphan - still running (maybe), but nobody knows how to edit it because the connections are tied to a user account that no longer exists.
Why Loose Flows Are Dangerous
The orphan problem deserves its own section because it's the most common way loose flows cause real damage.
Here's the scenario. A maker builds a flow that sends daily sales reports to the VP. It uses the maker's Outlook connection to send the email and the maker's SharePoint connection to read the report data. The flow runs every morning at 7 AM. It works perfectly for 18 months.
Then the maker leaves the company. Their account is disabled. The Outlook connection fails because the user no longer exists. The SharePoint connection fails for the same reason. The flow starts failing silently. Nobody notices for two weeks until the VP asks why they stopped getting reports.
Now what? The flow isn't in a solution. You can't export it. You can't import it into another environment. The connections are dead. An admin can add a co-owner to the flow, but the new owner still needs to recreate every connection. If the flow is complex - branching logic, error handling, parallel branches - reconstructing it takes hours.
If the flow had been in a solution with connection references, the fix would have been: update the connection reference to point to a service account or another user's connection. Five minutes, no flow editing required.
Loose flows are technical debt
Every loose flow in your tenant is a future problem. It might work today. It will break when the owner leaves, when you need to move it to a new environment, or when you need to audit what it does. The only question is when, not if.
How to Make Existing Flows Solution-Aware
You have two options for migrating existing loose flows into solutions: manual (one at a time) or bulk (PowerShell).
Manual: Add to a Solution
- Open Power Automate and navigate to Solutions Sign in to make.powerautomate.com. Select Solutions from the left navigation.
- Open your target solution Select the solution where you want to add the flow. If you don't have one, create a new solution with your publisher prefix.
- Add existing > Automation > Cloud flow Click Add existing, then Automation, then Cloud flow. You'll see two tabs.
- Check the Outside Dataverse tab Non-solution flows appear on the Outside Dataverse tab. Solution-aware flows appear on the From Dataverse tab.
- Select the flow and add it Select the flow you want to migrate and click Add. The flow is now solution-aware.
Not all loose flows can be added
Some non-solution cloud flows can't be added to a solution due to known limitations. Flows with certain connector types or configurations may not be compatible. Check Microsoft's current documentation on solution limitations if you encounter errors.
Bulk: PowerShell Add-AdminFlowsToSolution
For tenants with hundreds of loose flows, the manual approach doesn't scale. Use the Add-AdminFlowsToSolution PowerShell cmdlet to migrate many flows at once.
# Install the Power Apps admin module if not already installed
Install-Module -Name Microsoft.PowerApps.Administration.PowerShell
# Migrate flows to a solution
Add-AdminFlowsToSolution `
-EnvironmentName "your-environment-id" `
-SolutionId "your-solution-id"
The cmdlet accepts parameters to target flows by name or ID, so you can migrate in batches rather than all at once. This is the recommended approach for large-scale migrations.
Make All New Flows Solution-Aware by Default
This is the single most impactful tenant setting for Power Automate governance. When enabled, every new cloud flow is automatically created inside a Dataverse solution. No manual step required. No reliance on maker discipline.
- Open Power Platform admin center Navigate to admin.powerplatform.microsoft.com.
- Select the target environment Go to Environments and select the environment you want to configure.
- Navigate to Settings > Product > Features Open the environment settings and find the Features section under Product.
- Enable Cloud flows under 'Create new canvas apps and cloud flows in Dataverse solutions' Toggle the Cloud flows option to On. This ensures all new flows are solution-aware by default.
- Repeat for every environment Apply this setting to all environments where makers create flows.
New environments have this enabled by default
As of the current Power Platform release, all new environments provisioned with a Dataverse database have the Cloud flows setting enabled by default. You only need to manually enable it on older environments that were created before this default changed.
Get more Power Platform governance insights
I share hands-on ALM patterns, solution architecture tips, and governance strategies for Power Platform teams. Follow me on LinkedIn for weekly deep dives.
Connection References and Environment Variables in Solutions
Solution-aware flows use connection references and environment variables to abstract authentication and configuration from the flow definition. The flow stays identical across dev, test, and prod -- only the connection mappings and variable values change per environment. See the environment strategy article for the full setup, naming conventions, and a worked example across three environments.
Managed vs Unmanaged Solutions
This is a common source of confusion. When should you use managed solutions, and when should you use unmanaged?
| Aspect | Unmanaged Solution | Managed Solution |
|---|---|---|
| Editable in target | Yes. Anyone with access can modify | No. Components are locked down |
| Use in dev | Yes. This is your working copy | No. You don't import managed into dev |
| Use in test | Sometimes, for flexibility during UAT | Yes, for production-like testing |
| Use in prod | No. Too risky. Anyone can break it | Yes. This is the standard for production |
| Can be uninstalled | Components remain after removal | Clean uninstall removes all components |
| Version tracking | No formal versioning | Version numbers tracked on import |
The standard pattern: develop in an unmanaged solution in your dev environment. Export as managed. Import managed into test and production. This ensures production flows can't be edited directly. Changes must go through the dev environment and the ALM pipeline.
Flow Drafts and Versioning
Since February 2025, solution-aware flows support drafts and versioning. This is a significant capability gap that loose flows don't have.
With drafts, you can save an incomplete flow without it going live. Make changes, save as draft, come back later. The published version continues to run while you iterate on the draft. When you're ready, publish the new version.
Version history shows every published version. You can review previous versions, see what changed, and understand the evolution of the flow over time. This is basic version control that every other software development discipline takes for granted. Power Automate now has it for solution-aware flows.
Loose flows have neither drafts nor versioning. Every save is immediately live. There's no way to save work in progress. There's no history of previous versions. If you save a broken change, it's immediately live and running.
Limitations and Known Issues
Solution-aware flows are the right choice, but they're not without limitations:
- Some connectors have limited solution support. Check the connector documentation for solution awareness.
- Migrating existing loose flows may require rework. Flows with certain trigger types or connector configurations may need adjustments after migration.
- Connection references require planning. You need to set up connection references before deployment, not after.
- Not all flow features work identically in solutions. Test thoroughly after migration.
- Legacy zip export still works for loose flows but isn't recommended for production ALM.
Despite these limitations, the direction is clear. Microsoft is investing heavily in solution-aware flows. Drafts, versioning, Dataverse-backed run history, and the default creation setting all point toward solution-aware as the standard. Loose flows are the legacy.
The Migration Priority
You don't need to migrate every loose flow today. Prioritize:
- Business-critical flows that support core processes. These need ALM and governance first.
- Flows owned by people who might leave. Reduce orphan risk.
- Flows that need multi-environment deployment. Solution awareness is a prerequisite.
- Everything else. Work through the backlog over time.
For personal productivity flows that a single user runs for themselves, the risk of leaving them loose is low. Focus your effort on the flows that matter to the organization.
Power Automate Governance - The Enterprise Playbook
This article is part of a 10-part series:
- Naming Conventions That Scale
- Environment Strategy - Dev Test Prod
- Solution-Aware Flows
- Flow Inventory
- Pipelines - Dev to Prod
- CoE Starter Kit
- AI-Powered Flow Review
- Versioning and Source Control
- The Governance Repo
- Weekly Governance Digest
AZ365.ai - Azure and AI insights for architects building on Microsoft. Follow Alex on LinkedIn for architecture deep dives.
This article was originally published at az365.ai. I'm Alex Pechenizkiy, an Azure and Power Platform solutions architect writing honest, vendor-neutral analysis of the Microsoft AI stack. More at az365.ai.
Top comments (0)