# Root – recursive UI resolution

**URL:** https://clojureverse.org/t/root-recursive-ui-resolution/5488
**Category:** Your Projects and Libraries
**Tags:** clojure, clojure\_spec, clojurescript
**Created:** [February 18, 2020, 6:35pm UTC](https://clojureverse.org/t/root-recursive-ui-resolution/5488 "2020-02-18T18:35:53Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![den](https://clojureverse.org/user_avatar/clojureverse.org/den/32/322_2.png) [@den](https://clojureverse.org/u/den)
#### Post date: [February 18, 2020, 6:35pm UTC](https://clojureverse.org/t/root-recursive-ui-resolution/5488/1 "2020-02-18T18:35:53Z")

</div>

crosspost from [r/clojure](https://www.reddit.com/r/Clojure/comments/f5ur6a/root_recursive_ui_resolution/)

I’m finally open sourcing my project [root](https://github.com/den1k/root). It’s been in development since March 2019 with a few breaks to ponder its design. The goal of root was to make everything as stupid (read decomplected) as possible, e.g.:

- root doesn’t know what state is
- components don’t know where their data comes from
- components also don’t know which children they’re rendering
- root is renderer agnostic: using reagent instead of uix is a ~3 line code change (possibly [here](https://github.com/den1k/root/blob/master/dev/examples/docs.cljs#L11)). Components are functions and can emit not just `hiccup` but anything.

It has a few more tricks up its sleeve such as [automatic promise resolution](https://den1k.github.io/root/fetch.html) (again components need not to know about “promises”), `path` annotations as root recurses through data which simplify state updates (used [here](https://github.com/den1k/root/blob/master/dev/examples/nested/views.cljs#L72) to implement a generic AST editor) and more!

This is, of course, alpha software and, as such, subject to change.

Find docs and examples in the [**Github Repo**](https://github.com/den1k/root) **.**

Shout out to [u/roman01la](https://www.reddit.com/user/roman01la/) for being responsive and helpful and of course for making [uix](https://github.com/roman01la/uix)

---

<div class="post-metadata">

### Author: ![hkjels](https://clojureverse.org/user_avatar/clojureverse.org/hkjels/32/2725_2.png) [@hkjels](https://clojureverse.org/u/hkjels)
#### Post date: [February 24, 2020, 7:46am UTC](https://clojureverse.org/t/root-recursive-ui-resolution/5488/2 "2020-02-24T07:46:15Z")

</div>

This looks really cool. I wonder how it scales though

---

<div class="post-metadata">

### Author: ![den](https://clojureverse.org/user_avatar/clojureverse.org/den/32/322_2.png) [@den](https://clojureverse.org/u/den)
#### Post date: [March 5, 2020, 2:33pm UTC](https://clojureverse.org/t/root-recursive-ui-resolution/5488/3 "2020-03-05T14:33:32Z")

</div>

If you mean how it scales with bigger data, it should scale just as well or better than other apps.

in frontend apps that use technologies like graphql the data shape is determined by the UI component tree. In other words, data deps are conflated w/ rendering. In root you can create a data tree from queries separately from UI components, and let root traverse and dispatch from there.

---

<div class="post-metadata">

### Author: ![system](https://clojureverse.org/uploads/default/original/2X/5/51079bf9e4b7d9466242c06cf1e43b9f8bd6da14.png) [@system](https://clojureverse.org/u/system)
#### Post date: [September 4, 2020, 2:33am UTC](https://clojureverse.org/t/root-recursive-ui-resolution/5488/4 "2020-09-04T02:33:34Z")

</div>

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.
