2.0.0 • Public • Published


    Yet another implementation of turning objects and/or values into a JSON string.

    This one strives to be safe (JSON.stringify will throw on bigint and circular references) and result in a JSON that's easy on the eyes while keeping enough information:

    • references to objects are reported as a string with path to the first "encounter", e.g., "@one.two",
    • so are circular references too, but "@" character is doubled, e.g., "@@one.two",
    • undefined values are exported as an empty string, e.g., "",
    • bigint values are exported as a string, e.g., "5n",
    • Buffer values are exported as a string with it's data shown as hexadecimal, e.g., "[42]",
    • Infinity values are exported as a string, i.e., "Infinity",
    • NaN values are exported as a string, i.e., "NaN",
    • regular strings are prefixed with a less-than, i.e., "<text".

    It's meant to be used for console.log-like output: for a quick check what's going on while debugging, and for testers to be able to quickly copy&paste information to developers.

    Do not use it to store data! While it's output can be parsed back to objects, result will differ from the original data.


    npm install @ahwayakchih/logify


    npm install https://github.com/ahwayakchih/logify


    Example code:

    const logify = require('logify');
    const circular = {
      text: 'test'
    circular.circular = circular;
    const o = {};
    o.one = 1;
    o.two = "two";
    o.three = undefined;
    o.four = null;
    o.five = 5n;
    o.six = {
      oo: o,
      a: circular
    o.seven = o;
    o.eight = circular;
    o.nine = function nine () { return 'Hello'; };
    o.ten = () => 'World!';
    o.eleven = {
      f1: function () {},
      f2: () => {}
    o.twelve = Buffer.from('\x42');
    o.thirteen = Infinity;
    o.fourteen = NaN;
    o.fifteen = [1,'2',circular,null,Infinity,NaN,15n,undefined];
    o.sixteen = '<hack';

    It should output something like this:

      "one": 1,
      "two": "<two",
      "three": "",
      "four": null,
      "five": "5n",
      "six": {
        "oo": "@@",
        "a": {
          "text": "<test",
          "circular": "@@six.a"
      "seven": "@@",
      "eight": "@six.a",
      "eleven": {},
      "twelve": "[42]",
      "thirteen": "Infinity",
      "fourteen": "NaN",
      "fifteen": [
      "sixteen": "<<hack"

    By enforcing empty spacer:

    console.log(logify(o, ''));

    You can get output similar to default JSON.stringify:



    Logify uses features from ES2015, so it should be compatible with most of the up-to-date browsers and Node.js. To make InternetExplorer use logify, you'll probably need some pollyfills and/or additional compile stage, e.g., using Babel.

    Tests use features from ES2020, e.g., bigints (1n), so Node.js v12+ is required.

    API Documentation

    To generate documentation for this module, clone it from repository (package does not include required files) and use:

    npm run doc

    It will create HTML files inside logify/reports/jsdoc directory.


    To run tests, clone module from repository and use:

    npm test

    To check coverage, use:

    npm run checkCoverage

    To check for any linting issues use:

    npm run checkStyle


    npm i @ahwayakchih/logify

    DownloadsWeekly Downloads






    Unpacked Size

    8.69 kB

    Total Files


    Last publish


    • ahwayakchih