Is this literally just to avoid using setState in favor of seeing it directly? Cuz that kind of main will make the asynchronous setState API even less transparent to people that use this.
It completely avoids setState (doesn't call it in the background).
It fixes it in a sense that your state is updated synchronously. The state is just a plain object. If you update it, it gets updated. Renders are triggered asynchronously in a batch however to be performant.
Also setState can be troublesome when you deal with complex data structures - like arrays, collections or getters/setters. This is when this library really shines.
How does this perform with *very* large state trees and modifying smaller points? It seems to me that the performance for comparing changes, or tracking changes would either mean a lot more memory usage, or be significantly slower with very large state trees.
No IE10-11 support should probably be spelled out on the homepage (per your observable dependency)... as many will be severely surprised when they find that out.
I submitted a benchmark here: https://github.com/krausest/js-framework-benchmark/pull/185. It will hopefully be merged soon. It performs better than Redux and MobX and slightly worse then optimized pure React there. I will send PRs to more benchmarks in the next week.