Skip to content
RemyDuijkeren edited this page Jun 6, 2026 · 35 revisions

Flowline is a Dataverse ALM CLI — structured workflow, Git-tracked solutions, and a fast push to DEV without the enterprise overhead.

Flowline is the opinionated successor to spkl: attribute-driven plugin registration that now supports Custom APIs, web resource push without spkl.json, a full Git-based ALM workflow, and modern PAC auth.

What sets Flowline apart

  • Scaffolded WebResources project. clone creates a web resources project with Rollup + TypeScript already set up — dist/ is automatically wired to push. Swap in any bundler you prefer.
  • Fast push for code assets. push syncs plugin assemblies and web resources directly to DEV without a full solution import. Use from a Flowline project, or point at a standalone plugin file and web resource folder.
  • Keeps Dataverse in sync with source. Plugin steps, images, and web resources missing from source are deleted on push — no manual cleanup. Use --no-delete to skip.
  • Dry-run everything. --dry-run previews every change before it touches Dataverse.
  • Human-readable sync summary. After sync, Flowline translates the git diff into a developer-friendly summary — entities and components added, changed, or removed.
  • Attribute-driven plugin registration. Decorate IPlugin classes with [Step], [Filter], [PreImage], [PostImage], and [CustomApi]; Flowline reads the compiled assembly and handles Dataverse registrations.
  • Plugins, workflow activities, and Custom APIs in one assembly. Flowline reads all supported types from a single assembly in one pass.
  • One-command environment provisioning. provision copies PROD to a fresh DEV or TEST environment — no manual admin center clicks.
  • Progressive adoption. push and generate work standalone — no .flowline config required. Start with flowline push on an existing project; adopt the full workflow when ready.
  • Modern auth. Flowline reuses the PAC CLI token cache. No passwords, no client secrets in scripts, no Windows Credential Manager.

Pages

Clone this wiki locally