Parcel Drafter widget ported from Web AppBuilder to Experience Builder
The WAB Parcel Drafter widget has no Experience Builder equivalent. I ported it as a custom widget for ExB Developer Edition 1.21. Posting for community testing.
GitHub: https://github.com/brianmcleer/parcel-drafter-widget (source and downloadable releases). The install zip is also attached to this post.
Background
This has been an open request for years:
- The custom widgets thread opened in December 2023 with Parcel Drafter described as the only thing keeping organizations in WAB. The WAB/ExB functionality matrix lists the capability as planned for "a future focused editing web product" - nothing shipped.
- The ExB Ideas submission (April 2024) has 37 kudos and remains Open, with comments through July 2026 from counties, cities, and military/civil engineering describing assessor, auditor, planning, and real-property workflows that depend on it. Requirements called out there: snapping to points and vertices, radius/tangent/chord bearings, arc and chord length, and misclose parameters - all covered below.
- On the ExB 2026 roadmap blog, the product manager confirmed in June 2026 there are no updates on this widget, and requests are still being posted in the comments.
One recent comment on the idea sums up the situation: a temporary custom widget is needed to bridge the gap. This is that widget.
Features
- New traverse: start point by map click or typed coordinates; bearing / length / radius entry with live drawing
- Bearing formats: S20-25-25W, 20-25-25-3, dd.mmss, decimal degrees; * copies previous line; *tb continues tangent to previous line or curve
- Boundary and connection line types with configurable default
- Misclose bearing, distance, ratio, and calculated area; compass rule applied within configured snap distance/ratio
- Rotation and scale by text entry or map drag around an anchor point
- Drag or arrow-key reordering of traverse legs
- Start point and digitize clicks snap to configured layers within tolerance
- Edit traverse: closed parcels selected via polygon footprint; unclosed via connectivity walk from clicked line; lines ordered end-to-start
- Edit save updates the existing polygon feature and replaces its lines (delete + add in one applyEdits); new save creates features
- Settings: map selection, three target layers with related line/point layers auto-detected from the polygon layer's service, COGO field dropdowns from the layer schema, attribute settings (fixed fields, webmap popup fields, or custom list with aliases), misclose and snapping config
Technical notes
- Surveying math (Vincenty geodesics, arcs, misclose, compass rule) ported directly from the WAB source
- Geometry services load at runtime via loadArcGISJSAPIModules: modern operator modules (projectOperator, geodeticAreaOperator, etc.) first, classic projection/geometryEngine fallback on older SDKs. The classic modules are removed in the SDK versions current ExB ships with
- Projection works in any organization spatial reference; drag-rotate/scale is not limited to Web Mercator as in WAB
- WCAG 2.1 AA: programmatic names on all controls, traverse grid exposed as a table with per-line labels, errors via role=alert and aria-describedby, live region for misclose updates, Escape exits map tools, keyboard reordering, info-icon tooltips on every setting and metric, Calcite-aligned jimu theme tokens
Known gaps
- English strings only (WAB shipped 30+ locales)
- No per-line-type symbol picker in settings; symbols configured in config.json
- On edit save, existing node points are not modified (points are not tracked by object ID); points are created on first save only
Requested testing
- Curve-heavy descriptions: major arcs, negative chord lengths, back-to-back *tb curves
- Non-Web-Mercator spatial references
- Edit-then-save against production parcel layers: confirm polygon object ID is unchanged and line count is correct
- Misclose behavior near configured snap thresholds
Report parsing errors, geometry placement issues, or console errors in the comments, or open a GitHub issue.
Changelog
8/4/2026:
Collaboration
Polk County, Oregon built their own Traverse widget for Experience Builder (Nicholas Cramer @ncramer11 and Eric McAvoy @polkor_mcavoye ) . Community post: https://community.esri.com/t5/experience-builder-custom-widgets/traverse-widget-1-0/m-p/1706412 and repo: https://github.com/ncramer11/traverse
Theirs is a scratch pad for quick precise drafting and export. This one is for maintaining an existing parcel data source.
Ported from their Traverse widget:
- Chains and rods suffixes (ch, rd) for mixed-unit deed calls
- Bearing and distance labels on each line, toggleable
- Snapping to all visible feature layers via SketchViewModel, toggleable
- Popups suppressed while a map tool is active
- GeoJSON export with densified curves
- Session color override
- Numpad entry flow. Numpad + advances bearing to length and commits the line, numpad / jumps to radius, focus returns to bearing
Legal description support (Assessors' Handbook 215):
- Links and varas suffixes (lk, va)
- Bearings paste straight from record documents. N45°30'00"E parses the same as N45-30-00E
- Draft metes and bounds legal description export. Commencement tie, Point of Beginning, thence courses, curve radius/arc/chord language, closing acreage. Marked draft, review required
Bug fix from Polk County's testing: clearing a traverse left the labels on the map. Fixed.
Requested testing
- Snapping against dense parcel fabrics
- Numpad flow for high-volume entry
- Legal description output against real deed language, especially curves
- Chains, links, rods, varas against historic descriptions
Issues in the comments or on GitHub.