JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://unpkg.com/moonjs"></script>
<div id="app">{{msg}}</div>

JavaScript

var MoonTracked = {
  init: function(Moon) {
    var init = Moon.prototype.init;
    Moon.prototype.init = function() {
      var data = this.$data;
      var self = this;
      
      var track = function(key) {
        Object.defineProperty(self, key, {
          get: function(key) {
            return data[key];
          },
          set: function(val) {
            self.set(key, val);
          }
        });
      }

      for(var key in data) {
        track(key);
      }

      init.apply(this, arguments);
    }
  }
}

Moon.use(MoonTracked);

var app = new Moon({
  el: "#app",
  data: {
    msg: "Hello Moon!"
  }
});

app.msg = "Changed!";