I've been playing around with UIElements for the past few weeks. First off, as someone who started their career as a web developer, I really love what y'all have made here. Making new editor tools with this has been really enjoyable. Unfortunately, I've been running into a few issues when trying to extend functionality in various places. Lots of the API is internal, which causes some friction depending on what you're trying to do. There's been two particular cases I've encountered. 1. Trying to create new fields. To save on rewriting a lot of similar code, it seemed like a good idea to try extending from BaseField<T>, as it handles much of the labels, binding, valueChanged, focus order and such automatically. This plan was scuppered, as theBaseField<T>.visualInput is an internal member. 2. Trying to extend binding. Boy, this one was not an easy thing to navigate. Unfortunately, the docs are still pretty sparse on extending bindings, to the point where I'm starting to question whether they were even meant to be extended, or if I'm doing things I shouldn't be. - All the binding event classes are internal. This makes it impossible to create a custom alternative to say, PropertyField or Inspector. Both of these classes rely on using the binding events to bind the more complicated property types, such as arrays. I was hoping to implement some custom array editors that would auto update, but this has been proving rather nightmarish when using bindings. The only way to use the binding events is via reflection, which is pretty nasty. - All of the IBinding implementations are private, making it impossible to interact with the binding (without reflection). Admittedly, I haven't found an explicit use case for this just yet, but it would be nice to be able to access the SerializedObject/SerializedProperty directly at times. Any hopes of getting these public? Or am I simply going about this the wrong way? EDIT: Having a further look, also appears most things to do with ViewData are also internal (e.g. VisualElement.OnViewDataReady()). Again, this makes it pretty hard to make custom uses of ViewData.