Skip to content

06 Sync

RemyDuijkeren edited this page Jul 17, 2026 · 4 revisions

Sync

flowline sync exports the current solution state from DEV and unpacks it into the repo. Run it after making changes in the Maker Portal, XrmToolBox, or any other tool that modifies Dataverse directly — to capture those changes in source control.

See it in action

When to run

  • After modifying entities, forms, views, or business rules in the Maker Portal
  • Before committing — to make sure source control reflects what's actually in Dataverse

Plugins and web resources are source-driven: they flow from code into Dataverse via push, All the other stuff is environment-driven: sync captures solution metadata (entities, forms, views, relationships, roles, workflows, etc.) and flows it back into source control. This is a key part of the inner dev loop when working with Dataverse.

Usage

flowline sync                  # sync the solution configured in .flowline

After sync completes, Flowline prints a human-readable summary of what changed — entities and components added, modified, or removed, including attribute-level detail for entities, column changes in views, and option changes in option sets — so you can review the diff before committing.

So, no need to go through the git status or diff to see what changed, Flowline does it for you.

Sync summary output

A full CHANGES.md is also written to the project root on every successful sync. It contains the complete sub-item detail (all attributes, view columns, options) regardless of the terminal threshold, and can be committed alongside the sync checkpoint or used as the basis for a PR description.

CI tip: CHANGES.md stays untouched when there are no changes. You can use it as a filter for a deploy trigger, so no-op deploys can be skipped.

docs/DATAVERSE_CONTEXT.md is also regenerated on every successful sync — see 10-AI-Agents#dataverse-schema-context for what it contains and how AI agents consume it.

Then commit the result:

git commit -m "sync: add account validation form"

Managed solutions

By default, Flowline syncs only the unmanaged solution. If you plan to deploy to other environments as a managed package, pass --managed once to sync both the unmanaged and managed solution:

flowline sync --managed

The flag is saved to .flowline — all subsequent syncs include the managed export automatically. To revert, pass --managed false.

Warning

You need --managed if you intend to deploy to test, UAT, or prod as a managed solution.

Version bumping

Increment the solution version as part of sync with --bump:

flowline sync --bump patch     # 1.0.0 → 1.0.1 (default)
flowline sync --bump minor     # 1.0.0 → 1.1.0
flowline sync --bump major     # 1.0.0 → 2.0.0
flowline sync --bump none      # 1.0.0 → 1.0.0 (no change)

Options

Option Description
--dev <url> Development environment URL — only needed on first run; saved to .flowline automatically
--managed Export and unpack the managed solution in addition to unmanaged — only needed on first run; saved to .flowline automatically. Pass --managed false to revert.
--bump <component> Version component to increment: patch, minor, major, or none to skip bumping
--no-build Skip the dotnet build validation step

--no-build: Skips the post-sync build that validates the synced source compiles cleanly. Useful when iterating quickly and you know the build is clean, or when running sync in a CI step that handles build separately.

Daily dev loop

flowline push      # push code changes to DEV
# ... make changes in Maker Portal ...
flowline sync      # pull Dataverse changes back to source
git commit -m "feat: add validation"
flowline deploy test

See 03-Command-Reference#sync for the full option reference.

Clone this wiki locally