A system for object replication, comprising: a first node comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the processors to: maintain a local vector clock associated with the first node and a copy of a vector clock associated with a second node communicatively coupled to the first node; receive a set of one or more remote proposed operations to the object from the second node; maintain, by the first node, a local log and a shadow log for the first node, the local log comprising an append-only log to which clients (A-1... A-n) of the first node subscribe and which contains a linear set of proposed operations to be applied by clients of the first node, the shadow log comprising all proposed operations received from other nodes, including the second node, of the system, and the proposed operations to be applied by clients of the first node, wherein the local log has an associated local log vector clock and the shadow log has an associated shadow log vector clock; determine a difference between a logical timestamp component of the local log vector clock and a logical timestamp component of the shadow log vector clock; determining a conflict exists between the received set of one or more remote proposed operations and one or more locally-proposed operations based on the local log vector clock being less than the shadow log vector clock; and in response to determining a conflict exists, performing a sync operation to the local log by computing an operational transform over the one or more remote proposed operations to account for all locally-proposed operations that happen before the one or more remote proposed operations to obtain a transformed version of the one or more remote proposed operations, adding the transformed version of the one or more remote proposed operations to the end of the local log and setting the local log vector clock to the same as the shadow log vector clock. maintain a local vector clock associated with the first node and a copy of a vector clock associated with a second node communicatively coupled to the first node; receive a set of one or more remote proposed operations to the object from the second node; maintain, by the first node, a local log and a shadow log for the first node, the local log comprising an append-only log to which clients (A-1... A-n) of the first node subscribe and which contains a linear set of proposed operations to be applied by clients of the first node, the shadow log comprising all proposed operations received from other nodes, including the second node, of the system, and the proposed operations to be applied by clients of the first node, wherein the local log has an associated local log vector clock and the shadow log has an associated shadow log vector clock; determine a difference between a logical timestamp component of the local log vector clock and a logical timestamp component of the shadow log vector clock; determining a conflict exists between the received set of one or more remote proposed operations and one or more locally-proposed operations based on the local log vector clock being less than the shadow log vector clock; and in response to determining a conflict exists, performing a sync operation to the local log by computing an operational transform over the one or more remote proposed operations to account for all locally-proposed operations that happen before the one or more remote proposed operations to obtain a transformed version of the one or more remote proposed operations, adding the transformed version of the one or more remote proposed operations to the end of the local log and setting the local log vector clock to the same as the shadow log vector clock.