In this implementation if we try to create a ref with an object as a value (e.g. const test = ref({ count: 2 })) and then, if we change the value (e.g. test.value.count = 4) the setter (and accordingly the effect) WON'T BE triggered. I guess it's ok, because the setter tracks only the value changes but we try to change a property of the value. The intresting thing is it works in a different way in Vue and the setter WILL BE triggered in this case. It would be nice to know why and how they implemented it.