Negentropy

low level

Basic reconciliation

final filter = Filter(
  authors: ['your_pubkey'],
);

final response = ndk.nip77.reconcile(
  relayUrl: 'wss://relay.example.com',
  filter: filter,
);

// Wait for completion
final result = await response.future;
print('Sync complete: ${result.needIds.length} events to fetch, ${result.haveIds.length} events to broadcast');

Error handling

Relay doesn't support NIP-77

try {
  final response = ndk.nip77.reconcile(
    relayUrl: 'wss://relay.example.com',
    filter: filter,
  );
  await response.future;
} on Nip77NotSupportedException catch (e) {
  print('Relay does not support NIP-77: ${e.message}');
  // Fall back to traditional query with paginate true
  ndk.requests.query(filter: filter, paginate: true);
} on Nip77TimeoutException catch (e) {
  print('Reconciliation timed out: ${e.timeout}');
}

When to use

Good for:

  • Syncing large event sets (long history)
  • Periodic reconciliation with home relays
  • Ensuring relay has all your events
  • Discovering events you missed

Use other methods for:

  • Small queries → use ndk.requests.query()