While the previous version significantly sped up the process of identifying which backend record belongs to which UI / Declarative action, I wasn’t a fan of observing the Shadow DOM, and honestly, I felt like something was still missing. So, I’ve tuned it up a bit.
(more…)My
UI Builder
Corner ☕
Personal blog about Next Experience UI Builder.

ServiceNow Browser Extension: UI Builder Dock available in Google Web Store here.
Recent posts
Did my blog save you from pulling your hair out? Feel free to buy me a coffee 😎

Jan Moser, 2025
-
Have you ever been working in the Service Operations Workspace (or any other, for that matter) and needed to quickly navigate to the backend record of a specific UI (Declarative) action? It was a total pain sometimes, right?
UI Builder Dock for ServiceNow v1.0.19 is here to kill that pain now! 🙂
(more…) -
Everyone around is building apps using AI agents, and I was like: “OK, I want to build something for ServiceNow too.” But I don’t want to be locked into in-built ServiceNow features (aka NowAssist), and I don’t want to build (or wait for) another MCP server acting just as a wrapper around the Table API.
And I want to build for UI Builder 💖
Here is how 👇
(more…) -
Well, it had to happen sooner or later. This extension has been in production for over a year, with 16 versions under its belt, and there’s never been a need for a hotfix or a rollback.
Actually, it’s not even a hotfix in the true sense of the word this time—nothing in the application itself broke. ServiceNow just changed the structure of custom components. Previously, custom components created via UI Builder were wrapped in a special
sys_cb_metadatarecord; now, thesys_idyou see in the URL is a direct link to thesys_ux_macroponent.At the same time, it seems it’s no longer that easy to distinguish between a custom component created in UI Builder and one created via the UI Framework based on the data alone.
In the previous version of the extension, I identified them precisely by whether the macroponent had a linked
sys_cb_metadatarecord. That no longer seems to be the case; the only clue (AFAIK) is whether a Root component is implemented or not.- If a
sys_ux_macroponenthas aroot_componentimplemented, it’s a UX Framework component. - If it doesn’t, it’s a UI Builder component.
We’ll see; I’ll keep an eye on it.
So, now I just hope I didn’t break anything else with that hotfix 😎
v1.0.17 s currently being deployed; you can expect it shortly.
Jan
- If a
-
You know the struggle. Every workspace has its configuration stored on the backend. But it’s not just one nice, cozy record where you can see everything. That would be too easy. Instead, it’s a scavenger hunt. You have your sys_ux_page_registry here, your sys_ux_page_property over there, some View Rules hidden in another table, and don’t get me started on Declarative Actions.
It’s scattered, it’s annoying, and frankly, it bugged me. 🫠
I realized I was wasting way too much time just trying to find where exactly a specific setting for
sow(Service Operations Workspace) or my custom workspace was living.So, for the latest update of UI Builder Dock (v1.0.16), I cooked up a new feature.
(more…) -
I’ve always wanted the option to create custom components via React and use them in UI Builder.
Just imagine having the possibility to compose structure like this:
Container
(more…)
— Button
— My React component ⭐
— Container
— — Stylized text
— — Custom component created in UI Builder
— Highlighted value
— Custom component created in UI Framework
— Container
— — Another React component ⭐
etc.
All past efforts hit a wall, but I finally figured it out. Here is the implementation guide, complete with a link to a functional repository. -
OK, it’s not a standard update this time. I was cooking 🚀 and it’s something I like a lot! Take a look 👇
(more…) -
If you have been following my recent posts, you know I’ve been spending quite some time trying to tame the Action Bar component. We looked at filtering, splitting, and moving buttons around just to make the workspace look a bit cleaner.
But there was one thing that really bugged me. A behavior that just didn’t make sense, no matter how you looked at it. And I decided not to let it go.
So, here is a short story about a small fight for better UI design principles. 👇
(more…) -
I wanted to avoid DOM manipulation as it can be sometimes hard to distinguish what is a pure instance and what was added afterwards (for example, I don’t anymore know what is vanilla ServiceNow and what’s SN Utils).
Anyway, for now there are two places where I am missing OOB buttons:
- creating ACL from Data resource
- and going from Page Collection to backend.
So I created extension-specific buttons to kill this pain.
(more…) -
I’ve just had the chance to use Component Builder on a real project for the first time—not tinkering at home in the evenings, but a real implementation I had to think through from architecture to execution. And buddy, I’ve got a few comments about it.
(more…)