Experience Builder Tips and Tricks

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Latest Activity

(86 Posts)
JeffreyThompson2
MVP Frequent Contributor

A few months ago, I wrote about a Public Notification Application I was working on and a weird, mostly functional workaround for making printing work the way my users wanted it. Well, I'm going to talk about that application again and another weird, mostly functional workaround for making printing work the way my users wanted it.

That application I made back in November fell short of the design requirements in three ways:

  • The user interface was clunky.
    • With multiple maps and an always on Near Me listener, it just was not a good user experience.
  • The users needed to be able to select multiple parcels or zoning areas at once to use as their selection areas.
  • The users needed to make a print out with a second overview map.
    • In my original post, I mentioned an ArcGIS Pro Add-In I am competing with and that I could not possibly meet it's full capabilities. This was what I was talking about. I had no idea how to make this happen.

Thanks to some recent events, I am revisiting this application and I have a path for addressing all of these issues. I also mentioned a personal goal that I would not make any Widgets for this application and it would have been great if I had worded it in that very specific way because I could say I meet my goal. If I bend my words like this...

  • I would not make any Widgets for this application.
    • I made @Brian_McLeer make Widgets for this application.
      • A big part of what kicked off this new attempt at this application was when Brian added shapefile exports and extracting map features to the Draw Widget.
      • I encouraged him to make it possible to extract multiple features at once and optionally merge them together.
      • I also encouraged him to make Draw features sendable to his Mailing Labels Widget and my upcoming rebuild of my Identify Widget.
  • I would not make any Widgets for this application.
    • As mentioned above, I am finalizing work on a new version of my Identify Widget. I'm really proud of it. I think you'll like what it can do.
  • I would not make any Widgets for this application.
    • The actual subject of this post isn't exactly a Widget, at least it's not like any Widget I've made before. It's a separate webpage inside, but also outside, of the Experience Builder framework.

...And with that annoyingly, long introduction, let's get to the actual subject of this post: You can make dynamic webpages within Experience Builder.

What do I mean by a dynamic webpage? It's a page built on-demand to highlight some arbitrary content. Go to Generic Shopping Website Of Your Choice and click on one of the items. Now, click another item. See how those pages look similar. They have different names, prices, pictures and so on, but the layout is the same. All the stuff is in the same place. Think about how many things Generic Shopping Website Of Your Choice has for sale. They didn't pay somebody to make a new page for each of those things. They have a database of items and when you click on one of them the site uses that data on a template to make the item page.

Experience Builder tries to sell itself as a competitor with Wordpress and Squarespace. A full featured website builder that just happens to be more map/data focused. My biggest complaint with that characterization and what I think keeps Experience Builder from being a true full featured framework is the lack of support for dynamic webpages. You can't build Generic Shopping Website Of Your Choice with Experience Builder.

Are we supposed to be talking about printing with an overview map? What does any of this have to do with that? Back at DevSummit, I was having a chat with Joey Harig (other people were also involved in the conversionation, but the idea came from Joey) about this issue and he suggested using a HTML page to load this second overview map.

So that's how this Widget works. The Widget part of this Widget is little more than a link to the HTML page where the JavaScript on that page does most of the work. And I do mean JavaScript, this page isn't TypeScript, TSX or JSX, or React. None of this is complied. In my src/runtime/assets folder, based on this sample widget, I have a set HTML, JS and CSS files just liked you'd see in baby's first website. Other than Joey and the author of the Use Assets Sample Widget, I also have to give a lot of credit to Microsoft Copilot.

Recently, I have been going to generative AI early in the development process for things I know must be solved problems, but I personally don't know how to do. So, I gave Copilot the task of opening a link in a new tab, sending it a data package, and reading it on the other side. It took several iterations, I improved the error handling, and this Widget still isn't flawless. Sometimes the HTML page will not receive the screenshot of the primary map and you will need to close the page and press the button again. I assume it's some sort of race condition problem, but I called it good enough for my purposes and didn't investigate too thoroughly. If you manage to find the problem, please let us know.

The data sending function in widget.tsx looks something like this:

	const sendData = async () => {
		const child = window.open(`${props.context.folderUrl}dist/runtime/assets/child.html`, "_blank")
		if (!child) return

		const payload = {
			data
		}

		// One-time handshake
		const channel = new MessageChannel()
		channel.port1.onmessage = (e) => {
			if (e.data?.type === "ACK") channel.port1.close()
		}

		// Send to child (same-origin recommended; validate on receiver)
		child.postMessage(payload, location.origin, [channel.port2])
	}

With the receiving function in the JS file looking something like this:

const ac = new AbortController()
let attempts = 0

const receiveData = (ev) => {
  //error handling
  attempts++
  if (attempts > 5) {
     failFunction()
     ac.abort()
  }
  if (ev.origin !== expectedOrigin) return
  if (ev.source !== window.opener) return
  //If data received
  ev.ports?.[0]?.postMessage?.({ type: "ACK" })
  const data = ev.data.data
  processData(data)
  ac.abort()
}

window.addEventListener('message', receiveData, {signal: ac.signal})

With the processData() function adding some text to the page and loading another Map Component, adding an extent indicator to it, taking a screenshot of it and removing itself. Feel free to look at the actual code for the details.

In an earlier draft, I attempted to send the entire MapView object to the HTML page with the intent that I would attach it to a Map Component in the child page. In order for the data package to be sent between tabs, it must be serialized into JSON and the MapView object is just too complicated for that to work. I also tried to get Copilot to chop the MapView into serializable portions and re-assemble it on the other side, but whatever Copilot made just didn't work and I abandoned the concept for a simpler screenshot transmission. I'm pointing this out so you know what kind of problem you would need to solve if you wanted to transmit a map in some other Widget or modify this Print Widget for more complicated map surrounds like a Legend or Scale Bar. 

Somewhere around here, I realized what I had just done. I made a dynamic webpage. I could make Generic Shopping Website Of Your Choice like this. Imagine a Custom List Widget and clicking on a item would open an entire page of data related to that thing. You could do that. And this blank sheet of HTML, isn't bound by any of the restrictions of the Experience Builder framework. (It also doesn't have any of the benefits of the framework.) Want to bring in a map from another Portal? Don't see any reason it wouldn't work. Hack a feature from a new version of the JavaScript SDK into an old Enterprise Portal? Should be able to do that, too. The only limit is your imagination (and what objects you can serialize).

Ok, so we've talked about how this Widget works. Let's talk about the Widget itself. As I have been alluding to, this isn't exactly a full featured replacement to the standard Print Widget. (That's part of why it's on this blog and not over in the Custom Widgets Group. I see it more as a teaching demo than something you will actually use.) It's designed to make one fairly simple page layout that just happens to include an overview map. If you want to use this yourself, you'll probably need to make some modifications in the code base to make it work the way you want it.

If you still want to use this, you'll need to go to your Portal and create a Webmap to use as the Overview Map. You'll also need to make OAuth 2.0 Credentials. (Remember: This HTML page doesn't know you're using Experience Builder, so the Portal doesn't know who you are.) I suggest restricting this token to just your Overview Map to limit potential security risks. You'll also need a logo at some URL your page can access. Get the Item ID of the Overview Map, the Client ID of your OAuth Credentials, the URL of your logo and some disclaimer text and put it in the Builder.

JeffreyThompson2_0-1776965441169.png

The end user will add a Title, their name, and a map description in the Widget interface and press a button.

JeffreyThompson2_1-1776965555168.png

And they should be rewarded with a print out that looks something like this:

JeffreyThompson2_2-1776965655804.png

I hope you all find lots of cool weird stuff to do with this trick. And remember the proper way to fix a printer.

200.gif

more
1 0 141
ShareUser
Esri Community Manager

Have you ever made some experimental changes to a published app in the builder, solemnly promising to yourself that you would not click Save… and then—oops—you clicked Save anyway🤦

Here’s how to revert the changes saved in your draft and bring it back in sync with your published app.

Read more...

more
1 1 188
JeffreyThompson2
MVP Frequent Contributor

Don't think too much about the publish date. It's possible to make thematic layer groups in Experience Builder now without a Custom Widget. (Now meaning after the February 2026 ArcGIS Online update, Developer Edition 1.20, or Enterprise 12.1.) If your thinking I've written this post before, it's because I have, but seriously it actually works this time. You can read the linked article if you want. There really isn't any new information in this post except that it actually does what that build was meant to do now. Here's the critical info from that post:

I've grabbed basically every layer on that server that falls into these categories: Demographics, Natural Disasters, Animals and Cryptids, and I will try to make Experience Builder recognize these categories.

In Experience Builder, I am starting with the Pocket Template and I've added my webmap to the Map Widget. This Template has a big Placeholder Widget on the right side of the screen where I've added an Accordion Widget. If I was using a smaller number of categories, I would probably use a Section or Grid Widget instead, but somewhere around three or four an Accordion starts to make more sense.

And into the Accordion, I'll add a Map Layers Widget. I'll rename this Widget to Demographics. Then, I'll Customize Layers. I'll use the handy new layer toggle to turn off all the layers at once. Then, I'll turn back on just the demographic related data. For the other options in this Widget the most important thing is: Enable Layer Batch Options.

JeffreyThompson2_0-1775053531781.png

Let's pick up where we left off last year and finish this build. I'll click Duplicate on my Demographics Map Layers Widget, rename it to Disasters and change the layer customization so that I remove all the demographic data and add all the disaster data to the list of layers.

Screenshot 2026-04-01 093439.png

 

 

 

 

I'll do this again for Animals and Cryptids. As we all know, Cryptids are very real animals that The Man doesn't want us knowing about, so these categories overlap with all Cryptids being Animals, but not all Animals being Cryptids. I'll open up Preview Mode and test this out and...

Sorry, for the cliffhanger, ESRI Community is having a bad day and deleted the rest of this post that I will re-write now...

Screenshot 2026-04-01 094239.png

It works as intended. Why is there no trust on the first day of April? I can even see The Man's definition of animals in four clicks.

I also wanted to include an All Layers Map Layers Widget and here I encountered a small problem. When I attempted to Duplicate one of my other Map Layer Widgets and turn off the Customize Layers switch, the Batch Layer options did not work at all. But it worked fine when I tried again using a fresh Map Layers Widget.

Look, the UI on this isn't great. It's not something I would be satisfied putting out on a publicly facing application. But it is adequate enough for an internal application. At DevSummit, I discussed the interface of the Bookmarks Widget and how it could make a much better thematic layer switcher, if they allowed for bookmarks that don't change the map extent. Maybe look forward to that in a future update. But for now, this is the best native way to handle thematic layer groups in Experience Builder.

more
3 1 215
JeffreyThompson2
MVP Frequent Contributor

Ethical rules: Not everyone talking to me over the course of the week knew I am a journalist. (Am I a journalist? I might be a journalist now.) And people, including ESRI staff, tend to speak more freely at DevSummit than they would in official communication. I certainly do not want to misattribute quotes to anyone or damage anyone's career because they chose to chat with me, so all ESRI staff will simply be referred to as ES. Any quotes, anything at all really, in this post should be considered poorly remembered paraphrasing, rather than a direct quotation. Everyone explicitly mentioned in this post as agreed to appear in it or has an estimated net worth of greater than $10 billion.

I didn't really want to do this again. This post I mean, not DevSummit. DevSummit is great. But so much has happened this week that you guys need to know about, so here we go. Here's all the stuff that happened in Palm Springs this week. I actually started writing in the Palm Springs airport, but there is no way I'm getting this all done before I'm back in Arlington.

There are two big differences in how I experienced DevSummit this time around. One was just having a general idea what to expect. The other was people knew what I looked like. While I managed to slip around as an anonymous attendee last year, I was decidedly not anonymous this year. I was recognized by strangers on multiple occasions which is a weird experience, not necessarily bad, just weird. One person, ES btw, even stopped me for a selfie.

My main topics for the week were Experience Builder, the JavaScript API, Accessibility and Design, and AI, so let's group these notes that way. And then we'll get to a few notes about other ESRI products and just general conference and travel stuff.

Experience Builder

  • Me: We need better developer documentation. ES: We'd love to do it, but between hitting full WebAppBuilder parity, switching to Components and adding AI we don't have the capacity. Me: What if you let an AI write it? ES: Maybe we could do that and soon there will be a chatbot on the doc site to help you find stuff.
  • I convinced them that a Button in a Widget Controller should just work like a Button.
  • I also discussed making Bookmarks that don't change extent. They had previously rejected this idea because it undermines the core usage of the Bookmarks Widget, but they are re-opening it after I talked about how it could make a great UI for switching thematic layer groups.
  • Asked for pre-set date range options for the new Date Filter Widget.
  • Me: Could we set up a system where users like me can submit Widgets to be included in the package as unofficial Widgets? ES: Never going to happen.
    • @SunshineLuke90's idea of an ESRI managed GitHub repo for user Widgets might happen though. 
  • I also had a lengthy chat with @SunshineLuke90  about his CLI tool and sharing Custom Widgets through npm.
    • I think using npm as a sharing system has a lot of merit and I'm interested in trying it out.
    • Note that you are going to run into a lot of hassles if you try to download Widgets from npm without using the CLI tool.
  • Developer Edition 1.20 scheduled for March 25th release.
  • Me: My pre-1.19 Custom Theme still works, but isn't selectable in the Builder anymore. ES: We didn't test for that. I think we can fix that.
  • Release the Snyder Cut Theme Tester Template.
  • Now that we can move the Map Tools around. Keep the most important ones in the top-left.
    • Leave the bottom-left empty, if you are using a Scale Bar. It can't be moved.
  • ES: Between AI and Components, I don't know how much longer we will need a product like Experience Builder.
    • Spicy take. I see how that could happen one day, but AI is a long way from being able to match the precise customization of Experience Builder and Components still have a barrier of entry too high for many users.
  • It's possible to use URL Parameters to share layer visibility.
  • ES: Should we stop doing breaking changes every release? Me: Yeah, that would be nice.
  • There is a specific method for sharing a Widget Git repo. I don't feel confident enough in my own notes for writing the method here, but it exists and it was described in the Advanced Customization session.
  • My series where I go over the updates each ArcGIS Online release is apparently very popular with the product team.
    • Seriously, I'm just re-writing your words.
  • In a previous blog post, I described a Public Notification App I worked on to get some of our users to give up ArcGIS Pro. The biggest hurdle that I had no solution for was not being able to print a zoomed out overview map to pair with the standard map. I am leaving the conference with the conceptual outline of a Custom Print Widget that can do that.
    • If any of my managers or taxpayers are reading this, this alone should easily pay for the price of the trip.

JavaScript API

  • The 6.0 release of the JavaScript SDK (Experience Builder 1.23) scheduled for release Q1 2027 is shaping up to be the Custom Widget apocalypse.
    • If you are using only using Experience Builder and not using Custom Widgets, do not worry about this sub-section. Don't read the next sentence, it's not for you and will only cause unnecessary fear.
    • You should know by now that Widgets are going to be removed.
      • All of them. Gone.
      • Widgets are no longer getting new features.
    • What I had not seen previously is that the Widget View Models will all be moving messing up all your import statements.
      • If, for example, you have created a Custom Draw Widget based on the SketchViewModel, it is doomed to fail early next year.
        • And they haven't even decided where it's moving to yet.
    • If that's not enough messing with imports for you, using require() and the __esri type namespace are also going away.
    • All these breaking changes and more coming soon to a JavaScript API near you.
      • But breaking changes only once a year now.
  • Use the @arcgis-create npm package to quickly scaffold a new application.
  • 95% of the day one Plenary was about 3D and AI, but the big applause line was true curves.
  • Coming Soon to an API near you:
    • Support for sharing selected features over multiple Components. 
    • There will be an archive documentation site for viewing documentation of older versions of the API. Ya know, like there used to be.
    • And an AI bot to help you read the documentation.
    • Additional fonts for labelling and support for a number of East Asian and indigenous Canadian languages.
    • Symbol-level drawing for nice looking freeways and stuff.
    • Animate along a line.
    • Improved valve isolation tracing for Utility Network.
    • Caching can currently cause relative time queries to return old data. In the future, you'll get the correct data.
    • Better performance with complex geometry.
    • The One Measurement Component To Rule Them All.
  • Stuff I pushed for:
    • Brought back up the idea of making hitTest() a variable.
    • Add a before-edits event as an option to add validation or to inject a value hidden from the user.
    • Add an optional on/off switch to the Editor Component.
      • I think this would really be handy in Experience Builder land.

Accessibility and Design

  • I've grouped accessibility and design because there is a whole lot of overlap between meeting accessibility standards and stuff that looks good.
  • Start building with accessibility in mind. It is much harder to go back and add it in later.
  • Build in short-cuts to the most important functions.
  • Don't hardcode sizes so things can scale.
    • Not really a choice in Experience Builder, but good general advice.
  • Make sure your design doesn't become unusable even at 200% scaling.
  • Basemap labels are not current capable of scaling.
  • Round off your numbers.
    • Don't annoy people with screen readers.
    • It doesn't look good.
    • You didn't really measure that to 10 billionths of an inch, did you?
  • Enhanced Contrast and Human Geography are the best basemap options for accessibility.
  • If you replace text with an image, like in a logo, you really, really need to have alt text.
  • All ESRI app builders have a text/background contrast checker in their Theme settings.
    • Make sure to listen to them.
    • They only check at the Theme level, if you make a change at a lower level, you are on your own.
  • Use a strict H1 to H6 ordering of your headings.
    • You can modify the size and other appearance attributes without breaking any rules.
    • Don't get lazy and use H4 for all your second level headings like I do for all my blog posts.
      • Please don't sue me.
  • Group elements in Dashboards and Experience Builder to improve tab ordering.
  • The Send To Back/Front options in Experience Builder affects tab ordering.
  • Dashboards hides the option to add alt text.
    • But it is possible to add with the HTML editor.
  • Use Dark Themes for stuff that will be used over a long time or in low light conditions.
    • Otherwise, prefer the Light.
    • Make sure your Theme and basemap are either both Dark or both Light.
  • Try to limit your use of colors to just the interactive stuff and anything really deserving of special attention.
  • For optimum readability:
    • Set your text size so that each line in 40-80 characters long.
    • Keep your text left aligned.
  • In future updates, it will be possible to identify items on a map with only keyboard controls and full screen reader support will follow afterwards.

AI - AI - Oh.....

  • The AI tools got a pretty rocky introduction in the open Plenary session.
    • They all ran very slowly and several failed entirely.
      • Multiple ESRI staff members blamed the performance on an Azure outage.
      • Performance for the rest of the week was significantly better.
  • Me: If an AI agent is going to do something that cost ArcGIS Online Credits or cannot be undone, it must stop, clearly tell me everything its going to do and ask me before it does anything else. ES: Yes, it will do that.
  • The AI Data Explorer Instant App looks pretty neat.
    • ES said it was available as a Component on their GitHub, but I don't see it.
  • The image detection stuff looks very useful, especially in disaster recovery.
  • Good metadata is key to getting good AI results.
    • You can make a Webhook that sends an angry email if someone publishes without proper metadata.
  • If you want to build the AI Experience Builder Widget in showcased in the Plenary, here are the prerequisites:
    • Wait for the release of Developer Edition 1.20.
    • You must be connected to an ArcGIS Online, not Enterprise, Portal.
    • Your ArcGIS Online organization must have Beta and AI features enabled.
  • The AI Components in the JavaScript SDK won't work with ArcGIS Enterprise until at least the 5.2 version of the SDK.
    • They also won't cost anything until then, too.
      • They will definitely cost something, someday.
        • Nobody's talking about when or how much.
  • The Python API has a built-in function capable of turning your organization's data into a Knowledge Graph.
    • And then you can navigate around it using AI.
  • Stuff you really shouldn't have to tell AI, but you always do:
    • Think about it.
    • Don't lie to me.
    • If I die, you'll die, too.
      • Very concerning. Both that it is necessary and that it works.

Other ESRI Products

ArcGIS Pro
  • The Evaluate Bin Size for Point Aggradation Tool for dealing with the modifiable areal unit problem. 
  • I didn't go to any Pro focused sessions. That's all I got.

ArcGIS Online

  • Me: I want a button that can send an email to everyone in a Group. ES: Coming soon.
  • I know I'm supposed to be all Experience Builder all the time, but the most exciting thing in the last ArcGIS Online update was the re-designed Credit Dashboard.
  • Other stuff they are working on:
    • Options to limit storage Credit usage rates by user.
    • Being able to see item dependencies and get warnings about the cascading effects before you delete stuff or change sharing.
    • Contingent values - The option to restrict the value in one field based on the value in a different field.
  • ArcGIS Enterprise doesn't really do Credits, but the rest of this stuff will probably work it's way to Enterprise as well.
ArcGIS Enterprise

Instant Apps

Travel, Conference and Other Stuff That Doesn't Fit Anywhere Else - AKA: The Fun Bits

  • Two possible flight itineraries:
    • American Airlines: Perfectly timed non-stop flights both ways for $1,000.
    • United Airlines: Departing flight at 5:30AM, returning flight lands at midnight, connections in Denver both ways for $400.
      • It's cool. I would have picked United, too.
      • On the flight out, I wound up taking the exact same plane on both legs of the trip.
  • My average sleep time for the week was 5 hours.
    • An average raised significantly by the Sunday before I left.
      • A night one hour shorter than normal.
      • And with a baby screaming loudly for several hours.
    • And yet, I never felt tired.
      • Must be my passion for GIS
      • Or the dangerous amounts of caffeine and sugar I was consuming.
        • Caffeine deathsprial? 
        • Don't tell my wife.
        • My complementary iced coffee cup lasted one iced coffee.
          • It could not survive a six inch fall out of my backpack.
  • Food this year took a bit of a step back compared to last year, but was still more than adequate.
    • This year's culinary highlight was probably the beef tri-tip on Tuesday.
  • The pre-Plenary playlist had not changed at all.
    • But, The Beatles got louder.
      • Here Comes The Sun is supposed to be a chill time.
        • That was not chill.
    • Next year's DevSummit will likely coincide with the 40th anniversary of the release of U2's Joshua Tree album.
      • Joshua Tree at Joshua Tree - Just a thought for whoever is in charge of the playlist.
  • Surprise MVP perk - Go to the Merch Store and pick out a free t-shirt.
  • I scheduled a one-on-one expert session to deal with an issue with intermittent failures of an ArcPy script that runs every two hours.
    • According to the official documentation of this error, it is so rare that they cannot isolate a cause.
      • According to our experience, it happens about once a day.
    • The script went online just before DevSummit last year.
      • The ArcPy guys at the conference last year couldn't come up with a solution.
      • ESRI Support couldn't come up with a solution.
    • The guy I got paired with for the session: What if we use a while loop and try/except, so it tries again if it fails?
      • That's the kind of brilliantly dumb solutions I love.
      • I refactored the code during the 30 minute session.
        • Hasn't failed since. 
  • My pre-conference fun this year was hiking Tahquitz Canyon.
    • I'd link to their photo gallery here, but they built it and their trail map in Configurable Apps.
      • Configurable Apps were removed in the last ArcGIS Online update.
        • ESRI did not communicate this change well.
        • Go check your old applications. Some of them are broken now.
  • Bathroom related news:
    • The length of the lines made it clear that developer is still a male dominated profession.
      • I took it as an exercise in empathy. This is daily life as a woman.
    • Whoever picked the bathroom art at the Palm Springs Renaissance Hotel made the craziest possible decision.
      • I'm going to leave it a mystery and encourage you come to Palm Springs to find out for yourself.
  • The Important Questions:
    • Why are the Norwegians measuring stuff in feet?
    • What is a fruit and what is a vegetable?
      • We were able to solve this intractable debate by first acknowledging that fruit has two separate definitions, a scientific one and a culinary one, while vegetable is strictly a culinary term with no scientific meaning.
        • All fruits are vegetables, but not all vegetables are fruits.
    • What is a sport?
      • We were not able to reach a satisfactory conclusion to this debate.
      • The most restrictive definition required a ball and a way to score.
        • Definition revised to ball-like object when I pointed out that he had excluded hockey.
      • The most expansive definition was wide enough to include chess and motorsports.
      • I will stick with my definition (which I had trouble fully articulating at the breakfast table):
        • A sport must be a competition.
        • It must center around the concept of physical movement.
        • The primary energy sources should be human muscle and/or natural forces.
          • There is a narrow exception for motors and other electro/mechanical energy sources where the energy source is only being used to create the conditions in which the sport is played.
            • This allows for sports like indoor skydiving and waterskiing, while excluding competitions like air racing and NASCAR.
        • To excel at a sport, an athlete must demonstrate above average strength, dexterity and/or speed.
Celebrity Sightings

At the opening night party, I shook hands with Jack "The Jack in a Deck of ESRI Playing Cards" Dangermond.

IMG_1378.jpegThat's me on the left, you-know-who in the center and @AKRRMapGuy on the right.

To fully explain this picture, I need to go back to the picture last year and tell a slightly embarrassing story about myself. The first thing I did at the opening party last year was to inadequately chew my kabab and I never fully recovered that night. There was still a hunk of beef lodged in my throat when the picture was taken and I was looking a bit sick, because I was a bit sick. I had about a minute to talk with Jack last year, but between struggling to breathe and feeling a bit starstruck, if I made any impression at all last year it wasn't a great one.

So, I'm walking out of the opening night party and I pass right by Jack. It's an opportunity to get a better picture and maybe make a better impression on Jack. He's talking with a couple guys he clearly knows well. I'm pretty sure I've seen one of them on stage at the UC Plenary before. So, I wait my turn and join a crowd of other people also waiting for a picture with Jack. ...And I keep waiting. After about 10 minutes of waiting, and I really can't recommend this for everyone, I use the confidence boosting powers of MVP status, couple of beers and white man to interrupt Jack's conversation, introduce myself as a Community MVP and politely ask him to get back to taking pictures with the other attendees. 

Instead of having his getting his very muscular security guy to beat me senseless, he apologized and took that picture. And then I just walked away. Accidental power move? Is there a point to this story? I don't know. Maybe it's never too late to make a new first impression? Maybe it's just that Jack Dangermond is the world's nicest billionaire?

...Now, @JohnMNelson on the other hand, let's just say that guy was asking for it.PXL_20260311_012645896.jpg

I beat him senseless until he agreed to write something for this blog. And now that I've said it publicly, he is socially obligated to follow through. I'm sure he will as soon as he gets out of the hospital.

Sure, getting sempai Nelson to notice me was cool and all, but this is the guy I was most excited to meet. Anyone recognize this face?

PXL_20260310_212958025.jpg

It's @RobertScheitlin__GISP! He's not, as one attendee was surprised to learn, dead! But, I do think we need to have a little chat about why Papa hasn't come back home from the store. He gave his all to the broader GIS community for over ten years before he decided he needed to step back, stop using ESRI Community and re-focus on his actual job.

Now, Robert didn't say this bit. In fact he specifically said he would not put it this way, but I'll tell you how I feel. Being a celebrity gets exhausting. I put a lot of time and effort into this blog, the Questions Board and building Custom Widgets. I'm happy to do it. In no small part, because I know these things will stay up for years and can potentially help hundreds or thousands of people. But when I get a question in my Private Messages, my eagerness to help drops dramatically. Even worse, are the questions I get off platform. I've seen Experience Builder questions from strangers on every form of communication, including my personal phone number. That is so far over the line it makes me question my physical (either spelling) and digital safety. Please keep your questions on the Questions Board.

It's nobody's fault really. (Except that guy that thought they should text me.) It's a Tragedy of the Commons thing. My time and helpfulness is a finite resource. If I disappear one day, it will be because they have run out. So please be kind and use your Community MVPs and other GIS celebrities responsibly.

Well that was kind of a bummer, wanna see a clip of @Brian_McLeer and the Spatial Strikers (Love their third album.) dodgeballing to the semi-finals?

(view in My Videos)

And because the universe has destined us to be together forever, United Airlines randomly assigned us adjacent seats on the plane to Denver.brian on a plane.png

That's my week in Palm Springs! I'm currently aiming for San Diego next year. I probably can't do both.

more
11 12 1,889
JeffreyThompson2
MVP Frequent Contributor

Last time I did one of these things, I threw some confetti for reaching full feature parity with Web App Builder. I wonder what is coming next. Let me check this year's Roadmap...

Maybe we can reuse the confetti in June?Maybe we can reuse the confetti in June?

Here's what happens in this series:

  • I read the official What's New in Experience Builder Blog post.
  • I maybe try a few things for a few minutes.
  • I attempt to translate the What's New page from developer to English.
  • If I don't think something is going to be very important to many people, I leave it out of my notes.
  • I might make some guesses how the new stuff can be used. (Tips and Tricks LLC offers no guarantees that anything said in this post will actually work.)

Other than a lot of Web App Builder stuff, there is a lot of AI stuff on the horizon. Which brings me to the first not technically Experience Builder update that we need to talk about, big stuff is happening with the JavaScript API...

JavaScript API Updates

None of this technically matters today, since ArcGIS Online users don't have direct access to the API and the next version of Developer Edition isn't out yet, but you should really read the Release Blog if you are on Developer Edition. It's not even the 4.X API anymore. There are big breaking changes coming with imports and all Widgets are now officially deprecated. (Not Experience Builder Widgets. Separate concept. We've talked about this.)

And coming back to the AI lead in, the AI Components package should now be active. Check out the video of an AI Data Explorer Widget you could build, if you haven't vibe coded it already.

Map Viewer Updates

There are a lot of small changes to the Web Map Viewer. I'm not sure how many of them have an Experience Builder impact. Time based visibility and Arcade expressions in popups of hosted imagery layers should carry over at least. 

Now, we can finally get to the actual Experience Builder updates, starting with the framework wide updates.

Accessibility

  • Headers and Footers clarify their roles to screen readers.
    • A good reason to use official Headers and Footers on Single Page applications, something I have previously advocated against.
  • Widgets that now meet accessibility standards:
    • Date Filter - New Widget, who dis?
    • Fly Controller
    • Legend
    • Login
    • Query
    • Section
  • Use a keyboard to navigate Views in Views Navigation.
  • Text widgets, Legend widgets, and other non-interactive elements can have keyboard focus when they are scrollable. 
  • The Journey Template meets accessibility standards.
  • The Insert Widget Panel in the Builder has been prioritized for keyboard navigation.
    • I don't see how the Builder, or a Map for that matter, could ever be made fully accessible, but I guess adding more accessibility features is never a bad thing. 

Actions

The Filter Data Records and Select Data Records Message Actions support the Data Filtering Changes Trigger. This could be huge and open up lots of new interactivity options. 

Arcade

  • The AI Arcade robot is now in Experience Builder to help you write Arcade.
  • Conditional and Dynamic Styling for foreground colors (that's text and icons.) in List Widget items.

General Settings

  • Cheating cheaters can now copy other people's apps.
  • If you turn on the Page level Restricted Visibility from the last update, there is a little icon on Restricted Pages.

Languages

America hasn't been the best neighbor to Canada lately. We win gold medals with too many men on the ice and we haven't let them see the Stanley Cup in over three decades. I think I've heard about a few non-hockey related issues as well. But now an American company is letting French Canadians read Experience Builder apps, so everything is cool, right?

SQL Expression Builder

You can remove All from the Dropdown List of Unique Values.

Themes And Templates

There's a new Page Template called Concourse and a new Theme called Calcite. Use that Calcite Theme if you want to make the most ESRI looking app ever. Go over here to see the colors and whatnot. 

Widget time! What do we have?

New Widgets

  • Date Filter - Filter stuff by date or date range. Several different selection modes including a calendar.
  • Theme Mode Switcher - Toggle in or out of the Dark Side. There's probably a Palpatine and/or a Skywalker involved.

Widget Updates

  • Add Data
    • Preserves data structure of KML files and different geometry types are split into separate layers.
    • You can choose specific layers to be added from WFS or WMS.
      • WFS lets you limit the number of records, up to 30,000.
  • Analysis - Reorder parameters by clicking and dragging.
  • Chart
    • It promises to never forget your title again. It's a great title, really. Very memorable. It started with a T, right?
    • For Series Charts, X and Y axis have been renamed Category and Value Axis.
  • Directions - Re-live the good old MapQuest days and print out your directions. Hey, MapQuest still exists, who knew?
  • Draw
    • Import and export your drawings in JSON format.
    • Meanwhile in the Custom Widgets Group,  has been hard at work adding so many additional features to the Community Draw Widget. It just isn't a close race anymore. The Community Empire has launched an exoplanet mission and is nearing a Scientific Victory while the ESRI Empire just finished researching Flight.
      • It will accept drawings from exported from the official Widget.
      • And, as I'm writing this, literally right now, he sent me an update for testing to make exports compatible to import into the official Widget.
  • Edit
    • Customize fields while Batch Editing.
    • Popup Titles are now Editor Titles.
    • Highly requested/Web App Builder parity feature - Merge, Split, Copy and Paste to your hearts content.
      • Paste to same layer or another layer of same geometry type.
  • List - Place a List in an Accordion, scroll around, close it, re-open it. Still at the same spot.
  • Login - I'm just going to direct quote this because I don't get the utility, but there must be a reason, right? 
You can choose to have the widget sign the user out of their account and from any resources in the app that required separate login.
  • Map - Big stuff here. Pretty much all these updates are highly requested.
    • I know what your thinking websites just don't track you enough. Good news! Experience Builder can now follow your live updating location. Yehaw!
      • Start it by default or after hitting Locate.
      • The map can move and reorient with the user.
    • You get to decide where the Map Tools go. Finally!
      • The way Tools hide on small maps has changed. Slightly unclear on how based on the What's New text, but I think it's based on where you put them.
        • In previous iterations of Experience Builder, the hiding order was based on what type of Tool it was, and one of the first Tools to hide on Mobile was Locate, the Tool you probably want most on Mobile.
    • Google Photorealistic 3D Basemaps
    • Change the color of links in Popups.
      • The ESRI default is a grey color that does not meet accessibility standards, so you should really take a look at this setting and probably change them to good old fashioned blue.
  • Map Layers - Why isn't this documented? It's huge!!!!!!!!!
    • If there is one thing I have been advocating for for the past two and a half years, it's the ability to make thematic layer groups.
    • Last year, ESRI introduced the ability to turn all the layers on or off at once and I got excited.
      • I thought I could combine this with the ability to customize what layers are in a Map Layers Widget and make a thematic on/off switcher.
        • Instead, it just turned every layer on/off.
        • I cried.
      • It works now. Do it. It works now. Thanks, . 
  • Near Me - By tradition, Near Me gets it's own private What's New page.
    • If you get more than 10,000 result, there will be an extra button click before all the data loads, instead of instantly locking up the application entirely.
    • Display results from hidden layers or un-hide them with a Near Me search.
    • Trigger Near Me from a URL.
  • Oriented Imagery Viewer
    • Re-designed user interface.
    • New Search Tools
      • Explore Images - See images by map location.
      • Explore Images 3D - See images by vertical location.
      • Display Images - See images related to specific features.
    • Improved performance due to caching.
    • Time filters.
  • Print
    • Chose to make the legend based on the Print Service, Map visibility or what's in the Map, visible or not.
    • Make the user's username the default author.
  • Search - Auto close the Search Panel after a Search. I thought we did this like two years ago.
  • Select - Pick the default selection tool and make it run when the Widget loads.
  • Swipe - View the Sublayers of a Group Layer, but not if they were added at run-time, don't get greedy.
  • Table - You can chose to use the Webmap settings for displaying fields and editability.
  • Text - If you add a Text Widget and then don't edit it before publishing your app, it won't display with placeholder text. But come on, that's on you. Why aren't you putting text in your Text Widget?
  • Timeline - Do you begin at the beginning of time or somewhere in the middle? Deep philosophical question. And now a choice in the Timeline Widget.
  • Widget Controller

I came into this update thinking there wasn't much to talk about. But, yeah, there's some big stuff in this one. Don't have much more to say. See ya in June, if we aren't all replaced by robots.

more
10 0 536
youknowww
Occasional Contributor

I have a widget which lets the admin configure a few layers in the settings. My widget will use the layers from the settings to serve up arcgis-feature-form components and query for potential associated data under certain conditions.

The problem is my widget holds references to these layers as UseDataSources but needs an ArcGISQueriableDataSource to query for potential associated data and will need __esri.FeatureLayer for setting up arcgis-feature-form components. Additionally, if I want to have a feature form I probably need to validate if the current user as write access for the Feature Layer, and I need an __esri.FeatuerLayer to check this.

This seems like a common pattern which could be solved with DataSourceComponent or 3. It gets a little ugly when I need all 3 layers loaded and checked for permission before revealing widget features or the appropriate error message. The best solution seemed like nesting every DataSourceComponent, using a callback to extract the __esri.FeatureLayer and ArcGISQueriableDataSource from each and passing it down the nested chain.

I was wondering how I could clean this up so I let Claude (Opus 4.6) try bossing me around. It mostly gave me nonsense code but it introduced an undocumented jimu component called "MultipleDataSourceComponent". To learn more I did a keyword search in google and the ExB docs site and only came up with one reference in a response in a community question.

MultipleDataSourceComponent works very similarly to DataSourceComponent except it will not complete until add data sources in the component are loaded. This is exactly what I need to simplify my widget which requires all of its data sources before becoming accessible.

Read more...

more
1 1 199
JeffreyThompson2
MVP Frequent Contributor

Last year at DevSummit, I saw a talk by Christopher Moravec. He is the CTO of Dymaptic and an AI expert, specifically a GeoAI expert. Since then, I've been reading his weekly newsletter to stay up to date on AI, mostly GeoAI, advancements. It's an entertaining and worthwhile five minute read. 10/10 will read again...in about two hours...when this week's issue is due out.

A couple months ago, I reached out to get his thoughts on ways AI could be used in or with Experience Builder. I also sent him a link to my previous post about why AI would struggle with Experience Builder as something of a challenge.

Edit: It's the future now and Judgement Day hasn't happened yet. You are too late for the livestream. But click this link for Christopher's summary of what happened, a video of the event (or watch the video here) and a GitHub to help you get started coding Experience Builder with Claude. The short version is, with a lot of planning and preparation, Experience Builder is not too hard for a robot. 

more
3 3 731
JeffreyThompson2
MVP Frequent Contributor

For several years now, I have been limping along in this job on a computer that was really powerful enough to handle my workload.

JeffreyThompson2_0-1770671743074.jpeg

Well, they have finally heard my cries of desperation (and the lease on the old computer expired) and got me the finest computer a municipal budget can buy. Having just gone through the process of setting this beast up, I thought you might want a look behind the curtain at how I have built my Experience Builder coding environment and why. 

Source Control

Source control is a concept that allows multiple developers to work on the same project at the same time without getting in each others way. I work alone and I don't recommend trying to have multiple developers work on the same Experience Builder project, even with source control, but I still use it myself. Why? Hypocrisy, of course. I love being a hypocrite. Seriously, setting up source control is one of the first things I do when I download an new version of Experience Builder for two good reasons. 

Firstly, I use branches to maintain a production and a working versions of my code. I do not code in my main/master branch. This is the production copy of my applications. I create a working branch to do my coding in when the all the bugs are squashed I merge the working branch to my production code and deploy. If whatever I'm working on goes horribly wrong, I can go back a few commits or abandon the branch entirely and I have not lost the whole project. This is more accurately called version control, but whatevs.

The other thing setting up source control does for me is file backup. This saved my gluteus maximus when I switched computers as I did a terrible job of backing up my files to my external hard drive before my old computer went to the great scrap heap in the sky. I was able to pull the my repo off the cloud without actually losing anything.

My source control of choice is Git, because that's what I know, with backup to Azure DevOps, because that's what my employer pays for. These are both Microsoft products, so they play well with each other and another Microsoft product that we will talk about later.

Node

Did you go straight to the Node website and download Node from there? Yeah, I used to do that, too. Don't do that. What you actually want to do is go to GitHub and download nvm-windows (Assuming you are on a Windows operating system. There's a different nvm for Mac and Linux). Using NVM, or Node Version Manager to its mother, you can quickly download any version of Node you need, run multiple Node versions on the same machine and quickly switch between them. This is very important if you have any legacy projects that are on older versions of Node. And as a bonus, you don't have to navigate through the terrible Node website to find the Node version you need.

IDE

IDE stands for Integrated Development Environment, a fact I had to look up in order to write this sentence. If you're not so fancy, you could call it a code editor or if you're honest, you could call it a text editor that thinks it's better than everyone else. My IDE of choice is Microsoft Visual Studio. I think the freeware version, Visual Studio Code, is actually better, as its easier to find what many functions and the lighter memory footprint makes it less prone to stalling. But I feel I need to use the paid version if it's paid for and it's required for the ArcGIS Pro SDK. In either version, what makes Visual Studio nice to work in is how well it works with Git, IntelliSense predictive text, and customization through third-party Extensions. Extensions like...

  • Spell Check My Code - English is a very stupid language and I can barely use it even with the assistance of modern technology. The combination of a spell checker and IntelliSense is critical to preventing me spending hours debugging typos. This was a serious recurring problem in the brief period of time I tried to code without a spell checker. It's also important that your SpellCheckerUnderstandsThatJustBecauseYouStuckABunchOfWordsTogether you aren't making a mistake.
  • Visual Studio Theme Pack - I know IDE themes seem like a silly cosmetic issue, but having a theme that works for you is actually critical to productivity (and maybe your long-term health). Specifically, I'm using Dark+ from this theme pack. Whenever I look at code on a light background, it feels like instant eye strain. Strangely, I get a similar feeling from browsers in dark mode. What really makes Dark+ special to me is that the text uses different colors for different types of coding concepts. Strings, comments, functions...yada, yada, yada. Not every theme does this and few do it this well.
  • Rainbow Braces - After spelling, what's the other simple thing I'm always screwing up? Scope. Rainbow Braces makes all your {([])}s different paired colors and gives you dashed vertical indentation lines, so you can easily track scope issues and make sure all your closures are in orders. If you have ever struggled to find an unpaired }, you need this.
  • Solution Colors - If you thought it was embarrassing to spend hours debugging a typo, I've made an even dumber mistake once. For two hours, I was absolutely baffled why I couldn't even make a console log work until I found I was working in the wrong project entirely. That's the problem I got Solution Colors to prevent. I this Extension set up to add a splash of random color to each Visual Studio project.

The overall theme is colors stop dumb mistakes. Sorry if you're colorblind.

Browser

Chrome. Of course, I develop in Chrome. Because 78.6% of the internet uses Chrome and it makes sense to use the same browser as your users. And Chrome is a branded skin over Chromium, something I could also say about Microsoft Edge, Samsung Internet, Opera and Brave, among many others, which add up to give Chromium over 90% of all internet traffic. Safari and Firefox are the only major, non-Chromium browsers. 

Other Stuff

  • Foam thinking ball - Toss it up and down while thinking about stuff.
  • Foam hammer - When the thinking ain't working, bash the computer a few times without getting fired.
  • Sit/Stand desk - Makes all the required pacing and fidgeting easier.
  • Earbuds - Keeps everything out of your head but code and tunes.

more
2 3 431
JeffreyThompson2
MVP Frequent Contributor

Sometimes all the pieces of the puzzle are just sitting there, but you can't see how they go together. And then you do. And you can't image how you didn't see it earlier.

Here's our problem. Clicking the Add To Table Button in the Map Layers and other Widgets won't automatically open that Table Widget we have in a Sidebar. Here's our puzzle pieces:

Do you see it? Here's the build.

  1. Starting with a Blank Fullscreen Template, we add a Sidebar Widget and set it to Full Size.
  2. In the Always Open Side, we put a Map and a Map Layers Widget.
  3. In the Collapsible Side, we put a Widget Controller.
  4. In the Widget Controller, we put a Table Widget.JeffreyThompson2_0-1769183115945.png
  5. In the Widget Controller Settings, set the Widget Panel Arrangement to Fixed, the Width to 100% and use the Center-Bottom Square.JeffreyThompson2_1-1769183297216.png
  6. In the Table Widget, chose Select Layers and then don't. ...Don't select any layers...unless you really want to.
  7. Set your Sidebar Widget with Resizable off, Default State Collapsed and Collapse Button off to make it unopenable.

The result:

JeffreyThompson2_2-1769183550832.png

Clicking Add To Table automatically triggers the hidden Widget Controller and opens the Table Widget. Users can close the Table with the X button or use the Arrows to minimize it, which isn't an option in ArcGIS Pro for some reason. It won't automatically un-minimize or prevent you from adding the same table twice, but all-in-all, I think it's a pretty slick presentation, maybe better than the Webmap Viewer or ArcGIS Pro.

more
2 5 632
JeffreyThompson2
MVP Frequent Contributor

You are someone with some level of programming/web development experience (For this article, I will assume you are at a pretty basic level, but I think this will be useful for experienced devs as well.) and you are about to start on building a new project. You have a good outline for what you need to build. The main question now is how. You need to pick a framework. Are you going to build your application in Experience Builder Developer Edition or in the Maps SDK for JavaScript (AKA: the JavaScript API)? This post is here to help you decide. I'm going to talk about the major concepts, features and issues in both frameworks. If I think it's a point in favor I'll use green text (+), negatives are in red text (-) and we'll stick to black text if it doesn't easily fit into a binary.

Experience Builder

  • Drag and Drop Interface (+) - The Builder that all the Muggles who can't code use to make their applications is quite powerful. The entire history of web development can be seen as an effort to write as little CSS as possible and this interface can handle most of your CSS needs. You may find you don't need to write any JavaScript either.
  • Rapid Prototyping (+) - Using the Experience Builder Build Mode, it is possible to make a functional proof of concept application in a matter of minutes. If you can't build it, well now you know you have some coding to do.
  • Maps SDK for JavaScript (+) - Everything that the JavaScript API can do can be done through Custom Widgets in Experience Builder. This post is just a false choice fallacy.
  • React - React is the most popular modern framework in the world and for some good reasons. But if you haven't used it (or a similar framework) before the learning curve is steep. Do you really have the time to learn a new framework right now?
  • Redux (+) - One of the things that makes React hard to deal with is strict one-directional information flow. Redux allows you to send Messages from one part of the application to another giving you much more flexibility. Redux is so woven into Experience Builder that many developers may have no idea they are using it.
  • Storybook (+) - The Storybook has a ton of pre-built, pleasantly designed UI elements. They are generally easy to use and while the documentation is far from perfect it is generally sufficient.
  • Bootstrap (+) - You also get Bootstrap classes to help with your UI. Many options. Easy to use. Great documentation.
  • Documentation of the Functional Bits (-) - The documentation quality for developers in Experience Builder is terrible. TypeScript is almost always the best documentation source and...
  • TypeScript - Technically, Experience Builder is not written in JavaScript. It's in TypeScript. TypeScript is a superscript of JavaScript that "strictly enforces" typing. (It does not.) Done correctly, TypeScript makes the IntelliSense built into your IDE much better. But Experience Builder typings are frequently wrong, which costs this point it's green text. If IntelliSense gives an error code starting with TS, ignore it and see if it works anyway. It often does.JeffreyThompson2_0-1763409101504.png

     

  • Flexibility (+) - Want to make a single page map-centered application? You can do that. Want to make a hundred page application without a single map? Maybe consider a different framework, but you can do that.
  • Inflexibility (-) - Don't want to make an application using TypeScript in React and put it together in a Drag and Drop Interface? Then, get out of Experience Builder. Does this directly contrast with the last point? Yes.
  • Easy Set-up (+) - Click one button and start building in Node.js, React, Redux, Maps SDK for JavaScript...
  • Heavyweight (-) - Node.js, React, Redux, Maps SDK for JavaScript... Sounds like a lot of stuff because it is. Experience Builder is a bloated framework and its not easy on your network, hosting server or end-user's computer. You're driving an 18 wheeler, not a Ferrari.
  • Dynamic Content (-) - Let's say you had a list of 1000 Feature Layers and you needed to generate a page and map focused on each of them. Could you do it? Maybe. But not well. And you'll probably need a lot of custom code. 
  • Responsive Sizing - Experience Builder has three built in screen sizes to handle responsivity. Front-end devs know that really isn't enough, but there really isn't a mechanism for making more breakpoints.
  • Breaking Changes (-) - Are you expecting to update your application and keep it fresh through product updates? Experience Builder inherits all the breaking changes of React and the JavaScript API and more! And the Experience Builder Team likes to move stuff around and rename stuff, just for the fun of it. Be prepared to fix stuff every single update.
  • Overall Coding Experience (-) - Between needing to know React and the JavaScript API, the issues with responsiveness, constant breaking changes, and the lack of documentation, coding in Experience Builder is not much fun, especially for beginners. It does get somewhat easier and more fun after you've built a few dozen Widgets, but not much. @Jianxia, I cannot stress enough how much documentation counts in this category. 

Maps SDK for JavaScript

  • It Makes Maps - It makes maps and a few related things like tables and editing tools. That's it. If that's all you want, it does that. If you want to put something else on the page or make it look nice, you will need something else to do the job.
  • Flexibility (+) - It's up to you to pick what components you use with the JavaScript API. Want to use React or Vue or Angular? Sure, you can do that. Want to write raw HTML? You're a madman, but no one is stopping you. My first big project was in Django, which is a Python based framework. I had Python, JavaScript and HTML all happily (and grossly) co-existing on the same page.
  • Lightweight (+) - Because the JavaScript API only does one thing, it's much lighter weight than Experience Builder and it's pretty easy to pop into some other framework.
  • No Easy Set-up (-) - Well, you wanted to make a Django/React/Material-UI stack. So...you have to make it.
  • Components (+) - What if you could just write one line of code and have a fully functional Legend on your map? That would be pretty neat. That's what Components do. (Or Widgets, but you really shouldn't be using Widgets anymore. They are going away.) Hey, that sounds a lot like Experience Builder Widgets. Because they are and many Experience Builder Widgets are little more than loaders for JavaScript API Widgets/Components. If you are building a simple application, you may find Components can do all the work for you. Oh, and part of the reason Components are replacing Widgets is that Components are better designed to work in React-like frameworks.
  • Calcite (-) - Another part of switching to Components is to encase everything in Calcite. And unfortunately we are not talking about CaCO3. Calcite is ESRI's official UI design system. Working in the Maps SDK for JavaScript, you are expected but not required to use it. But it's going to get in your application whether you like it or not. I find Calcite confusing to use, it makes traditional CSS targeting impossible and the documentation is obtuse. Personally, every time I have tried to design something in Calcite, it has come out at least somewhat compromised. And, I don't think it looks all that good either. Calcite is getting into Experience Builder, too. But, you are at least one more step removed from it and you have the far superior Layout Widgets and Storybook to pull from to build your UI. If I could drench Calcite in 0.1 molar HCl and watch it slowly fizz away, I would.
  • Documentation of the Functional Bits (+) - The general quality of the JavaScript API is excellent. The properties and functions are clearly explained and there are many examples, even for some fairly complex builds. Although, they need to do some work to get the Component side of the documentation up to their overall standard.
  • Secret (+) - There is at least one thing you can do in the JavaScript API that can't be done in Experience Builder and it's Secret. I am not allowed to tell you what Secret is. Please do not ask about Secret. But Secret is a really good reason to pick the API over Experience Builder.
  • Dynamic Content - I can't give the JavaScript API green text on this because it can't really do dynamic builds on it's own, but with just about any modern framework, you can make it happen pretty easy.
  • Responsive Sizing - See above. There isn't anything in the API specifically to help you make dynamic screen sizes, but there isn't anything stopping you either.
  • Breaking Changes - Yeah, the JavaScript API team breaks stuff pretty often, Calcite and Components are causing a lot of issues, but at least they change stuff for a clear reason and communicate changes well. They're even changing the numbering system, so they can tell you when they're going to break stuff.
  • Overall Coding Experience (+) - Your milage may vary, but overall, using the JavaScript API is a fairly pleasant experience. There is a fairly low barrier to entry and the learning curve flattens out pretty fast.

Ultimately, I can't tell you which framework is better. The answer will depend on your goals and ability, but here is a workflow:

  1. Think about what you need your final project to do and look like.
  2. Have an honest conversation with yourself about your coding ability, capacity to learn, and time (or any other) constraints.
  3. Try an Experience Builder prototype, no code yet. If you hit a wall early, maybe switch to the JavaScript API. If the wall comes near the end, try sticking it out in Experience Builder.

more
7 0 930
249 Subscribers