Interpreted mode is enabled by adding shadow.arborist.intepreted to your ns:require in your main namespace (the one with :init-fn). The require is all you need, after that it’ll understand regular hiccup.
Except for the cases where you forget (<< [:div "static hiccup"]) and just do [:div "static hiccup"] instead. Normally this will throw an error, now it won’t and just be slow-ish. How much slower actually depends on the structure, but the more elements it processes the larger the gap becomes.
That is also the reason this isn’t enabled by default. Falling back to interpreted mode can be very hard to spot, and as such lead to performance death by a thousand cuts. It might also not be ideal for the problem you are trying to solve currently, but it certainly works fine. Just avoid rendering your entire app that way every frame
Interpreted mode is actually fine, and sort of within reagent performance for the most part. I didn’t optimize this at all yet, but that would be the baseline. A lot of people have built performant-enough things with reagent, so the interpreted mode is certainly good enough for most things. I just happen to care about performance a little too much myself.