git ssb


noffle / hyperlog-reduce


Stephen Whitmore committed 0.0.1Latest: d3afc4a on 1/28/2017, 7:03:11 PM


Implement an async reduce function over a hyperlog.

This was inspired by @dominictarr's flumedb and clean approach to materialized views. This module implements something akin to a flumeview-reduce over a hyperlog.


Create a sum reduce function over a hyperlog of numbers:

var reduce = require('hyperlog-reduce')
var memdb = require('memdb')
var hyperlog = require('hyperlog')

var log = hyperlog(memdb(), {valueEncoding: 'json'})

var sum = reduce({
  db: memdb(),
  log: log,

  // create the materialized view default value
  init: function () {
    return 0

  // runs on each node in the hyperlog
  reduce: function (node, sum, next) {
    sum += node.value.amount
    next(null, sum)

log.append({amount: 3}, function () {
  log.append({amount: 6}, function () {
    log.append({amount: 1}, function () {

// blocks until the index is caught up
sum.get(function (err, value) {
  console.log('sum is', value)

This will output

sum is 10


var reduce = require('hyperlog-reduce')

var reducer = reduce(opts)

Create an async reducer over a hyperlog. opts is required and must have the following key/values:


Asynchronously retrieves the current value of the reduce function. If nodes are still being processed, done isn't called until the index catches up.

done is a callback of the form function (err, value) { ... }.


With npm installed, run

$ npm install hyperlog-reduce



Built with git-ssb-web