Update: QuerySimple & HelperSimple now run on Experience Builder 1.20 (r028.122)
The widgets have been rebuilt for Experience Builder 1.20, and this release also brings the largest QuerySimple feature update to date. If you have been waiting on 1.20 support, this is it.
Experience Builder 1.20 / JSAPI 5.0 support
The full suite now runs natively on ExB 1.20 with ArcGIS Maps SDK for JavaScript 5.0.4, Calcite 5.0, React 19, and Node.js 24 (tested on 24.16.0). This was a deep migration: DataRecord.getId() now returns a number, the __esri ambient namespace was replaced with explicit @ArcGIS/core ESM imports across the codebase, Calcite 5.0 event and input changes were applied throughout, and JSAPI 5.0 API swaps (for example geometryEngine.union() to unionOperator.executeMany()) were made end to end. All type-only changes, no behavior loss.
Note: this build targets ExB 1.20 and is not backward compatible with 1.19. If you are still on 1.19, the previous release on the Releases page covers you.
New in r028 (the headline features)
• Native map identify. Query results are now stored as real client-side feature layers instead of plain graphics. Visually nothing changes, but you can click any result on the map to open its popup, and clicking scrolls to and flashes the matching result card. A new setting toggles the flash. Results also participate in the native legend and layer list.
• Unified field-table rendering. The Customize display (pick your fields, show them as a table) now renders through one shared engine across the result card, the on-map popup, and the card-click popup, so they are finally identical: same fields, same order, formatted dates and numbers, decoded domains, same striped table. You can also set a per-field display label (alias) in settings, so a field like OWNER_NM can show as "Owner Name" without touching the data.
• Spatial mixed-geometry fix. An un-buffered spatial query with mixed input shapes (for example a polygon plus a line) previously kept only the highest-dimension shape and silently dropped the rest. Every input shape is now queried and the matches combined. If you used un-buffered mixed-shape spatial queries, re-run them.
• Sturdier Spatial tab. Drawn shapes survive switching between Draw and Operations modes, a new Draw-mode option folds current results into the draw input, and target-layer labels now match what you configured.
• Truncation notice. When a query hits a layer's max record count, an amber notice on the results panel names the actual matching total instead of silently looking complete.
Also added on the way to 1.20 (r027)
• Unified markdown template engine shared by QuerySimple and FeedSimple: {{field | filter}} syntax with 16 chainable pipe filters, markdown formatting, pipe-delimited tables, a visual Table Builder in settings, and a one-click migration button from the old {FIELD} syntax.
• Security hardening: HTML escaping on substituted values, dangerous URL scheme blocking (javascript:, data:, vbscript:), and SQL field-name validation in typeahead.
• Output data source conflict detection with a one-click "Regenerate IDs" fix for copy-pasted configs.
• Data source rebinding when a layer is swapped in the web map.
• Configurable widget header and a configurable subset of spatial relationships in the Spatial tab.
Get it
Latest release and per-widget downloads: https://github.com/MapSimple-Org/ExB-Simple-Public/releases/tag/QS-r028.122-FS-r005.018
Copy query-simple, helper-simple, and shared-code into your-extensions/widgets, then rebuild.
Tested on: Experience Builder 1.20.0, ArcGIS Maps SDK for JavaScript 5.0.4, Calcite 5.0.2, React 19, Node.js 24.16.0.
Feedback and issues welcome in this thread.