Webcore started with SmartThings when they still had the Groovy cloud. Many of us here now jumped from SmartThings when they eliminated the Groovy cloud based approach, because Webcore also ran on Hubitat, since it is Groovy based. Samsung killed the ability to run any Groovy apps in SmartThings, including Echo Speaks, when they killed Groovy. There are still apps around in this forum that were converted from SmartThings apps to run on Hubitat.
So, for Webcore pistons on Hubitat, all processing is local on the hub, the difference is that the dashboard for creating and editing pistons is in the cloud. Not a bad thing, as you can write and edit pistons from anywhere in any browser, and the pistons get updated on the hub when they are saved.
Webcore was a community app, and it still is, but it is also a built-in app now. So you can just install it as a built-in app on the hub. In settings when you open the app, you have to choose the devices that Webcore can use. Then you get a code to authorize any browser, or just open the dashbaord right from the Webcore settings page on Hubitat.
The dashboard page is where you create new pistons. A piston is like a container for your rules. You can have as many independent rules in one piston as you want (well, there is a limit on how big it can be), but generally pistons are used for organizing your logic rules. A piston should be focused on things that make sense to go together. Since each piston has has its own local variables, you would combine rules that might need to access and modify those variables in the same piston.
Further, you can call other pistons from a piston, and send them data values as parameters for it to run with. You can make a "common" piston that does something that multiple pistons can call. This allows for code reuse among multiple rules in other pistons.
I just like how it mimics actual code, so the logic flows just make more sense in Webcore, at least to me. I will need to really study a complex RM rule to figure out what it is doing, but Webcore reads like it runs.
Community
Getting to Know Webcore
Becoming a Master with Webcore
String Functions
Edit: I didn't mention it, but arrays are really handy in Webcore. You can make a local variable that is an array, though they are really maps, though they are labeled arrays. You can use numerical indexes, but you can also just use key:value pairs to store data.
Edit2: One thing I missed early on was the use of the device variable. You can set a device variable that contains a bunch of devices as an array, and then there is a "For each device" loop you can use, that will iterate through all the devices in your device variable list, for when you need to do something like that.