Dart Hybrid Logical Clock (HLC)

This is a Dart port of the hybrid logical clock implementation described by Jared Forsyth in this article.

HLCs are a useful primitive for CRDT implementations.


Pub Version

In pubspec.yaml:

  hlc: ^1.0.0


Import the library:

import 'package:hlc/hlc.dart';

Initialize a local HLC with the current wall clock:

var hlc = HLC.now();

Perform a local action that requires advancing the local HLC:

hlc = hlc.increment();

Receive a remote HLC, applying it to the local one:

final remoteHlc = HLC.now(); // From somewhere in the network.
hlc = hlc.receive(remoteHlc);

Serialize/deserialize an HLC while maintaining its topological ordering:

final serialized = hlc.pack();
final deserialized = HLC.unpack(serialized);