Novel Planetary Movement


    1.2.3 • Public • Published


    Simple license generator/validator using JWT with the pre-defined claim names (fields) and validation semantics.

    • product - a string identifying the product the license applies to
    • features - an array of strings identifying features of the product
    • activationDate - a Date indicating when the license period starts
    • expirationDate - a Date indicating when the license period ends
    • email - a string identifing who the license is for (primarily used for logging and identification for support purposes)

    Both the product and features fields support * as a wildcard to indicate that all products or features are covered by the license. When the product field is a wildcard, any product check matches but it does not imply that all features are covered. When the features list contains a wildcard as one of its entries, any feature check matches.


    The strong-license module defines the License class, which can be used for generating, parsing, and validating a license key.

    Generating a License Key

    var License = require('strong-license').License;
    var details = {
      email: '',
      product: 'enterprise-node',
      features: ['foo', 'bar', 'baz'],
      activationDate: new Date(),
      expirationDate: new Date( + 1000*60*60*24*365),
    var lic = new License(details, 'super secret key!');
    process.env.LICENSE_KEY = lic.key;

    It is also possible to generate a null license, which does not cover any products or features and is perpetually expired. It does, however, cover the null query scenario.

    var License = require('strong-license').License;
    var nullLicense = new License();
    nullLicense.covers(); // => true! Can't do anything, but can do nothing!

    Parsing/Validating a License Key

    If a license coverage query omits a field, that field is considered a match.

    var License = require('strong-license').License;
    var now = new Date();
    var yesterday = new Date( - 1000*60*60*24);
    var lic = new License(process.env.LICENSE_KEY, 'super secret key!');
    lic.covers('enterprise-node', 'foo', now); // => true
    lic.covers('myProduct', 'featurex', now); // => false

    If a parameter is omitted, is considered a match.

    lic.covers('enterprise-node', 'bar', null); // => true
    lic.covers('enterprise-node', null, now); // => true
    lic.cocers(null, 'baz', yesterday); // => false
    lic.covers(); // => true! any license covers "nothing"




    npm i strong-license

    DownloadsWeekly Downloads






    Last publish


    • rmg
    • ritch
    • rfeng
    • bajtos
    • 0candy
    • amir-61
    • hacksparrow
    • superkhau
    • kraman
    • thegman
    • davidcheung
    • tonyf-ibm
    • qpresley
    • kjdelisle
    • jannyhou2016
    • b-admike