We did multiple experiments on server driven UI for our mobile apps.
1) Using native app - Sending layouts in JSON and using Flipkart Proteus library in Android to render them. This only enables appearance changes and not behaviors. So we really didn't server driven LOGIC.
2) Using Flutter - Wrote the wrappers for Flutter widgets. Those wrappers basically just converts JSON to Flutter widgets at run time. And also enabled actions to be server driven. The complete app was made server driven using this approach. The only problem is, too much of abstraction in the client made the code base very messy and hard to reason.
3) Using React native - The biggest selling point for using react native is, codepush feature. We didn't have to write dumb client wrappers which expects JSON from server. We can just write normal JS code and deliver it to client devices without making app update. This enables really rapid experimentation for product features. We are currently developing this.
1) Using native app - Sending layouts in JSON and using Flipkart Proteus library in Android to render them. This only enables appearance changes and not behaviors. So we really didn't server driven LOGIC.
2) Using Flutter - Wrote the wrappers for Flutter widgets. Those wrappers basically just converts JSON to Flutter widgets at run time. And also enabled actions to be server driven. The complete app was made server driven using this approach. The only problem is, too much of abstraction in the client made the code base very messy and hard to reason.
3) Using React native - The biggest selling point for using react native is, codepush feature. We didn't have to write dumb client wrappers which expects JSON from server. We can just write normal JS code and deliver it to client devices without making app update. This enables really rapid experimentation for product features. We are currently developing this.