* HTML fragment type and literals. It's analogous to React's JSX and helps you write statically-checked and type-safe HTML.
* SQL literals. Sort of like LINQ in C#. This ensures that your SQL is statically checked, so you can't end up with invalid queries at runtime, and type-safe.
* Allows you to write client side code in Ur. This means that you can, for example, write a button's `onclick` that issues a (strong-typed) RPC call to the backend all in Ur. Sort of like tRPC for TypeScript.
You can find all of these features in other web stacks, as mentioned. But in Ur/Web everything is tightly integrated. And you can also be sure of your app's correctness due to all the static and type checks.
Those are the good parts. The bad part is that Ur/Web went down the ML rabbit-hole. You pretty much have to be familiar with an ML language to be able to use it. It also suffers from the usual low adoption of ML languages.