Releases: ponylang/crdt
Releases · ponylang/crdt
Release list
0.2.0
Fixed to work with ponyc 0.70.0
ponyc 0.70.0 changed how type parameter constraints handle bare type names: a type name without an explicit capability now gets the type's default capability instead of #any. Intersection constraints that mixed explicit and bare capabilities stopped compiling because the bare side defaulted to ref instead of matching the explicit val.
Added explicit val capabilities to Equatable and Hashable in all affected type aliases.
[0.2.0] - 2026-09-04
Fixed
- Fixed to work with ponyc 0.70.0 (PR #39)
0.1.0
Add core CRDT types
Implements the core set of delta-state CRDTs:
Counters:
GCounter- grow-only counter with saturated additionPNCounter- positive-negative counter (increment and decrement)CCounter- causal counter with dot-based tracking
Sets:
GSet- grow-only set (add only, never remove)P2Set- two-phase set (elements can be removed once, permanently)TSet- timestamp-based set with last-write-wins semanticsAWORSet- add-wins observed-remove setRWORSet- remove-wins observed-remove set
Registers:
TReg- timestamp-based last-write-wins registerMVReg- multi-value register (retains concurrent values)
Collections:
TLog- sorted timestamped log with cutoff/trimCKeyspace- compose CRDTs under named keys with shared causal context
All types support delta-state replication and token-based serialization.
use "crdt"
actor Main
new create(env: Env) =>
let a = GCounter(1)
let b = GCounter(2)
a.increment(10)
b.increment(20)
a.converge(b)
b.converge(a)
env.out.print(a.string()) // "30"[0.1.0] - 2026-02-19
Added
- Add core CRDT types (PR #3)