Web AppBuilder Migration Assistant

A Python tool that prepares ArcGIS Experience Builder candidates from Web AppBuilder configurations. It reuses existing web maps, translates supported widget settings, and records changes and unfinished work for review.

My contribution

I built the migration rules, orchestration, diagnostics, and validation for this independent prototype; Esri supplies the Experience Builder runtime and template. The tool produces candidates for review, not finished replacements. It has not been used for a production migration, and time savings have not been measured.

Result: In the recorded v0.6 validation run on September 27, 2026, 306 automated tests passed. A candidate generated from a public application retained its 21 configured Query tasks; one Query workflow displayed 52 results in Esri’s native runtime, and a controlled Table test displayed 441 records with three permitted columns.

Tools

  • Python
  • ArcGIS Online
  • ArcGIS REST API
  • Experience Builder
  • JSON
  • SQL expression translation
  • unittest
  • SHA-256

Version 0.6 targets 2D ArcGIS Online applications and a pinned Experience Builder template. It does not reconstruct every source layout, custom widget, or interaction. Authenticated draft upload, Builder edit and save behavior, mobile equivalence, and a complete replacement workflow remain unverified, and no production deployment is claimed.

How a migration runs

The generated candidate is an intermediate deliverable. The workflow keeps the connection to the source web map, translates the settings it supports, and records the work that still needs a person before the candidate can replace the source application.

Source app, web map, and service definitions feed a binding plan and supported adapters, which produce a candidate and an unfinished-work report for manual review
Workflow illustration of the local process and its manual review boundary, not an application screenshot. Scroll horizontally to explore the diagram.

What the adapters translate

These are configuration capabilities with explicit boundaries; their presence does not establish complete source-to-target behavior equivalence.

  • Source inspection: the application configuration, eligible widget resources, an accessible web map, and an inventory of unresolved settings.
  • Search: supported explicit feature-layer and locator sources, field bindings, labels, and compatible result limits.
  • Filter: supported structured predicates, map-layer bindings, and selected activation and prompt settings.
  • Query: supported tasks, predicates, result fields, output data sources, and Map display and zoom actions.
  • Attribute Table: explicit layer and column choices, supported selection and extent settings, and export-menu controls.

Designed to fail visibly

  • Versioned adapters: the target template and supported configuration structures are pinned, and conversion rules validate their inputs and target references before applying changes.
  • Relationships, not just widgets: filter bindings resolve the actual map-layer identity, and Query tasks receive their own output data sources and the references needed for map interactions.
  • Reviewable rejections: unsupported settings block the affected transformation and produce diagnostics, and source, map, metadata, and template fingerprints detect plans whose inputs have changed.
  • Explicit table behavior: generated columns are read-only and actions that could create extra table sheets are disabled, with the limitations reported. Service permissions are not changed.
  • Integrity is not behavior: checksums detect changed package files, while browser observations establish only the interactions that were exercised.

Recorded validation, September 27, 2026

These results describe specific tests of version 0.6, not a general migration success rate. A separate real-source Table case remained blocked because its subtype layer required unsupported handling.

Recorded results for version 0.6
ResultWhat was established
306 automated tests passedLocal tests covered transformations, expression behavior, data-source references, package integrity, preview routing, and mocked upload behavior.
21 Query tasks retainedA candidate generated from a public application kept its 21 configured Query tasks. Not all 21 were tested interactively.
52 Agriculture results displayedOne Query workflow ran in Esri’s native runtime. Selecting a result also zoomed to and highlighted its district.
441 records in a controlled Table testSynthetic widget settings against a public map produced three permitted columns, multiple selection, and a two-row selected-record view. The hidden ObjectID was excluded from the column menu, and no export menu was visible.
Technical details

Independent project · Working prototype, version 0.6 · September 2026

A web application stores behavior across its configuration, widget settings, web map, and service definitions. A widget label alone does not describe its field requirements, data connections, or interactions with other widgets, so migrating an app means reconstructing search sources, filter expressions, query outputs, table columns, and widget interactions, not only reconnecting its map.

  • Capture the source application configuration and accessible web map, inventory its widgets, and read eligible public service definitions.
  • Pair supported source widgets with target components in a binding plan.
  • Translate supported settings with deterministic adapters into a pinned Experience Builder 1.21.0 Foldable template.
  • Write the candidate configuration, a change log, a migration report, and package checksums, with explicit diagnostics for unsupported or ambiguous settings.
  • Optionally request a private unpublished draft through the ArcGIS API for Python; that path has been tested with mocks only.

Image viewer

100%