v1.0.0Published 3 months ago


A package to help you publish the count of a cursor in near real time. Interval based counting suitable for very large collections and high user load.

Counter API

new Counter(name, cursor, [updateInterval])

name is a string used to fetch the count of the count

cursor is a collection query that will be counted

updateInterval defaults to 10000, which will update the count every 10 seconds.

Publish from Server

Publish scoped counts

Counts that are specific to a user or parameter must be declared within the publish function. This will create 1 counter for each user who subscribes.

Meteor.publish('countPublish', function(someValue) {
  return new Counter('countCollection', Collection.find({

Server scoped counts

Server scoped counts that are defined outside of publish functions are more efficient that specific counts as it only creates 1 counter per server.

var counter = new Counter('countCollection', Collection.find({}));

Meteor.publish('countPublish', function() {
  return counter;

Subscribe from client

Subscribe to the publication from client side code.


Blaze Usage

Define a global helper

UI.registerHelper("getCount", function(name) {
      return Counter.get(name);

Call from within a template

{{getCount 'countCollection'}}


Inspired by publish-counts which is great, but does run into performance issues with large collections

Performant solution derived directly from bullet-counter